Foros del Web » Programando para Internet » PHP »

Juego online por web

Estas en el tema de Juego online por web en el foro de PHP en Foros del Web. Hola, imagino que muchos de vosotros habéis oído hablar de los juegos vía web, donde te registras y accedes a un juego de estrategia a ...
  #1 (permalink)  
Antiguo 20/09/2006, 04:04
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Juego online por web

Hola, imagino que muchos de vosotros habéis oído hablar de los juegos vía web, donde te registras y accedes a un juego de estrategia a traves del propio navegador (ej: o-game, travian, etc.). Según he podido leer, estos juegos están hechos en PHP y MySQL, pero hay una cosa que no consigo averiguar, y es como se desarrollan las acciones del usuario aunque no esté conectado. Me explico. Cuando un usuario construye un edificio, ataca a otro jugador, etc, eso conlleva un tiempo en minutos. El juego te avisa y te dice, el edificio se construirá en 12 minutos. Lo curioso es que eso ocurre aunque el usuario no esté conectado. Así que pasados esos minutos la base de datos se actualiza independientemente del usuario. ¿Sabéis como consigue hacerse esto con PHP?, aunque solo sea de forma genérica. Gracias.

Un saludo.
  #2 (permalink)  
Antiguo 20/09/2006, 06:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En esos juegos el "lenguaje del lado del servidor" (sea PHP o el que sea) tan sólo se usa para "informar" a un servidor central (tu Base de datos) de como quedó el movimiento o acción que se tomó en el "cliente".

La parte "visual" de todo el juego no se desarrollo en PHP sino en algún lenguaje del lado del cliente: javascript (DHTML), Flash .. etc.

Como mucho podrían usar técnicas como "Ajax" (tenemos un foro para tal fin) para "enviar" los datos que en el cliente se van originando (esos movimientos) al servidor y así poder interactuar con todos los usuarios conectados.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 21/09/2006, 01:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Gracias Cluster por responder, aun no he mirado la parte de "Ajax" que me comentas, pero me gustaría saber si se puede hacer ejecutando un script PHP en el servidor con un timer a partir del momento en que el usuario le da al botón de construir, por ejemplo. Es decir, código en PHP que se ejecute cuando interactue el usuario y que haga lo siguiente "cuando pase x tiempo, actualiza la base de datos haciendo esto otro", ya que si se ejecuta del lado del servidor, no haría falta que el usuario estuviera ya conectado, ¿es así?.

Un saludo.
  #4 (permalink)  
Antiguo 21/09/2006, 02:12
Avatar de sfx4ever  
Fecha de Ingreso: noviembre-2003
Ubicación: aqui
Mensajes: 384
Antigüedad: 20 años, 5 meses
Puntos: 2
Pues yo no creo que se utilice Ajax para eso, mas que nada porque la accion se lleva a cabo aunque tu cierres tu navegador.
Yo tambien tuve exactamente la misma pregunta que tu, Sirmaniak, porque me interesa el tema, y llege a la siguiente conclusion: cuando le das a contruir un edificio, el edificio se contruye en el momento en que le das al boton, con un campo 'hora_inicial', otro 'hora_fina', y otro 'estado'. Al principio estado estaria como 'construyendo' o algo asi.
Si cargas la pagina para ver si ya se ha contruido, el script php compara la hora real del server con la del campo 'hora_final' y si es igual o mayor, pues el estado se pondria como 'terminado'. Cuando cargas la pagina, comprueba el campo 'estado' y si esta terminado pues te lo mostraria en tu lista de edificios.
Supongo que por ahi tienen que ir el tema, aunque tambien me gustaria escuchar (leer) vuestras opiniones.

Lo del script que se ejecute en el servidor, la verdad es que no lo veo muy viable..., cargaria DEMASIADO el sistema, ten en cuenta los jugadores que tiene Ogame....

Por cierto, yo tambien tengo un juego-web funcionando, si alguien quiere verlo que me mande un mensaje privado (no quiero hacer SPAM)

ciaoooooooooooooo
  #5 (permalink)  
Antiguo 21/09/2006, 02:21
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Hola sfx4ever. La verdad es que es muy buena idea, no se me había ocurrido hacerlo así. Aunque queda el tema de los recursos que se generan sin la presencia del usuario, es decir, una construccion que te produce X de mineral cada hora. Esto se hace aunque el usuario no esté conectado. Creo recordar que en PHP a través de un comando, se puede hacer que cada hora por ejemplo se ejecute un script en el servidor, lo que actualizaría este tipo de datos aunque no estuvieran los usuarios delante, ¿crees que se hace de esa forma?.

Por cierto, ¿puedes mandarme tu web por MP?. Gracias.

Última edición por Sirmaniak; 21/09/2006 a las 02:39
  #6 (permalink)  
Antiguo 21/09/2006, 03:39
Avatar de sfx4ever  
Fecha de Ingreso: noviembre-2003
Ubicación: aqui
Mensajes: 384
Antigüedad: 20 años, 5 meses
Puntos: 2
Creo que el tema de los recursos se podria solucionar de forma parecida: Si tenemos un edificio que genera x recursos cada hora, en la tabla de edificios existiria un campo: 'hora_ultima_actividad', ademas de otra 'recursosxhora'.
Una actividad podria ser: usar los recursos, que te los roben, moverlos a otro planeta, etc..
Cuando tu cargas tu pagina que te dice los recursos que tienes en este mismo instante haria un calculo aritmetico de los recursos que tenias en la ultima actividad, la hora actual y los recursos por hora, y darian los recursos actuales de esa contruccion.
Cuando alguien te espia haria exactamente lo mismo, y posiblemente, en una de estas dos situaciones (que te espien o que recarges tu pagina de recursos) se haga un UPDATE en el campo 'hora_ultima_actividad'

Por supuesto todo esto es una suposicion mia, o por lo menos es de la forma en la que yo lo haria, y quizas ellos usen otra tecnica, pero yo estoy seguro de que tiene que ser algo parecido...

Lo siento ;D, pero sigo pensando que no utilizan la ejecucion de un script por cada jugador y con los recursos menos todavia. Tu piensa que los recursos se actualizan cada minuto (¿o cada segundo?... hace como un año que no juego ;D). Si tu actualizas cada minuto la pagina de recursos te sale exactamente los que tienes en ese momento. Piensa un momento lo que supondria un script o CRON que se ejecute cada minuto (por no decir cada segundo!!!!!) y calcule los recursos de los miles y miles de usuarios, es una barbaridad.

Aun asi yo en mi juego en ese aspecto no me he calentado mucho la cabeza, jeje, y con los recursos tengo un cron que lo genera cada hora en punto. Asi es mas facil para mi ;D
  #7 (permalink)  
Antiguo 21/09/2006, 04:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Buenas, creo que no me has entendido bien. Lo que te decía no es que cada minuto se actualice por cada jugador, sino, hacer lo que tu dices con lo de las construcciones pero para el tema de los recursos que lo haga el propio servidor con el comando ese que te digo, que hace que el servidor ejecute un script cada hora (no se si es lo mismo a lo que te refieres tu con lo de Cron, es que aun no estoy muy puesto en PHP), pero ese script sería independiente del jugador, es para que actualice los recursos que tiene todo el mundo. Asi solo haría una actualización cada hora, actualizando la base de datos.
  #8 (permalink)  
Antiguo 21/09/2006, 04:59
Avatar de sfx4ever  
Fecha de Ingreso: noviembre-2003
Ubicación: aqui
Mensajes: 384
Antigüedad: 20 años, 5 meses
Puntos: 2
Si te he entendido, pero sigo pensando que no vale lo del cron o script que se ejecute cada hora. Mas que nada porque a ti los recursos te salen actualizados cada vez que recargas la pagina, no cada hora.
Si fuera cada hora, pues tendrias que esperar a cada hora en punto para ver tus recursos actualizados pero NO ES ASI, en cualquier momento ves el numero de recursos exacto que tienes.

Que yo sepa en php no hay ningun comando ni funcion que se ejecute cada cierto tiempo, pero en linux esta el comando CRON que puede ejecutar una pagina php cada cierto tiempo.

Aun asi, si se ejecuta un script php cada hora para actualizar los recursos de los miles y miles de usuarios, no veas el maquinon que tienen que tener esta gente...
  #9 (permalink)  
Antiguo 21/09/2006, 05:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Ok, creo que te he entendido. Una ultima dudilla, cuando has dicho:

Cita:
Aun asi yo en mi juego en ese aspecto no me he calentado mucho la cabeza, jeje, y con los recursos tengo un cron que lo genera cada hora en punto. Asi es mas facil para mi ;D
te refieres precisamente a lo que digo, ¿no?, es decir que calculas los recursos de la gente cada hora, ¿es eso?

Por cierto, he visto tu web, es muy completa, :), quizas un poco bajo en el apartado gráfico pero se ve que te las has currado mucho. A ver si un dia puedo hacer yo algo parecido.

Un saludo.

Última edición por Sirmaniak; 21/09/2006 a las 05:39
  #10 (permalink)  
Antiguo 21/09/2006, 06:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Pues yo no creo que se utilice Ajax para eso, mas que nada porque la accion se lleva a cabo aunque tu cierres tu navegador.
Ajax sólo se usaría para hacer llegar los datos de tus acciones desde el "cliente" (y en forma transparente sin recarga de página) .. nada más .. no hacer el proceso en el servidor y menos si se refiere a un cálculo de fechas donde ese mismo cálculo lo obtienes cuando pidas tu estado de "avace" de tu "construcción" o lo que la aplicación haga.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 21/09/2006, 06:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Sirmaniak Ver Mensaje
Ok, creo que te he entendido. Una ultima dudilla, cuando has dicho:



te refieres precisamente a lo que digo, ¿no?, es decir que calculas los recursos de la gente cada hora, ¿es eso?

Por cierto, he visto tu web, es muy completa, :), quizas un poco bajo en el apartado gráfico pero se ve que te las has currado mucho. A ver si un dia puedo hacer yo algo parecido.

Un saludo.
Por favor .. opiniones "off-topic" lo pueden hacer entre Uds. en privado (no continuemos el tema por es lado aquí ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 21/09/2006, 06:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Sirmaniak Ver Mensaje
Buenas, creo que no me has entendido bien. Lo que te decía no es que cada minuto se actualice por cada jugador, sino, hacer lo que tu dices con lo de las construcciones pero para el tema de los recursos que lo haga el propio servidor con el comando ese que te digo, que hace que el servidor ejecute un script cada hora (no se si es lo mismo a lo que te refieres tu con lo de Cron, es que aun no estoy muy puesto en PHP), pero ese script sería independiente del jugador, es para que actualice los recursos que tiene todo el mundo. Asi solo haría una actualización cada hora, actualizando la base de datos.
En definitiva este tipo de procesos es simple cálculo de fechas entre la actual (la que el usuario ve) y la que tenga almacenada como inicio del proceso + tu lógica que haga el comportamiento por tiempo.

El "Cron Job" no te serviría si el proceso ha de verse actualizado en cada momento. Así que se trata de que lances esas consultas SQL a tu BBDD y apliques la lógica necesaria para represnetar tus estados en el momento que se pidan.

Tienes que definir bien el "flujo" de tus procesos antes de nada .. definir esos tiempos para realizar un proceso (construcción . .etc) y como interactuaran con el resto de elementos ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 21/09/2006, 08:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 7
Antigüedad: 19 años, 1 mes
Puntos: 0
Bueno, en principio lo voy a intentar siguiendo el consejo de hacer los calculos de fecha con campos en la base de datos, y lo de actualizar los recursos que se hagan cada hora a través de un Cron, como dice Sfx. Vamos a ver que sale, gracias por responder todos tan rápido.

Un saludo a todos, aki me teneis para lo que querais :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:19.