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

Gioco multiplayer 8-ball a due giocatori su internet[cite: 3]. Backend: json e sql. Frontend: JavaScript ES5 + Canvas 2D[cite: 3]. Il server è l'autorità di stato (anti-cheat)[cite: 3].


Indice
  1. Schermate
  2. File e architettura
  3. Regole del gioco 8-ball
  4. Geometria del tavolo e buche
  5. Motore fisico
  6. Controlli e punto di impatto
  7. Multiplayer — macchina a stati e tempo
  8. API — elenco completo delle azioni
  9. Economia: quota di iscrizione, montepremi, saldo
  10. Ranghi e calcolatore VIP
  11. Pannello di amministrazione
  12. Livello di sicurezza
  13. Note tecniche

1. Schermate

Schermata di gioco — tavolo da 8-ball, barra dei giocatori, pannello del punto di impatto
Fig. 1 — Schermata di gioco. Da sinistra: barra dei giocatori sopra il tavolo (avatar + login + montepremi), tavolo con triangolo di biglie disposto e la bianca sulla linea di tiro, pannello destro: PUNTO DI IMPATTO (grande biglia bianca per impostare l'effetto), BIGLIE INBUCATE (ordine) e ROUND. Sotto il tavolo, il messaggio di stato "In attesa dei giocatori" e il pulsante "Siediti al tavolo".
Risultati dei test del motore fisico — traiettorie e rilevamento delle biglie imbucate
Fig. 2 — Test del motore di tiro (A–H). Per ogni tiro il motore riporta: imbucata/mancata buca, posizione finale e velocità finale, nonché la traiettoria completa della biglia. Scenari testati: imbucata in buca d'angolo e centrale (A, F, G, H), rimbalzo dalla sponda (B), rotolamento lungo la sponda senza cadere (C, D) e traiettoria che manca la buca (E).

2. File e architettura

File / directoryRuolo
index.phpRegistrazione, login, lobby con elenco dei tavoli, saldo e rango del giocatore
(plik1).phpPagina di gioco: canvas, rendering, fisica del client, mira, pannelli UI
(plik2).phpAPI di gioco: stato del tavolo, sedersi, tiri, convalida del risultato, montepremi, limiti di tempo
(plik3).phpAPI della lobby: elenco dei tavoli con parametri, saldo del giocatore connesso
admin.phpPannello admin: tavoli (parametri), giocatori, ranghi, anteprima del tavolo
(plik4).phpLivello di sicurezza condiviso: licenza di dominio, sessione, CSRF, rate-limit, intestazioni
stolyConfigurazione dei tavoli (puntata, saldo min., colore, Ø biglie, tempo, dimensioni)
pamiecStato attivo della partita sul tavolo (biglie, posti, turno, fase, montepremi)
bazyAccount giocatore: dati utente (login + hash password), stato conto (saldo), rango (vip)
hashHash della password dell'amministratore (bcrypt)
logowanie/_ratelimit/Contatori dei tentativi (throttling di login/registrazione, per IP)
<login>.pngAvatar del giocatore (opzionale, nella directory principale)
bilard2.png / bilard3.pngImmagini della documentazione (test di fisica / schermata di gioco)
index.php login + lobby gioco canvas + fisica api validazione + autorità stoly stol konta admin.php gestione
Fig. 3 — Flusso: pagine PHP → API → archivio file (JSON/TXT) → pannello admin.

3. Regole del gioco 8-ball

Falli (conseguenza: l'avversario prende la bianca in mano)

Fine della partita

4. Geometria del tavolo e buche

Le coordinate della fisica sono sempre nel sistema logico 1000×620 px (panno da (53,53) a (947,547)); il ridimensionamento dello schermo non altera la fisica. Ciascuna delle 6 buche è un corridoio-guida con ganasce a imbuto — non un punto. La biglia nel corridoio scorre lungo una canalina fino al buco nero (raggio ~25 px) e solo lì scompare; le pareti del canale la respingono verso il centro (nessuna "sponda invisibile").

x=260 linea di tiro x=700 triangolo 0 1 2 3 4 5 coppie di buche diagonali per la nera: 0↔4, 1↔3, 2↔5
Fig. 4 — Geometria del tavolo: panno, 6 buche numerate e regola della buca diagonale per la nera.
ElementoValoreNote
Panno (FELT)(53,53)–(947,547)area delle posizioni legali delle biglie
Centri dei fori (PHOLES)(35,35) (965,35) (500,28) (35,565) (965,565) (500,572)punto in cui la biglia cade effettivamente
Corridoio della bucalarghezza ~15–16 px + imbuto ganasce + margine +8 pxasse lungo PAXIS; quelle d'angolo hanno un "grembiule" fino a t=34
Diagonali delle buche0↔4, 1↔3, 2↔5buca richiesta per la nera
Blocco posizionamento biancaPCAP + raggio ≈ cueR+15vietato posizionare nell'area della buca / sopra un'altra biglia

5. Motore fisico (client, deterministico)

CostanteValoreSignificato
SIM_DT1/240 spasso di simulazione fisso — determinismo su entrambi i client
FRICTION0.997 / passoattrito di rotolamento
RAIL_REST0.8coefficiente di rimbalzo della sponda
STOP_V8 px/s (scalato con Ø)soglia di arresto della biglia
MAX_SPEED1600 px/s (scalato con Ø)forza del tiro = 1.0

6. Controlli e punto di impatto

AzionePCTelefono (touch)
Mirail mouse imposta la direzione; linea di mira + biglia fantasma + traiettoria di rimbalzoil trascinamento imposta direzione e forza con un solo gesto ("fionda")
Forza del tirotieni premuto e trascina lungo la stecca all'indietro (in avanti diminuisce); rilascia = tirocome per la mira
Punto di impattogrande biglia bianca nel pannello: alto = tira dietro la biglia (follow), basso = richiama (draw), lati = arco ed effetto sulla sponda
Bianca in manoil clic posiziona immediatamentetrascinare il fantasma e rilasciare il dito posiziona

Validazione del server della posizione della bianca (place_cue): all'interno del panno, non troppo vicina alla buca, non si sovrappone a un'altra biglia.

7. Multiplayer — macchina a stati e tempo

waiting in attesa dei giocatori playing fasi: aim ↔ moving finished montepremi pagato start_game (2 giocatori) nera / forfait rivincita / uscita di entrambi → reset
Fig. 5 — Macchina a stati del tavolo.
LimiteCostante / configurazioneConseguenza
Tempo per mossaturn_time per tavolo (5–300 s, def. 30)fallo: turno + bianca in mano all'avversario
Ritorno al tavoloSEAT_TIMEOUT = 30 sposto trattenuto per 30 s; poi liberato, in partita = forfait
Risultato del tiroSHOT_TIMEOUT = 150 sil tiro scade → fallo di tempo
Heartbeatpolling get_status ogni ~1,2 saggiorna last_activity del giocatore

Il tempo per mossa viene calcolato solo dopo l'arresto di tutte le biglie (fase aim) — la barra del tempo appare dopo la simulazione. Tutte le operazioni sullo stato sono atomiche sotto flock (withState) — nessun conflitto di scrittura.

8. API — elenco completo delle azioni

bilard_api.php?table=<id>&action=<azione> (richiede sessione; le azioni POST richiedono token CSRF)

AzioneMetodoEffetto
get_statusGETStato completo: biglie, posti (+rango/saldo/idle), turno, fase, montepremi, time_left/time_limit, pending_shot, potted_order, moves/round, configurazione (feltro, ball_r, cue_r, table_w/h), saldo e rango del chiamante
test_sessionGETDiagnostica: user, userId, balance
sitPOSTOccupazione del posto (verifica saldo min., blocco del tavolo, posto libero)
leave_tablePOSTRilascio del posto; durante la partita = resa (forfait)
start_gamePOSTAvvio quando entrambi sono seduti; preleva la quota, montepremi = 2× puntata, sorteggia chi rompe
place_cuePOSTPosizionamento della bianca in mano; validazione della posizione (panno, buche, collisioni)
shootPOSTRegistrazione del tiro (angolo, forza, spin) → pending_shot, fase moving
shot_resultPOSTRisultato della simulazione (biglie + eventi) → validazione → nuovo stato; segnalato da qualsiasi giocatore seduto (risultato deterministico)

Anti-cheat — validazione di shot_result lato server

api.php?action=… (richiede sessione)

AzioneEffetto
get_tablesElenco dei tavoli: posti, stato, blind, min_balance, colore, Ø biglie, tempo, dimensioni, stopped
get_balance&user=<md5>Saldo — esclusivamente il proprio (o dell'admin); validazione del formato userId

admin.php?api=… (richiede sessione admin; POST con token CSRF)

AzioneEffetto
stateDashboard: parametri dei tavoli, giocatori ai tavoli, montepremi, statistiche (registrati / online)
playersElenco dei giocatori: login, saldo, tavolo attuale, rango
set_rankModifica del rango del giocatore (normal/silver/gold/vip)
createNuovo tavolo con parametri
deleteEliminazione del tavolo; a partita in corso, rimborso del montepremi ai giocatori seduti (metà ciascuno)
toggle_stopArresto/ripresa del tavolo; alla ripresa, tempo di mossa azzerato

9. Economia: quota di iscrizione, montepremi, saldo

10. Ranghi e calcolatore VIP

RangoAssegnatoPrivilegio
normalautomaticamente alla registrazione—
silver / goldadmin (elenco giocatori)distintivo accanto al login
VIPadmin% dinamica di probabilità di imbucata durante la mira
Calcolatore VIP (client, solo anteprima): calcola per la biglia mirata la traiettoria della biglia colpita — direttamente, dopo il rimbalzo dalla sponda e in combinazione (biglia scagliata da quella colpita). La percentuale deriva dall'intersezione fisica della traiettoria con la gola del canale della buca, dall'angolo di entrata e dagli ostacoli sul percorso. Vengono calcolate solo le biglie legali (gruppo / qualsiasi quando i gruppi non sono assegnati). Verde ≥ 50%, rosso al di sotto; scritta orizzontale anche in modalità verticale.

11. Pannello di amministrazione (admin.php)

Tavoli

ParametroIntervalloNote
Quota di iscrizione (blind)≥ 1 valutamontepremi = 2× puntata
Saldo min.≥ quotablocco del sedersi sotto la soglia
Colore pannoHEXpanno, canaline e ombre calcolati da questo colore
Diametro biglie18–44 pxla fisica scala proporzionalmente
Tempo per mossa5–300 s"X s/mossa"
Dimensioni tavolo320–1600 × 280–1400 pxsolo tavolo — biglie rotonde, UI dimensione fissa (letterbox)

Interfaccia di gioco

Modalità verticale (telefono): quando lo schermo è più alto che largo su un dispositivo mobile, il tavolo viene visualizzato ruotato di −90°, adattato allo schermo. Ombre/riflessi compensano la rotazione (la luce rimane orientata allo schermo), le scritte e la % VIP sono controruotate. Su PC sempre orizzontale.

12. Livello di sicurezza

(plik6).php modulo condiviso incluso da ogni file PHP pubblico:

13. Note tecniche