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

Game multiplayer 8-ball two players on internet. Backend: json and sql. Frontend: JavaScript ES5 + Canvas 2D. Serwer jest autorytetem stan server(anti-cheat).

Spis treści
  1. Zrzuty ekranu
  2. Pliki i architektura
  3. Zasady gry 8-ball
  4. Geometria stołu i łuzy
  5. Silnik fizyki
  6. Sterowanie i punkt uderzenia
  7. Multiplayer — maszyna stanów i czas
  8. API — pełne zestawienie akcji
  9. Ekonomia: wpisowe, pula, saldo
  10. Rangi i kalkulator VIP
  11. Panel administratora
  12. Warstwa bezpieczeństwa
  13. Uwagi techniczne

1. Zrzuty ekranu

Ekran gry — stół 8-ball, pasek graczy, panel punktu uderzenia
Rys. 1 — Ekran gry. Od lewej: pasek graczy nad stołem (avatar + login + pula), stół z rozstawionym trójkątem bil i białą na linii rozbicia, prawy panel: PUNKT UDERZENIA (duża biała do ustawiania efektu), WBITE BILE (kolejność) i RUNDA. Pod stołem komunikat stanu „Oczekiwanie na graczy" i przycisk „Usiądź do stołu".
Wyniki testów silnika fizyki — trajektorie i detekcja wbitych bil
Rys. 2 — Testy silnika strzałów (A–H). Dla każdego strzału silnik raportuje: trafienie/nietrafienie do łuzy, pozycję końcową i prędkość końcową oraz pełną trajektorię bili. Testowane scenariusze: wbicie do łuzy narożnej i środkowej (A, F, G, H), odbicie od bandy (B), toczenie wzdłuż bandy bez wpadnięcia (C, D) i trajektoria z mijaniem łuzy (E).

2. Pliki i architektura

Plik / katalogRola
index.phpRejestracja, logowanie, lobby z listą stołów, saldo i ranga gracza
(plik1).phpStrona gry: canvas, renderowanie, fizyka klienta, celowanie, panele UI
(plik2).phpAPI gry: stan stołu, siadanie, strzały, walidacja wyniku, pule, limity czasu
(plik3).phpAPI lobby: lista stołów z parametrami, saldo zalogowanego gracza
admin.phpPanel admina: stoły (parametry), gracze, rangi, podgląd stołu
(plik4).phpWspólna warstwa bezpieczeństwa: licencja domenowa, sesja, CSRF, rate-limit, nagłówki
stolyKonfiguracja stołów (stawka, min. saldo, kolor, Ø bil, czas, wymiary)
pamiecAktywny stan gry stołu (bile, miejsca, tura, faza, pula)
bazyKonto gracza: dane użytkownika (login + hash hasła), stan konta (saldo), ranga (vip)
hashHash hasła administratora (bcrypt)
logowanie/_ratelimit/Liczniki prób (throttling logowania/rejestracji, per IP)
<login>.pngAvatar gracza (opcjonalny, w katalogu głównym)
bilard2.png / bilard3.pngObrazy dokumentacji (testy fizyki / zrzut ekranu gry)
index.php logowanie + lobby gra canvas + fizyka api walidacja + autorytet stoly stol konta admin.php zarządzanie
Rys. 3 — Przepływ: strony PHP → API → magazyn plikowy (JSON/TXT) → panel admina.

3. Zasady gry 8-ball

Faule (skutek: przeciwnik bierze białą do ręki)

Zakończenie gry

4. Geometria stołu i łuzy

Współrzędne fizyki zawsze w układzie logicznym 1000×620 px (sukno od (53,53) do (947,547)); skalowanie ekranu nie zmienia fizyki. Każda z 6 łuz to korytarz-prowadnica z lejkowatymi szczękami — nie punkt. Bila w korytarzu toczy się po rynience do ciemnej dziury (promień ~25 px) i dopiero tam znika; ścianki kanału odbijają ją do środka (brak „niewidzialnych band").

x=260 linia rozbicia x=700 trójkąt 0 1 2 3 4 5 pary przekątnych łuz dla czarnej: 0↔4, 1↔3, 2↔5
Rys. 4 — Geometria stołu: sukno, 6 łuz z numeracją i reguła łuzy na przekątnej dla czarnej.
ElementWartośćUwagi
Sukno (FELT)(53,53)–(947,547)obszar legalnych pozycji bil
Środki dziur (PHOLES)(35,35) (965,35) (500,28) (35,565) (965,565) (500,572)punkt, w którym bila faktycznie wpada
Korytarz łuzyszerokość ~15–16 px + lejek szczęk + margines +8 pxoś wzdłuż PAXIS; narożne mają „fartuch" do t=34
Przekątne łuz0↔4, 1↔3, 2↔5wymagana łuza dla czarnej
Blokada ustawiania białejPCAP + promień ≈ cueR+15nie wolno stawiać w rejonie łuzy / na innej bili

5. Silnik fizyki (klient, deterministyczny)

StałaWartośćZnaczenie
SIM_DT1/240 sstały krok symulacji — determinizm na obu klientach
FRICTION0.997 / kroktarcie tocznia
RAIL_REST0.8współczynnik odbicia od bandy
STOP_V8 px/s (skal. z Ø)próg zatrzymania bili
MAX_SPEED1600 px/s (skal. z Ø)siła strzału = 1.0

6. Sterowanie i punkt uderzenia

AkcjaPCTelefon (dotyk)
Celowaniemyszka ustawia kierunek; linia celu + duch bili + tor odbiciaprzeciągnięcie ustawia kierunek i siłę jednym gestem („proca")
Siła strzałuprzytrzymaj i ciągnij wzdłuż kija do tyłu (w przód maleje); puść = strzałjak przy celowaniu
Punkt uderzeniaduża biała w panelu: góra = ciągnij za bilą, dół = cofnij, boki = łuk i efekt na bandzie
Biała w rękuklik stawia od razuprzeciągnięcie ducha i puszczenie palca stawia

Walidacja serwera pozycji białej (place_cue): w obrębie sukna, nie za blisko łuzy, nie nachodzi na inną bilę.

7. Multiplayer — maszyna stanów i czas

waiting oczekiwanie na graczy playing fazy: aim ↔ moving finished pula wypłacona start_game (2 graczy) czarna / walkower rewanż / wyjście obu graczy → reset
Rys. 5 — Maszyna stanów stołu.
LimitStała / konfiguracjaSkutek
Czas na ruchturn_time per stół (5–300 s, dom. 30)faul: tura + biała w ręku przeciwnika
Powrót na stółSEAT_TIMEOUT = 30 smiejsce trzymane 30 s; potem zwolnione, w grze = walkower
Wynik strzałuSHOT_TIMEOUT = 150 sstrzał wygasa → faul czasowy
Heartbeatpolling get_status co ~1,2 sodświeża last_activity gracza

Czas na ruch liczony dopiero po zatrzymaniu wszystkich bil (faza aim) — pasek czasu pojawia się po symulacji. Wszystkie operacje na stanie atomowe pod flock (withState) — brak wyścigów zapisu.

8. API — pełne zestawienie akcji

bilard_api.php?table=<id>&action=<akcja> (wymaga sesji; akcje POST wymagają tokenu CSRF)

AkcjaMetodaEfekt
get_statusGETPełny stan: bile, miejsca (+ranga/saldo/idle), tura, faza, pula, time_left/time_limit, pending_shot, potted_order, moves/round, konfiguracja (felt, ball_r, cue_r, table_w/h), saldo i ranga wywołującego
test_sessionGETDiagnostyka: user, userId, balance
sitPOSTZajęcie miejsca (sprawdza min. saldo, blokadę stołu, wolne miejsce)
leave_tablePOSTZwolnienie miejsca; w trakcie gry = poddanie (walkower)
start_gamePOSTStart gdy obaj siedzą; pobiera wpisowe, pula = 2× stawka, losuje rozbijającego
place_cuePOSTUstawienie białej w ręku; walidacja pozycji (sukno, łuzy, kolizje)
shootPOSTRejestracja strzału (kąt, siła, spin) → pending_shot, faza moving
shot_resultPOSTWynik symulacji (bile + zdarzenia) → walidacja → nowy stan; zgłasza dowolny z siedzących (wynik deterministyczny)

Anti-cheat — walidacja shot_result po stronie serwera

api.php?action=… (wymaga sesji)

AkcjaEfekt
get_tablesLista stołów: miejsca, status, blind, min_balance, kolor, Ø bil, czas, wymiary, stopped
get_balance&user=<md5>Saldo — wyłącznie własne (lub admina); walidacja formatu userId

admin.php?api=… (wymaga sesji admina; POST z tokenem CSRF)

AkcjaEfekt
statePulpit: parametry stołów, gracze przy stołach, pula, statystyki (zarejestrowani / online)
playersLista graczy: login, saldo, aktualny stół, ranga
set_rankZmiana rangi gracza (normal/silver/gold/vip)
createNowy stół z parametrami
deleteUsunięcie stołu; przy trwającej grze zwrot puli siedzącym (po połowie)
toggle_stopZatrzymanie/wznowienie stołu; po wznowieniu świeży czas na ruch

9. Ekonomia: wpisowe, pula, saldo

10. Rangi i kalkulator VIP

RangaNadawanaPrzywilej
normalautomatycznie przy rejestracji—
silver / goldadmin (lista graczy)odznaka przy loginie
VIPadmindynamiczny % szansy wbicia przy celowaniu
Kalkulator VIP (klient, tylko podgląd): dla bilej celowanej liczy tor trafionej bili — bezpośrednio, po odbiciu od bandy i w kombinacji (bila strącana przez trafioną). Procent wynika z fizycznego przecięcia toru z gardłem kanału łuzy, kąta wejścia i przeszkód na trasie. Liczone tylko bile legalne (grupa / dowolne gdy grupy nieprzydzielone). Zielony ≥ 50%, czerwony poniżej; napis poziomy także w trybie pionowym.

11. Panel administratora (admin.php)

Stoły

ParametrZakresUwagi
Wpisowe (blind)≥ 1 złpula = 2× stawka
Min. saldo≥ wpisoweblokada siadania poniżej progu
Kolor suknaHEXsukno, rynienki i cienie liczone z tego koloru
Średnica bil18–44 pxfizyka skaluje się proporcjonalnie
Czas na ruch5–300 s„X s/ruch"
Rozmiar stołu320–1600 × 280–1400 pxtylko stół — bile okrągłe, UI stały rozmiar (letterbox)

Interfejs gry

Tryb pionowy (telefon): gdy ekran wyższy niż szerszy na urządzeniu mobilnym, stół renderuje się obrócony o −90°, dopasowany do ekranu. Cienie/refleksy kompensują obrót (światło zostaje ekranowe), napisy i % VIP są kontr-obrócone. Na komputerze zawsze poziomo.

12. Warstwa bezpieczeństwa

(plik6).php wspólny moduł dołączany przez każdy publiczny plik PHP:

13. Uwagi techniczne