8-ball script php js ajax - script billiard php5.6 php8.0 download v. 10.10.2026

Multiplayer-Spiel 8-Ball für zwei Spieler im Internet. Backend: JSON und SQL. Frontend: JavaScript ES5 + Canvas 2D. Der Server ist die Zustandsautorität (Anti-Cheat).


Inhaltsverzeichnis
  1. Screenshots
  2. Dateien und Architektur
  3. 8-Ball-Spielregeln
  4. Tischgeometrie und Taschen
  5. Physik-Engine
  6. Steuerung und Treffpunkt
  7. Multiplayer — Zustandsautomat und Zeit
  8. API — vollständige Aktionsübersicht
  9. Wirtschaft: Startgeld, Pool, Guthaben
  10. Ränge und VIP-Rechner
  11. Admin-Panel
  12. Sicherheitsschicht
  13. Technische Hinweise

1. Screenshots

Spielbildschirm — 8-Ball-Tisch, Spielerleiste, Treffpunkt-Panel
Abb. 1 — Spielbildschirm. Von links: Spielerleiste über dem Tisch (Avatar + Login + Pool), Tisch mit aufgebautem Billarddreieck und weißer Kugel auf der Anspiellinie, rechtes Panel: TREFFPUNKT (große weiße Kugel zum Einstellen des Effekts), VERSENKTE KUGELN (Reihenfolge) und RUNDE. Unter dem Tisch die Statusmeldung „Warten auf Spieler" und die Schaltfläche „Am Tisch Platz nehmen".
Testergebnisse der Physik-Engine — Trajektorien und Erkennung versenkter Kugeln
Abb. 2 — Schuss-Engine-Tests (A–H). Für jeden Schuss meldet die Engine: Treffer/Fehlschuss in die Tasche, Endposition und Endgeschwindigkeit sowie die vollständige Kugelbahn. Getestete Szenarien: Versenken in Eck- und Mitteltaschen (A, F, G, H), Bandenabpraller (B), Rollen entlang der Bande ohne hineinzufallen (C, D) und Trajektorie am Loch vorbei (E).

2. Dateien und Architektur

Datei / VerzeichnisRolle
index.phpRegistrierung, Login, Lobby mit Tischliste, Guthaben und Spielerang
(plik1).phpSpielseite: Canvas, Rendering, Client-Physik, Zielen, UI-Panels
(plik2).phpSpiel-API: Tischzustand, hinsetzen, Schüsse, Ergebnisvalidierung, Pools, Zeitlimits
(plik3).phpLobby-API: Tischliste mit Parametern, Guthaben des angemeldeten Spielers
admin.phpAdmin-Panel: Tische (Parameter), Spieler, Ränge, Tischvorschau
(plik4).phpGemeinsame Sicherheitsschicht: Domänenlizenz, Sitzung, CSRF, Rate-Limit, Header
stolyTischkonfiguration (Einsatz, Mindestguthaben, Farbe, Kugeldurchmesser Ø, Zeit, Maße)
pamiecAktiver Tisch-Spielzustand (Kugeln, Plätze, Zug, Phase, Pool)
bazySpielerkonto: Benutzerdaten (Login + Passwort-Hash), Kontostand (Guthaben), Rang (VIP)
hashAdministrator-Passwort-Hash (bcrypt)
logowanie/_ratelimit/Versuchszähler (Login-/Registrierungs-Throttling, pro IP)
<login>.pngSpieleravatar (optional, im Stammverzeichnis)
bilard2.png / bilard3.pngDokumentationsbilder (Physiktests / Spiel-Screenshot)
index.php Login + Lobby Spiel Canvas + Physik API Validierung + Autorität stoly stol konta admin.php Verwaltung
Abb. 3 — Ablauf: PHP-Seiten → API → Dateispeicher (JSON/TXT) → Admin-Panel.

3. 8-Ball-Spielregeln

Fouls (Folge: Gegner bekommt die Weiße in die Hand)

Spielende

4. Tischgeometrie und Taschen

Physik-Koordinaten befinden sich immer im logischen System 1000×620 px (Tuch von (53,53) bis (947,547)); Bildschirmskalierung ändert die Physik nicht. Jede der 6 Taschen ist ein Führungskorridor mit trichterförmigen Backen — kein Punkt. Eine Kugel im Korridor rollt über eine Rinne in das dunkle Loch (Radius ~25 px) und verschwindet erst dort; Kanalwände prallen sie zur Mitte hin ab (keine „unsichtbaren Banden").

x=260 Anspiellinie x=700 Dreieck 0 1 2 3 4 5 Diagonale Taschenpaare für die Schwarze: 0↔4, 1↔3, 2↔5
Abb. 4 — Tischgeometrie: Tuch, 6 nummerierte Taschen und Diagonaltaschenregel für die Schwarze.
ElementWertHinweise
Tuch (FELT)(53,53)–(947,547)Bereich der zulässigen Kugelpositionen
Lochmitten (PHOLES)(35,35) (965,35) (500,28) (35,565) (965,565) (500,572)Punkt, an dem die Kugel tatsächlich hineinfällt
TaschenkorridorBreite ~15–16 px + Backentrichter + Rand +8 pxAchse entlang PAXIS; Ecken haben eine „Schürze" bis t=34
Taschendiagonalen0↔4, 1↔3, 2↔5erforderliche Tasche für die Schwarze
Sperre für Weiße-PlatzierungPCAP + Radius ≈ cueR+15Darf nicht im Taschenbereich / auf einer anderen Kugel platziert werden

5. Physik-Engine (Client, deterministisch)

KonstanteWertBedeutung
SIM_DT1/240 sfester Simulationsschritt — Determinismus auf beiden Clients
FRICTION0.997 / SchrittRollreibung
RAIL_REST0.8Banden-Elastizitätskoeffizient
STOP_V8 px/s (skaliert mit Ø)Kugel-Stoppschwelle
MAX_SPEED1600 px/s (skaliert mit Ø)Schusskraft = 1.0

6. Steuerung und Treffpunkt

AktionPCSmartphone (Touch)
ZielenMaus legt Richtung fest; Ziellinie + Geisterkugel + RückprallbahnZiehen legt Richtung und Kraft in einer Geste fest („Zwille")
SchusskraftHalten und entlang des Queues nach hinten ziehen (nach vorne nimmt sie ab); loslassen = Schusswie beim Zielen
Treffpunktgroße weiße Kugel im Panel: oben = hinter der Kugel herziehen (Follow), unten = zurückziehen (Draw), Seiten = Bogen und Effet an der Bande
Weiße in der HandKlick platziert sofortGeist ziehen und Finger loslassen platziert

Servalidierung der Position der Weißen (place_cue): innerhalb des Tuchs, nicht zu nah an der Tasche, überlappt keine andere Kugel.

7. Multiplayer — Zustandsautomat und Zeit

waiting warten auf Spieler playing Phasen: aim ↔ moving finished Pool ausgezahlt start_game (2 Spieler) Schwarze / W.O. Revanche / beide Spieler verlassen → Reset
Abb. 5 — Tisch-Zustandsautomat.
LimitKonstante / KonfigurationFolge
Zugzeitturn_time pro Tisch (5–300 s, Std. 30)Foul: Zug + Weiße in der Hand des Gegners
Rückkehr an den TischSEAT_TIMEOUT = 30 sPlatz 30 s lang gehalten; danach freigegeben, im Spiel = W.O. (Aufgabe)
SchussergebnisSHOT_TIMEOUT = 150 sSchuss läuft ab → Zeitfoul
HeartbeatPollt get_status alle ~1,2 saktualisiert last_activity des Spielers

Die Zugzeit wird erst nach dem Stillstand aller Kugeln gezählt (Phase aim) — die Zeitachse erscheint nach der Simulation. Alle Zustandsoperationen erfolgen atomar unter flock (withState) — keine Schreibkonflikte.

8. API — vollständige Aktionsübersicht

bilard_api.php?table=<id>&action=<aktion> (erfordert Sitzung; POST-Aktionen erfordern CSRF-Token)

AktionMethodeEffekt
get_statusGETVollständiger Zustand: Kugeln, Plätze (+Rang/Guthaben/Inaktivität), Zug, Phase, Pool, time_left/time_limit, pending_shot, potted_order, moves/round, Konfiguration (Tuch, Kugel-r, Queue-r, Tisch-w/h), Guthaben und Rang des Aufrufers
test_sessionGETDiagnose: user, userId, balance
sitPOSTPlatz einnehmen (prüft Mindestguthaben, Tischsperre, freien Platz)
leave_tablePOSTPlatz freigeben; während des Spiels = Aufgabe (W.O.)
start_gamePOSTStarten, wenn beide sitzen; zieht Startgeld ein, Pool = 2× Einsatz, lost Anstoßer aus
place_cuePOSTWeiße in der Hand platzieren; Positionsvalidierung (Tuch, Taschen, Kollisionen)
shootPOSTSchussregistrierung (Winkel, Kraft, Spin) → pending_shot, Phase moving
shot_resultPOSTSimulationsergebnis (Kugeln + Ereignisse) → Validierung → neuer Zustand; wird von jedem sitzenden Spieler gemeldet (deterministisches Ergebnis)

Anti-Cheat — serverseitige Validierung von shot_result

api.php?action=… (erfordert Sitzung)

AktionEffekt
get_tablesTischliste: Plätze, Status, Blind, Mindestguthaben, Farbe, Kugeldurchmesser Ø, Zeit, Maße, angehalten
get_balance&user=<md5>Guthaben — ausschließlich das eigene (oder Admin); Validierung des userId-Formats

admin.php?api=… (erfordert Admin-Sitzung; POST mit CSRF-Token)

AktionEffekt
stateDashboard: Tischparameter, Spieler an Tischen, Pool, Statistiken (registriert / online)
playersSpielerliste: Login, Guthaben, aktueller Tisch, Rang
set_rankSpielerrang ändern (normal/silver/gold/vip)
createNeuer Tisch mit Parametern
deleteTisch löschen; bei laufendem Spiel Rückgabe des Pools an die sitzenden Spieler (jeweils zur Hälfte)
toggle_stopTisch anhalten/fortsetzen; nach Fortsetzung frische Zugzeit

9. Wirtschaft: Startgeld, Pool, Guthaben

10. Ränge und VIP-Rechner

RangWird vergebenPrivileg
normalautomatisch bei der Registrierung—
silver / goldAdmin (Spielerliste)Abzeichen am Login
VIPAdmindynamische %-Trefferchance beim Zielen
VIP-Rechner (Client, nur Vorschau): Berechnet für die Anspielkugel die Bahn der getroffenen Kugel — direkt, nach Bandenabpraller und in Kombination (Kugel wird von der getroffenen angestoßen). Der Prozentsatz ergibt sich aus dem physischen Schnittpunkt der Bahn mit dem Taschenhals, dem Einfallswinkel und Hindernissen auf dem Weg. Berechnet werden nur legale Kugeln (Gruppe / beliebige, wenn keine Gruppen zugewiesen sind). Grün ≥ 50%, rot darunter; waagerechter Text auch im Hochformat.

11. Admin-Panel (admin.php)

Tische

ParameterBereichHinweise
Startgeld (Blind)≥ 1 WährungPool = 2× Einsatz
Mindestguthaben≥ StartgeldSperre für Hinsetzen unterhalb des Schwellenwerts
TuchfarbeHEXTuch, Rinnen und Schatten werden aus dieser Farbe berechnet
Kugeldurchmesser18–44 pxPhysik skaliert proportional
Zugzeit5–300 s„X s/Zug"
Tischgröße320–1600 × 280–1400 pxnur der Tisch — Kugeln rund, UI feste Größe (Letterbox)

Spieloberfläche

Hochformat (Smartphone): Wenn der Bildschirm auf einem mobilen Gerät höher als breit ist, wird der Tisch um −90° gedreht und an den Bildschirm angepasst. Schatten/Reflexionen kompensieren die Drehung (das Licht bleibt bildschirmorientiert), Beschriftungen und VIP-% sind gegenkonvertiert. Auf dem PC immer waagerecht.

12. Sicherheitsschicht

(plik6).php gemeinsames Modul, das von jeder öffentlichen PHP-Datei eingebunden wird:

13. Technische Hinweise