Calculadora de pontuação de boliche de dez pinos
Esta calculadora de boliche transforma um registro completo, quadro a quadro, na pontuação oficial da partida.
Executar grátis
Informe os pinos derrubados em cada jogada, mantenha strikes como quadros de uma jogada e coloque as jogadas de bônus no décimo quadro. O resultado apresenta os pontos de cada quadro, o placar acumulado depois de cada um e o total final. Combinações inválidas são recusadas, não corrigidas silenciosamente, o que torna a ferramenta útil para conferir súmulas, testar sistemas e aprender como funcionam os bônus de strike e spare.
Informe os dez quadros no formato correto
Forneça exatamente dez arrays de quadros na ordem da partida. Do primeiro ao nono, registre um strike como [10]. Todo quadro sem strike deve ter duas jogadas, como [7, 3] para um spare ou [7, 2] para um quadro aberto. Zeros são importantes: nove pinos seguidos de uma canaleta devem ser escritos como [9, 0], e não como um quadro com apenas um valor. O décimo quadro contém suas próprias jogadas de bônus. Um strike exige mais duas, por exemplo [10, 8, 1]; um spare exige mais uma, como [6, 4, 7]. Um décimo quadro aberto tem somente as duas jogadas normais. Cada valor precisa ser um inteiro de zero a dez. A calculadora recebe uma partida concluída, pois não é possível determinar o valor final de strikes e spares antes das jogadas seguintes. O agrupamento por quadro facilita a comparação com uma súmula em papel e preserva a sequência cronológica usada no cálculo dos bônus.
Entenda strikes, spares e o décimo quadro
Um quadro aberto vale a quantidade de pinos derrubados nele. Um spare vale dez mais os pinos da jogada seguinte, mesmo que ela esteja no próximo quadro. Um strike vale dez mais os pinos das duas jogadas seguintes, que podem atravessar um ou dois limites de quadro. Por isso, strikes consecutivos se combinam: o primeiro de uma sequência recebe os dois strikes seguintes como bônus e vale trinta. O décimo quadro difere apenas porque precisa trazer jogadas suficientes para resolver o próprio bônus. Elas não formam um décimo primeiro quadro. Os pinos são recolocados depois de um strike. Assim, se a segunda jogada do décimo também for strike, a última pode valer de zero a dez. Se a segunda derrubar menos de dez, ela e a terceira usam a mesma armação e não podem superar dez juntas. Depois de um spare no décimo, a jogada final pode derrubar até dez pinos de uma nova armação. Essas verificações impedem que sequências aparentemente possíveis, mas incompatíveis com o jogo real, recebam pontuação.
Leia o resultado e use as falhas de validação
A resposta oferece três visões alinhadas da partida. total_score é a pontuação final, de zero ao máximo de trezentos de uma partida perfeita. frame_scores lista os pontos atribuídos a cada quadro depois dos bônus. cumulative_scores mostra o total acumulado até cada quadro, como os valores normalmente anotados em uma súmula. Essa separação esclarece por que um strike pode valer mais do que os pinos visíveis em sua própria casa. Ela também permite comparações automáticas precisas: uma integração consegue localizar o primeiro quadro em que dois sistemas discordam, em vez de conferir apenas o total. Entradas inválidas geram erro, nunca um placar parcial. Falhas comuns incluem menos de dez quadros, uma segunda jogada após strike antes do décimo, mais de dez pinos na mesma armação, ausência de bônus obrigatório no décimo ou bônus após quadro aberto. Cada cálculo pela API custa US$ 0,002; a versão no navegador roda localmente para conferências manuais rápidas.
Casos de uso
Conferir uma súmula de liga
Recalcule cada quadro e compare os acumulados e o total antes de registrar o resultado.
Testar software de pontuação
Use casos determinísticos com strikes, spares, quadros abertos e décimos quadros em testes de regressão.
Ensinar a regra oficial
Mostre como uma ou duas jogadas seguintes alteram o valor de um spare ou strike sem esconder a aritmética.
Perguntas frequentes
Como devo informar um strike?
Use um quadro com uma jogada de valor 10 do primeiro ao nono. No décimo, inclua as duas jogadas de bônus no mesmo array.
Como devo informar um spare?
Use duas jogadas cuja soma seja 10. Um spare no décimo também exige a jogada única de bônus como terceiro valor.
A calculadora aceita uma partida perfeita?
Sim. Informe nove quadros [10] e finalize com [10, 10, 10] no décimo; o total oficial é 300.
Por que meu décimo quadro foi recusado?
Um strike exige dois bônus, um spare exige um e um quadro aberto não permite nenhum. Os bônus também precisam respeitar a reposição dos pinos.
Quanto custa um cálculo?
Cada cálculo pela API custa US$ 0,002. A calculadora no navegador executa localmente a mesma lógica determinística.
Posso enviar uma partida ainda em andamento?
Não. Esta capacidade requer os dez quadros e todas as jogadas de bônus necessárias para fechar a pontuação oficial.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/game/bowling-score-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"frames":[[10],[7,3],[9,0],[10],[0,8],[8,2],[0,6],[10],[10],[10,8,1]]}'const res = await fetch("https://api.kit.forhosting.com/game/bowling-score-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"frames": [
[
10
],
[
7,
3
],
[
9,
0
],
[
10
],
[
0,
8
],
[
8,
2
],
[
0,
6
],
[
10
],
[
10
],
[
10,
8,
1
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/bowling-score-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"frames": [
[
10
],
[
7,
3
],
[
9,
0
],
[
10
],
[
0,
8
],
[
8,
2
],
[
0,
6
],
[
10
],
[
10
],
[
10,
8,
1
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/bowling-score-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"frames":[[10],[7,3],[9,0],[10],[0,8],[8,2],[0,6],[10],[10],[10,8,1]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"frames":[[10],[7,3],[9,0],[10],[0,8],[8,2],[0,6],[10],[10],[10,8,1]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/bowling-score-calculate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"frames": [
[
10
],
[
7,
3
],
[
9,
0
],
[
10
],
[
0,
8
],
[
8,
2
],
[
0,
6
],
[
10
],
[
10
],
[
10,
8,
1
]
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.bowling_score_calculate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |