Tenpin-Bowling-Punktzahl pro Frame berechnen
Dieser Tenpin-Bowling-Rechner wandelt eine vollständige Aufzeichnung Frame für Frame in das offizielle Spielergebnis um.
Im Browser ausführen – kostenlos
Geben Sie die bei jedem Wurf gefallenen Pins ein, führen Sie Strikes als Frames mit einem Wurf und tragen Sie Bonuswürfe im zehnten Frame ein. Das Ergebnis zeigt die Punkte jedes Frames, den laufenden Stand und die Endsumme. Unmögliche Kombinationen werden abgelehnt und nicht stillschweigend korrigiert. Damit eignet sich der Rechner zum Prüfen von Spielzetteln, für Softwaretests und zum Erlernen der Bonusregeln für Strikes und Spares.
Geben Sie alle zehn Frames korrekt ein
Übermitteln Sie genau zehn Frame-Arrays in Spielreihenfolge. In den Frames eins bis neun notieren Sie einen Strike als [10]. Jeder Frame ohne Strike enthält zwei Würfe, etwa [7, 3] für einen Spare oder [7, 2] für einen offenen Frame. Nullen sind wichtig: Neun Pins und anschließend kein Treffer werden als [9, 0] eingetragen, nicht als Frame mit nur einem Wert. Der zehnte Frame enthält seine eigenen Bonuswürfe. Nach einem Strike sind zwei weitere Würfe erforderlich, beispielsweise [10, 8, 1]; nach einem Spare ist es einer, etwa [6, 4, 7]. Ein offener zehnter Frame besitzt nur die zwei regulären Würfe. Jeder Wert muss eine ganze Zahl von null bis zehn sein. Der Rechner erwartet ein abgeschlossenes Spiel, weil Strike- und Spare-Werte erst nach den folgenden Würfen feststehen. Die Gruppierung nach Frames erleichtert den Vergleich mit einem Spielzettel und bewahrt zugleich die zeitliche Reihenfolge, die für die Bonusberechnung nötig ist.
Verstehen Sie Strikes, Spares und den zehnten Frame
Ein offener Frame zählt die darin gefallenen Pins. Ein Spare zählt zehn plus die Pins des nächsten Wurfs, selbst wenn dieser im folgenden Frame liegt. Ein Strike zählt zehn plus die Pins der nächsten beiden Würfe, die eine oder zwei Frame-Grenzen überschreiten können. Aufeinanderfolgende Strikes verstärken sich daher: Der erste einer Serie erhält die nächsten zwei Strikes als Bonus und zählt dreißig. Der zehnte Frame unterscheidet sich nur dadurch, dass er genügend Würfe für seinen eigenen Bonus enthalten muss. Diese Zusatzwürfe bilden keinen elften Frame. Nach einem Strike wird neu aufgestellt. Ist auch der zweite Wurf im zehnten Frame ein Strike, darf der letzte zwischen null und zehn liegen. Fallen beim zweiten weniger als zehn Pins, teilen sich zweiter und dritter Wurf eine Aufstellung und dürfen zusammen höchstens zehn ergeben. Nach einem Spare im zehnten Frame kann der letzte Bonuswurf bis zu zehn neu aufgestellte Pins treffen. Diese Prüfungen verhindern eine Wertung von Folgen, die zwar plausibel aussehen, auf der Bahn aber unmöglich sind.
Lesen Sie das Ergebnis und nutzen Sie Validierungsfehler
Die Antwort enthält drei aufeinander abgestimmte Ansichten des Spiels. total_score ist das Endergebnis von null bis zum Maximum von dreihundert bei einem perfekten Spiel. frame_scores führt die nach Anwendung der Boni gutgeschriebenen Punkte jedes Frames auf. cumulative_scores zeigt den laufenden Gesamtstand nach jedem Frame wie auf einem üblichen Spielzettel. Diese Trennung erklärt, warum ein Strike mehr wert sein kann als die im eigenen Feld sichtbaren Pins. Sie ermöglicht außerdem genaue automatische Vergleiche: Eine Integration kann den ersten abweichenden Frame zweier Systeme finden, statt nur deren Endsumme zu vergleichen. Ungültige Eingaben erzeugen einen Fehler und niemals einen Teilstand. Häufig sind weniger als zehn Frames, ein zweiter Wurf nach einem Strike vor dem zehnten, mehr als zehn Pins aus derselben Aufstellung, ein fehlender Pflichtbonus oder ein Bonus nach einem offenen zehnten Frame. Eine API-Berechnung kostet $0.002; die Browserversion läuft für schnelle manuelle Prüfungen lokal.
Anwendungsfälle
Einen Liga-Spielzettel prüfen
Berechnen Sie jeden Frame neu und vergleichen Sie Zwischenstände und Endsumme vor der Erfassung.
Scoring-Software testen
Nutzen Sie deterministische Strike-, Spare-, offene und zehnte Frames als Regressionstests.
Offizielle Wertung erklären
Zeigen Sie ohne verborgene Rechenschritte, wie folgende Würfe den Wert eines Spares oder Strikes verändern.
Häufige Fragen
Wie gebe ich einen Strike ein?
Verwenden Sie in den Frames eins bis neun ein Array mit dem einzigen Wert 10. Im zehnten gehören beide Bonuswürfe in dasselbe Array.
Wie gebe ich einen Spare ein?
Verwenden Sie zwei Würfe mit der Summe 10. Ein Spare im zehnten Frame benötigt zusätzlich seinen Bonuswurf als dritten Wert.
Unterstützt der Rechner ein perfektes Spiel?
Ja. Geben Sie neun Frames [10] und im zehnten [10, 10, 10] ein; die offizielle Summe beträgt 300.
Warum wurde mein zehnter Frame abgelehnt?
Ein Strike erfordert zwei Boni, ein Spare einen und ein offener Frame keinen. Bonuswürfe müssen außerdem die Neuaufstellung beachten.
Was kostet eine Berechnung?
Jede API-Berechnung kostet $0.002. Der Browserrechner führt dieselbe deterministische Logik lokal aus.
Kann ich ein noch laufendes Spiel senden?
Nein. Diese Fähigkeit benötigt alle zehn Frames und sämtliche Bonuswürfe, die das offizielle Endergebnis festlegen.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
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)Beispiel-Anfrage
{
"frames": [
[
10
],
[
7,
3
],
[
9,
0
],
[
10
],
[
0,
8
],
[
8,
2
],
[
0,
6
],
[
10
],
[
10
],
[
10,
8,
1
]
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.bowling_score_calculate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |