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

Jeu multijoueur 8-ball à deux joueurs sur Internet[cite: 4]. Backend : json et sql. Frontend : JavaScript ES5 + Canvas 2D[cite: 4]. Le serveur est l'autorité d'état (anti-cheat)[cite: 4].


Table des matières
  1. Captures d'écran
  2. Fichiers et architecture
  3. Règles du jeu 8-ball
  4. Géométrie de la table et poches
  5. Moteur physique
  6. Contrôles et point d'impact
  7. Multijoueur — machine à états et temps
  8. API — liste complète des actions
  9. Économie : mise, cagnotte, solde
  10. Rangs et calculateur VIP
  11. Panneau d'administration
  12. Couche de sécurité
  13. Notes techniques

1. Captures d'écran

Écran de jeu — table de 8-ball, barre des joueurs, panneau du point d'impact
Fig. 1 — Écran de jeu. De gauche à droite : barre des joueurs au-dessus de la table (avatar + identifiant + cagnotte), table avec le triangle de billes disposé et la blanche sur la ligne de placement, panneau droit : POINT D'IMPACT (grande boule blanche pour régler l'effet), BILLES EMPOCHÉES (ordre) et MANCHE. Sous la table, le message d'état « En attente de joueurs » et le bouton « S'asseoir à la table ».
Résultats des tests du moteur physique — trajectoires et détection des billes empochées
Fig. 2 — Tests du moteur de tir (A–H). Pour chaque tir, le moteur rapporte : réussite/échec dans la poche, position finale et vitesse finale ainsi que la trajectoire complète de la bille. Scénarios testés : empochage dans une poche d'angle et centrale (A, F, G, H), rebond sur la bande (B), roulement le long de la bande sans tomber (C, D) et trajectoire manquant la poche (E).

2. Fichiers et architecture

Fichier / répertoireRôle
index.phpInscription, connexion, lobby avec liste des tables, solde et rang du joueur
(plik1).phpPage de jeu : canvas, rendu, physique client, visée, panneaux UI
(plik2).phpAPI de jeu : état de la table, assise, tirs, validation du résultat, cagnottes, limites de temps
(plik3).phpAPI du lobby : liste des tables avec paramètres, solde du joueur connecté
admin.phpPanneau admin : tables (paramètres), joueurs, rangs, aperçu de la table
(plik4).phpCouche de sécurité partagée : licence de domaine, session, CSRF, rate-limit, en-têtes
stolyConfiguration des tables (mise, solde min., couleur, Ø des billes, temps, dimensions)
pamiecÉtat actif du jeu sur la table (billes, sièges, tour, phase, cagnotte)
bazyCompte joueur : données utilisateur (identifiant + hachage du mot de passe), état du compte (solde), rang (vip)
hashHachage du mot de passe administrateur (bcrypt)
logowanie/_ratelimit/Compteurs de tentatives (limitation de connexion/inscription, par IP)
<login>.pngAvatar du joueur (optionnel, dans le répertoire racine)
bilard2.png / bilard3.pngImages de documentation (tests de physique / capture d'écran du jeu)
index.php connexion + lobby jeu canvas + physique api validation + autorité stoly stol konta admin.php gestion
Fig. 3 — Flux : pages PHP → API → stockage de fichiers (JSON/TXT) → panneau d'administration.

3. Règles du jeu 8-ball

Fautes (conséquence : l'adversaire prend la blanche en main)

Fin de partie

4. Géométrie de la table et poches

Les coordonnées physiques sont toujours dans le système logique 1000×620 px (tapis de (53,53) à (947,547)) ; le redimensionnement de l'écran ne modifie pas la physique. Chacune des 6 poches est un couloir-guide avec des mâchoires en forme d'entonnoir — pas un point. Une bille dans le couloir roule sur une goulotte vers le trou noir (rayon ~25 px) et n'y disparaît qu'à ce moment-là ; les parois du canal la renvoient vers le centre (pas de « bandes invisibles »).

x=260 ligne de casse x=700 triangle 0 1 2 3 4 5 paires de poches diagonales pour la noire : 0↔4, 1↔3, 2↔5
Fig. 4 — Géométrie de la table : tapis, 6 poches numérotées et règle de la poche diagonale pour la noire.
ÉlémentValeurRemarques
Tapis (FELT)(53,53)–(947,547)zone des positions de billes légales
Centres des trous (PHOLES)(35,35) (965,35) (500,28) (35,565) (965,565) (500,572)point où la bille tombe réellement
Couloir de pochelargeur ~15–16 px + entonnoir des mâchoires + marge +8 pxaxe le long de PAXIS ; les coins ont un « tablier » jusqu'à t=34
Diagonales de poches0↔4, 1↔3, 2↔5poche requise pour la noire
Verrouillage du placement de la blanchePCAP + rayon ≈ cueR+15interdiction de placer dans la zone de la poche / sur une autre bille

5. Moteur physique (client, déterministe)

ConstanteValeurSignification
SIM_DT1/240 spas de simulation fixe — déterminisme sur les deux clients
FRICTION0.997 / pasfrottement de roulement
RAIL_REST0.8coefficient de restitution de la bande
STOP_V8 px/s (mis à l'échelle avec Ø)seuil d'arrêt de la bille
MAX_SPEED1600 px/s (mis à l'échelle avec Ø)force du tir = 1.0

6. Contrôles et point d'impact

ActionPCTéléphone (tactile)
Viséela souris définit la direction ; ligne de visée + bille fantôme + trajectoire de rebondle glissement définit la direction et la force en un seul geste (« fronde »)
Force du tirmaintenir et tirer le long de la queue vers l'arrière (vers l'avant, elle diminue) ; relâcher = tircomme pour la visée
Point d'impactgrande boule blanche dans le panneau : haut = tirer derrière la bille (follow), bas = ramener (draw), côtés = arc et effet sur la bande
Blanche en mainun clic place immédiatementglisser le fantôme et relâcher le doigt place

Validation par le serveur de la position de la blanche (place_cue) : dans le tapis, pas trop près de la poche, ne chevauche pas une autre bille.

7. Multijoueur — machine à états et temps

waiting en attente de joueurs playing phases : aim ↔ moving finished cagnotte payée start_game (2 joueurs) noire / forfait revanche / départ des deux joueurs → réinitialisation
Fig. 5 — Machine à états de la table.
LimiteConstante / configurationConséquence
Temps par coupturn_time par table (5–300 s, déf. 30)faute : tour + blanche en main pour l'adversaire
Retour à la tableSEAT_TIMEOUT = 30 ssiège réservé 30 s ; puis libéré, en jeu = forfait
Résultat du tirSHOT_TIMEOUT = 150 sle tir expire → faute de temps
Heartbeatinterrogation get_status toutes les ~1,2 srafraîchit le paramètre last_activity du joueur

Le temps par coup est compté uniquement après l'arrêt de toutes les billes (phase aim) — la barre de temps apparaît après la simulation. Toutes les opérations d'état sont atomiques sous flock (withState) — pas de conflits d'écriture.

8. API — liste complète des actions

bilard_api.php?table=<id>&action=<action> (nécessite une session ; les actions POST nécessitent un jeton CSRF)

ActionMéthodeEffet
get_statusGETÉtat complet : billes, sièges (+rang/solde/inactivité), tour, phase, cagnotte, time_left/time_limit, pending_shot, potted_order, moves/round, configuration (tapis, ball_r, cue_r, table_w/h), solde et rang de l'appelant
test_sessionGETDiagnostic : user, userId, balance
sitPOSTPrise de siège (vérifie le solde min., le verrouillage de la table, la place libre)
leave_tablePOSTLibération du siège ; en cours de partie = abandon (forfait)
start_gamePOSTDémarrage lorsque les deux sont assis ; prélève la mise, cagnotte = 2× la mise, tire au sort le joueur qui casse
place_cuePOSTPlacement de la blanche en main ; validation de la position (tapis, poches, collisions)
shootPOSTEnregistrement du tir (angle, force, spin) → pending_shot, phase moving
shot_resultPOSTRésultat de la simulation (billes + événements) → validation → nouvel état ; signalé par l'un ou l'autre des joueurs assis (résultat déterministe)

Anti-cheat — validation côté serveur de shot_result

api.php?action=… (nécessite une session)

ActionEffet
get_tablesListe des tables : sièges, statut, blind, min_balance, couleur, Ø des billes, temps, dimensions, arrêté
get_balance&user=<md5>Solde — uniquement le sien (ou celui de l'admin) ; validation du format userId

admin.php?api=… (nécessite une session admin ; POST avec jeton CSRF)

ActionEffet
stateTableau de bord : paramètres des tables, joueurs aux tables, cagnotte, statistiques (enregistrés / en ligne)
playersListe des joueurs : identifiant, solde, table actuelle, rang
set_rankModification du rang du joueur (normal/silver/gold/vip)
createNouvelle table avec paramètres
deleteSuppression de la table ; en cours de partie, remboursement de la cagnotte aux joueurs assis (moitié-moitié)
toggle_stopArrêt/reprise de la table ; à la reprise, temps de coup réinitialisé

9. Économie : mise, cagnotte, solde

10. Rangs et calculateur VIP

RangAttribuéPrivilège
normalautomatiquement lors de l'inscription—
silver / goldadmin (liste des joueurs)badge à côté de l'identifiant
VIPadmin% dynamique de chance d'empochage lors de la visée
Calculateur VIP (client, aperçu uniquement) : calcule pour la bille visée la trajectoire de la bille touchée — directement, après rebond sur la bande et en combinaison (bille propulsée par la bille touchée). Le pourcentage provient de l'intersection physique de la trajectoire avec la gorge du canal de poche, de l'angle d'entrée et des obstacles sur le parcours. Sont calculées uniquement les billes légales (groupe / n'importe lesquelles si les groupes ne sont pas attribués). Vert ≥ 50%, rouge en dessous ; texte horizontal également en mode portrait.

11. Panneau d'administration (admin.php)

Tables

ParamètrePlageRemarques
Mise (blind)≥ 1 monnaiecagnotte = 2× la mise
Solde min.≥ miseverrouillage de l'assise sous le seuil
Couleur du tapisHEXle tapis, les goulottes et les ombres sont calculés à partir de cette couleur
Diamètre des billes18–44 pxla physique s'adapte proportionnellement
Temps par coup5–300 s« X s/coup »
Taille de la table320–1600 × 280–1400 pxtable uniquement — billes rondes, UI taille fixe (letterbox)

Interface de jeu

Mode portrait (téléphone) : lorsque l'écran est plus haut que large sur un appareil mobile, la table s'affiche pivotée de −90°, adaptée à l'écran. Les ombres/reflets compensent la rotation (la lumière reste orientée vers l'écran), les textes et le % VIP sont contre-pivotés. Toujours horizontal sur PC.

12. Couche de sécurité

(plik6).php module partagé inclus par chaque fichier PHP public :

13. Notes techniques