Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Programar Juegos En Php

Iniciado por tamat, 09 de Enero de 2006, 01:01:21 AM

« anterior - próximo »

tamat

 Ultimamente me ha picado un poco el tema de programar juegos online en PHP pero me está resultando más costoso de lo que pensaba.

Mi principal problema es que parto del esquema clásico que uso en C++ y veo que de poco sirve. Me cuesta aplicar conceptos antiguos a este contexto, cosas como patrones, o las clases mismamente.
Me gustaría encontrar información al respecto, errores más comunes, métodos para sacar el máximo partido al lenguaje,etc. Ojo que no quiero tutoriales de PHP ya que llevo varios años trasteando con el lenguaje y he hecho más de una web en él, pero hacer webs y hacer juegos (aunque esten dentro de una web) tienen poco que ver.

Quiero saber como lidiar con la concurrencia, como trabajar con clases sin que se creen y se destruyan en cada petición, etc.

Si alguien puede recomendarme un link, un libro o algun buen consejo se lo agradeceré.
Por un stratos menos tenso

averbell

 Juas, yo estoy creando un juego de estrategia en php, aunque tendrias que ser mas especifico en lo que quieres exactamente  

tamat

 Pues principalmente el problema de como organizar el "engine", ya que no puedo hacer lo clasico de tener mil paginas desperdigadas por phps e ir llamando de una a otra.
He comenzado a usar clases pero tengo el problema de que se instancian y se destruyen en cada petición, y eso me parece una burrada. Se pueden meter las instancias en la sesión?

Existe alguna manera de crear instancias estáticas que se queden en memoria entre peticiones y que sean comunes a todos los usuarios? (supongo que no pero por pedir...)

Otro problema que tengo es la concurrencia, como en cada petición necesito todos los datos pues hago muchos querys a la DB para sacarlos. He pensado dejar esos datos en la sesión pero entonces tengo el problema de que si otro usuario hace algo que altera los datos de los demás entonces debería actualizar todas las sesiones, como gestiono eso? con algun tipo de pool de eventos?

En fin, ese tipo de cosas.
Por un stratos menos tenso

jazcks

 yo tb estoy en ello, y a mi las dudas me surgen a la hora de hacer un update o insert a la BD en el script o página correspondiente.
Hacerlo no es el problema, si no que a mitad "de carga" de página (cuando php está esperando a la BD) podrían hacer un F5 o actualizar y volver a mandar la peticion al servidor, o cosas así, con lo que se haría el insert/update otra vez , en los selects esto daría igual.

se podría hacer una tabla con acciones pendientes (lo que llamais pool de eventos?) en vez de los inserts a saco, pero meter una acción es un insert tb no?, php controla que un script empiece y acabe enteramente?, supongo que las sentencias a DB si que son "atómicas"...

tamat

 Bueno, para lo que tu comentas basta con que cada acción tenga un identificativo unico (por ejemplo el milisegundo en que se envio el código html al navegador), antes de realizar una acción miras si en la sesión la variable "ultima_accion" tiene el mismo valor, sino lo tiene pues sobreescribes y realizas la acción, pero si es igual pues significará que era un refresh.

Ese sistema se puede complicar más si quieres evitar que el boton Atras pueda traerte el problema, pero vamos, la idea es la misma.
Por un stratos menos tenso

averbell

 para que veais de que va
http://www.xalee.com/worldconquer
user:prova

pass : Contactar con migo si quereis saber como es

bnl

 Para que el usuario haga "cosas que no debe" como ir para atras (ya sea mediante la flecha del navegador, el alt+flecha derecha, etc), ver el codigo fuente, etc se pueden capar tanto determinadas pulsaciones de teclas como el boton derecho del raton. Tambien se puede abrir la pagina en una ventana del navegador sin barra de herramientas ni opciones del menu.  
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

TonyJ

 Por muchas cosas que quieras evitar que haga el usuario, por mucho Javascript que escribas y por mucho que lo intentes, no podrás evitar que el usuario trate (y consiga de algún modo) de hacer esas cosas.

Una buena programación evitará que el ir hacia atrás y cosas parecidas sean sinónimo de hacer trampas, y podrás conseguir controlar cosas puntuales en cuanto al funcionamiento del juego, pero no del navegador.

De nada te sirve evitar que te saquen el código fuente (al fin y al cabo es sólo HTML lo que van a ver), o capar pulsaciones de ratón, o abrir una ventana del navegador sin controles (pulsa F11 en una de esas ventanas a ver qué pasa). Por cada truco que uses para "capar" una acción, habrá otro o más para saltárselo.

Céntrate en lo que al funcionamiento del juego se refiere, no al funcionamiento del navegador. Además... ¿cuántos navegadores hay?
o hicieron porque no sabían que era imposible.

tamat

 Volviendo al tema del thread, nadie sabe nada de donde conseguir información sobre creación de sistemas complejos sobre php? optimizaciones etc.
Por un stratos menos tenso

jazcks

 hace unos dias lei en un libro sobre implentacion de webservices con php y soap:

Citar
en principio, cada vez que se invoque a un servicio web creado con php mediante la clase SoapServer ésta creará un nuevo objeto de la clase indicada con setClass(), lo cual significa que dicho objeto no podría mantener un estado entre llamadas consecutivas a sus métodos. Es algo que podemos modificar mediante el método setPersistence() de SoapServer entregando como argumente una de las dos constantes siguientes:

-SOAP_PERSISTENCE_REQUEST:
se crea un objeto en cada solicitud, no manteniéndose información de estado entre solicitudes.

-SOAP_PERSISTENCE_SESSION:
se crea un objeto con la primera solicitud y se mantiene su estado mediante variables de sesión, de tal forma que el objeto mantendría dicho estado entre llamadas.

Utilizando SOAP_PERSISTENCE_SESSION podríamos, por ejemplo crear un servicio web que abre una conexion con una base de datos cuando se invoca al primero de sus métodos y la mantiene en llamadas posteriores, hasta el momento en que el usuario cierre la sesión.

es decir, si es un webservice y usas soap, la clase que contiene los métodos puede estar persistente.

No he mirado más pero debería existir algo para clases "normales".

averbell

 he visto algun libro en emule y por internet en google tambien hay,ahora mismo no recuerdo.
Por otro lado el tema de que el usuario vaya hacia tras y todo eso, en mi caso todo eso da igual, lo mejor es jugar con las bases de datos, en mi caso por mucho que le den, el servidor es el que manda. Una buena programación o planteamiento de que quieres hacer y que ellos no puedan hacer, es lo que ara que no puedan hacer cosas raras.

tamat

 Hay un PHP Game Programming pero es una basura, te explica qué es el HTML, como se programa en PHP, como se conecta a una base de datos y cuando dices - ahora se mete en lo interesante - va y te sale con "como usar sockets", "como pintar imagenes" y "como crear un flash desde PHP", FIN

Yo busco algo que parta de que ya sabes mucho de PHP pero que nunca has programado nada medianamente grande.
Por un stratos menos tenso

Parzival

 Bueno, lo primero creo que es preguntarte hacia donde quieres enfocar el juego. Lo más típico es que quieras hacer un clon de "Alliance Wars", "Ogame", "Travian", "Vendetta", etc. Lo que hacen estos juegos es tirar sobretodo de base de datos, algunos quizás tengan una aplicación externa en python para actualizar los ticks, pero básicamente lo importante es organizar la base de datos (porque con una buena programación no te hará falta actualizar ticks desde fuera) y no creo que necesites comerte la cabeza pensando en estructuras, variables, clases ni demás.

Y las sesiones para identificar a los usuarios y poca cosa más. En realidad es más curre de ideas, cálculos, tiempo y (me repito, lo sé) formar una base de datos buena, más que de estructura de programación.
Eduardo Veiga

josepzin

 Bienvenido Parzival!

Parece que conoces del tema...

jazcks

 yo creo que no.
ya se supone que tienes bien el diseño y programación de la lógica, y base de datos, pero después hay cosas como evitar que te hagan trampas, y como las que comenta tamat como la gestión de threads, gestión de clases en memoria o permanecia etc.... y es verdad que no se encuentra nada por google, sólo lo típico para empezar (php con mysql, o con flash, o hacer graficos con GD etc...), no hay nada  para grandes cosas, ni tips sobre optimizacion, ni sobre las tipicas trampas... etc

a mi lo único que se me ocurre para evitar que te corten la ejecucion del php a mitad (y las setencias sql), es usar los procedures del mysql5






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.