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

Juego multijugador de 8-ball para dos jugadores en internet[cite: 5]. Backend: json y sql[cite: 5]. Frontend: JavaScript ES5 + Canvas 2D[cite: 5]. El servidor es la autoridad de estado (anti-cheat)[cite: 5].


Índice
  1. Capturas de pantalla
  2. Archivos y arquitectura
  3. Reglas del juego 8-ball
  4. Geometría de la mesa y troneras
  5. Motor de física
  6. Controles y punto de golpeo
  7. Multijugador — máquina de estados y tiempo
  8. API — lista completa de acciones
  9. Economía: tarifa de inscripción, bote, saldo
  10. Rangos y calculadora VIP
  11. Panel de administración
  12. Capa de seguridad
  13. Notas técnicas

1. Capturas de pantalla

Pantalla de juego — mesa de 8-ball, barra de jugadores, panel de punto de golpeo
Fig. 1 — Pantalla de juego. Desde la izquierda: barra de jugadores sobre la mesa (avatar + usuario + bote), mesa con el triángulo de bolas colocado y la blanca en la línea de saque, panel derecho: PUNTO DE GOLPEO (bola blanca grande para ajustar el efecto), BOLAS EMBOCADAS (orden) y RONDA. Debajo de la mesa, el mensaje de estado "Esperando jugadores" y el botón "Sentarse a la mesa".
Resultados de las pruebas del motor de física — trayectorias y detección de bolas embocadas
Fig. 2 — Pruebas del motor de tiros (A–H). Para cada tiro, el motor informa: acierto/fallo en tronera, posición final y velocidad final, así como la trayectoria completa de la bola. Escenarios probados: embocar en tronera esquinera y central (A, F, G, H), rebote en banda (B), rodar a lo largo de la banda sin caer (C, D) y trayectoria pasando junto a la tronera (E).

2. Archivos y arquitectura

Archivo / directorioRol
index.phpRegistro, inicio de sesión, vestíbulo (lobby) con lista de mesas, saldo y rango del jugador
(plik1).phpPágina de juego: canvas, renderizado, física del cliente, apuntado, paneles de interfaz (UI)
(plik2).phpAPI de juego: estado de la mesa, sentarse, tiros, validación de resultados, botes, límites de tiempo
(plik3).phpAPI del vestíbulo: lista de mesas con parámetros, saldo del jugador conectado
admin.phpPanel de administración: mesas (parámetros), jugadores, rangos, vista previa de la mesa
(plik4).phpCapa de seguridad compartida: licencia de dominio, sesión, CSRF, limitación de tasa (rate-limit), cabeceras
stolyConfiguración de mesas (apuesta, saldo mín., color, Ø de bolas, tiempo, dimensiones)
pamiecEstado activo de la partida en la mesa (bolas, asientos, turno, fase, bote)
bazyCuenta de jugador: datos de usuario (usuario + hash de contraseña), estado de cuenta (saldo), rango (vip)
hashHash de la contraseña del administrador (bcrypt)
logowanie/_ratelimit/Contadores de intentos (limitación de inicio de sesión/registro, por IP)
<login>.pngAvatar del jugador (opcional, en el directorio raíz)
bilard2.png / bilard3.pngImágenes de documentación (pruebas de física / captura de pantalla del juego)
index.php inicio de sesión + lobby juego canvas + física api validación + autoridad stoly stol konta admin.php gestión
Fig. 3 — Flujo: páginas PHP → API → almacenamiento de archivos (JSON/TXT) → panel de administración.

3. Reglas del juego 8-ball

Faltas (consecuencia: el oponente toma la bola blanca en la mano)

Fin del juego

4. Geometría de la mesa y troneras

Las coordenadas de física están siempre en el sistema lógico de 1000×620 px (paño de (53,53) a (947,547)); el escalado de pantalla no altera la física. Cada una de las 6 troneras es un corredor-guía con mandíbulas en forma de embudo — no un punto. Una bola en el corredor rueda por un canal hasta el agujero oscuro (radio ~25 px) y solo allí desaparece; las paredes del canal la rebotan hacia el centro (sin "bandas invisibles").

x=260 línea de saque x=700 triángulo 0 1 2 3 4 5 pares de troneras diagonales para la negra: 0↔4, 1↔3, 2↔5
Fig. 4 — Geometría de la mesa: paño, 6 troneras numeradas y regla de la tronera diagonal para la negra.
ElementoValorNotas
Paño (FELT)(53,53)–(947,547)área de posiciones legales de las bolas
Centros de agujeros (PHOLES)(35,35) (965,35) (500,28) (35,565) (965,565) (500,572)punto donde la bola cae realmente
Corredor de troneraanchura ~15–16 px + embudo de mandíbulas + margen +8 pxeje a lo largo de PAXIS; las esquinas tienen un "faldón" hasta t=34
Diagonales de troneras0↔4, 1↔3, 2↔5tronera requerida para la bola negra
Bloqueo de colocación de la blancaPCAP + radio ≈ cueR+15prohibido colocar en la zona de la tronera / sobre otra bola

5. Motor de física (cliente, determinista)

ConstanteValorSignificado
SIM_DT1/240 spaso de simulación fijo — determinismo en ambos clientes
FRICTION0.997 / pasofricción de rodadura
RAIL_REST0.8coeficiente de restitución de la banda
STOP_V8 px/s (escalado con Ø)umbral de parada de la bola
MAX_SPEED1600 px/s (escalado con Ø)fuerza del tiro = 1.0

6. Controles y punto de golpeo

AcciónPCTeléfono (táctil)
Apuntarel ratón establece la dirección; línea de objetivo + bola fantasma + trayectoria de rebotearrastrar establece la dirección y la fuerza en un solo gesto ("tirachinas")
Fuerza del tiromantener y tirar a lo largo del taco hacia atrás (hacia adelante disminuye); soltar = tiroigual que al apuntar
Punto de golpeobola blanca grande en el panel: arriba = seguir a la bola (follow), abajo = retroceder (draw), lados = arco y efecto en la banda
Blanca en la manoun clic coloca inmediatamentearrastrar el fantasma y soltar el dedo coloca

Validación por el servidor de la posición de la blanca (place_cue): dentro del paño, no muy cerca de la tronera, no se superpone a otra bola.

7. Multijugador — máquina de estados y tiempo

waiting esperando jugadores playing fases: aim ↔ moving finished bote pagado start_game (2 jugadores) negra / walkover revancha / salida de ambos jugadores → reinicio
Fig. 5 — Máquina de estados de la mesa.
LímiteConstante / configuraciónConsecuencia
Tiempo por movimientoturn_time por mesa (5–300 s, pred. 30)falta: turno + blanca en la mano del oponente
Regreso a la mesaSEAT_TIMEOUT = 30 sasiento reservado 30 s; luego liberado, en juego = walkover
Resultado del tiroSHOT_TIMEOUT = 150 sel tiro expira → falta de tiempo
Heartbeatsondeo (polling) de get_status cada ~1.2 sactualiza la actividad reciente del jugador (last_activity)

El tiempo por movimiento se cuenta solo después de que todas las bolas se hayan detenido (fase aim) — la barra de tiempo aparece después de la simulación. Todas las operaciones de estado son atómicas bajo flock (withState) — sin condiciones de carrera en escritura.

8. API — lista completa de acciones

bilard_api.php?table=<id>&action=<acción> (requiere sesión; las acciones POST requieren token CSRF)

AcciónMétodoEfecto
get_statusGETEstado completo: bolas, asientos (+rango/saldo/inactivo), turno, fase, bote, time_left/time_limit, pending_shot, potted_order, moves/round, configuración (felt, ball_r, cue_r, table_w/h), saldo y rango del invocador
test_sessionGETDiagnóstico: user, userId, balance
sitPOSTOcupar asiento (verifica saldo mín., bloqueo de mesa, asiento libre)
leave_tablePOSTLiberar asiento; durante el juego = rendición (walkover)
start_gamePOSTIniciar cuando ambos están sentados; cobra la tarifa de entrada, bote = 2× apuesta, sortea quién rompe
place_cuePOSTColocación de la blanca en la mano; validación de posición (paño, troneras, colisiones)
shootPOSTRegistro del tiro (ángulo, fuerza, efecto) → pending_shot, fase moving
shot_resultPOSTResultado de la simulación (bolas + eventos) → validación → nuevo estado; reportado por cualquier jugador sentado (resultado determinista)

Anti-cheat — validación de shot_result en el lado del servidor

api.php?action=… (requiere sesión)

AcciónEfecto
get_tablesLista de mesas: asientos, estado, blind, min_balance, color, Ø de bolas, tiempo, dimensiones, stopped
get_balance&user=<md5>Saldo — exclusivamente el propio (o del admin); validación del formato de userId

admin.php?api=… (requiere sesión de administrador; POST con token CSRF)

AcciónEfecto
statePanel de control: parámetros de las mesas, jugadores en las mesas, bote, estadísticas (registrados / en línea)
playersLista de jugadores: usuario, saldo, mesa actual, rango
set_rankCambio de rango del jugador (normal/silver/gold/vip)
createNueva mesa con parámetros
deleteEliminación de la mesa; si hay un juego en curso, reembolso del bote a los jugadores sentados (la mitad a cada uno)
toggle_stopDetener/reanudar la mesa; tras la reanudación, cronómetro de movimiento fresco

9. Economía: tarifa de inscripción, bote, saldo

10. Rangos y calculadora VIP

RangoAsignadoPrivilegio
normalautomáticamente al registrarse—
silver / goldadministrador (lista de jugadores)insignia junto al usuario
VIPadministrador% dinámico de probabilidad de embocar al apuntar
Calculadora VIP (cliente, solo vista previa): calcula para la bola objetivo la trayectoria de la bola golpeada — directamente, tras rebotar en la banda y en combinación (bola empujada por la golpeada). El porcentaje resulta de la intersección física de la trayectoria con la garganta del canal de la tronera, el ángulo de entrada y los obstáculos en la ruta. Se calculan solo las bolas legales (grupo / cualquiera cuando los grupos no están asignados). Verde ≥ 50%, rojo por debajo; texto horizontal también en modo vertical.

11. Panel de administración (admin.php)

Mesas

ParámetroRangoNotas
Tarifa de entrada (blind)≥ 1 monedabote = 2× apuesta
Saldo mín.≥ tarifa de entradabloqueo de sentarse por debajo del umbral
Color del pañoHEXpaño, canaletas y sombras calculados a partir de este color
Diámetro de bolas18–44 pxla física se escala proporcionalmente
Tiempo por movimiento5–300 s"X s/movimiento"
Tamaño de mesa320–1600 × 280–1400 pxsolo mesa — bolas redondas, interfaz de tamaño fijo (letterbox)

Interfaz de juego

Modo vertical (teléfono): cuando la pantalla es más alta que ancha en un dispositivo móvil, la mesa se renderiza rotada −90°, adaptada a la pantalla. Las sombras/reflejos compensan la rotación (la luz permanece orientada a la pantalla), los textos y el % VIP están contrarrotados. En PC siempre en horizontal.

12. Capa de seguridad

(plik6).php módulo compartido incluido por cada archivo PHP público:

13. Notas técnicas