Foros del Web » Programando para Internet » PHP »

Problema con script para juego online

Estas en el tema de Problema con script para juego online en el foro de PHP en Foros del Web. Buenas. Estoy creando un juego online como Ogame y me he atascado en una cosilla que mas que de programación es de lógica. El código ...
  #1 (permalink)  
Antiguo 10/10/2011, 15:01
 
Fecha de Ingreso: octubre-2011
Ubicación: España
Mensajes: 2
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Problema con script para juego online

Buenas.

Estoy creando un juego online como Ogame y me he atascado en una cosilla que mas que de programación es de lógica.

El código que he puesto a continuación es del sistema de añadido de recursos: cada vez que actualizas la página, se te actualizan los recursos en función del tiempo que haya pasado. Esto hace que te vayan dando materiales en función del tiempo (¡no de las veces que actualices!).

Si alguien ve alguna cosa que no esté muy clara o algún fallo de lógica, que lo comente, todo será bienvenido... Ya ando desesperado.

El resultado de estas funciones, y que no debería ser así, es que al actualizar me dan unos recursos fijos (nunca en función del tiempo, sino en el número de veces que se actualiza).


Código PHP:
Ver original
  1. <?php
  2.     actualizar_resources();
  3.     function actualizar_resources(){
  4.    
  5.         // Llamamos a la función "connect"
  6.  connect();
  7.  // Llamamos a la función "calcular_segundos"
  8.        
  9.         $segundos = calcular_segundos();
  10.  // Sacamos de la base de datos la madera antes de realizar la actualización
  11.         $sql = "select * from resources, towns where towns.ID_User = ".$_SESSION['ID_User']." and towns.ID_Town = resources.ID_Town";
  12.         $query = mysql_query($sql) or die('Fallo en actualizar_resources1');
  13.         $row = mysql_fetch_assoc($query);
  14.         $wood_ini = $row['Res_Wood'];
  15.  // Sacamos de la base de datos el ratio de madera del usuario activo
  16.         $sql = "select * from rates, towns where towns.ID_User = ".$_SESSION['ID_User']." and towns.ID_Town = rates.ID_Town";
  17.         $query = mysql_query($sql) or die('Fallo en actualizar_resources2');
  18.         $row = mysql_fetch_assoc($query);
  19.         $wood_rate = $row['Rate_Wood'];
  20.  // Llamamos a la función "add_wood". En ella, $segundos son los segundos que pasaron desde
  21.  // la última actualización de recursos; $wood_ini, la madera antes de actualizar y
  22.  // $wood_rate, el ratio de madera.
  23.         add_wood($segundos, $wood_ini, $wood_rate);
  24.  
  25.     }
  26.    
  27.     function connect(){
  28.    
  29.  // Se inicializan las sesiones para poder utilizar variables de sesión
  30.         session_start();
  31.         ob_start();
  32.    
  33.  // Datos a utilizar para conectar a la base de datos
  34.         $mysql_server = "****";
  35.         $mysql_user = "****";
  36.         $mysql_password = "****";
  37.         $mysql_database = "****";
  38.        
  39.  // Conexión a la bbdd
  40.         $connection = mysql_connect("$mysql_server","$mysql_user","$mysql_password") or die ("Unable to establish a DB connection");
  41.         $db = mysql_select_db("$mysql_database") or die ("Unable to establish a DB connection");
  42.     }
  43.    
  44.     function add_wood($segundos, $rec, $rate){
  45.  // Esta es la fórmula que creo que me está dando errores
  46.  // Supuestamente multiplica el ratio de recursos por los segundos que ha estado
  47.  // sin actualizar y dividirlo entre 3600, porque supongo que el ratio son recursos
  48.  // por hora. El resultado, lo suma a los recursos que ya teníamos
  49.         $wood_fin = $rec + (($segundos * $rate)/3600);
  50.  // Sustituimos los recursos anteriores por los nuevos
  51.         $sql = "update resources set Res_Wood = ".$wood_fin." where Res_Wood = ".$rec." and ID_Town = ".$_SESSION['ID_User']."";
  52.         $query = mysql_query($sql) or die(mysql_error());
  53.     }
  54.  
  55.     function calcular_segundos(){
  56.  // Sacamos de la base de datos, la fecha desde la última actualización
  57.         $sql = "select * from date_resources";
  58.         $query = mysql_query($sql) or die(mysql_error());
  59.         $row = mysql_fetch_assoc($query);
  60.  // Lo guardamos en la variable $my_time
  61.        
  62.         $my_time = $row['Date'];
  63.  // Guardamos la fecha actual en $new_time
  64.         $new_time = time();
  65.  // Cambiamos el valor de la ultima actualización por el de hoy
  66.         $sql = "update date_resources set Date = ".$new_time." where Date = ".$my_time." and ID_User = ".$_SESSION['ID_User']."";
  67.  $query = mysql_query($sql) or die('Fallo en calcular_segundos');
  68.  // Realizamos la diferencia entre nuestra hora actual y la hora de la última actualización
  69.         $resta = $new_time - $my_time;
  70.  // Devolvemos el resultado
  71.         return $resta;
  72.    
  73.     }
  74.    
  75. ?>

Muchísimas gracias por todo de antemano.
  #2 (permalink)  
Antiguo 10/10/2011, 15:35
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con script para juego online

El código esta haciendo lo que vos escribiste, te falto poner un if para saber si tiene que hacer la actualización o no,
  #3 (permalink)  
Antiguo 10/10/2011, 15:43
 
Fecha de Ingreso: octubre-2011
Ubicación: España
Mensajes: 2
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Problema con script para juego online

Cita:
Iniciado por marcofbb Ver Mensaje
El código esta haciendo lo que vos escribiste, te falto poner un if para saber si tiene que hacer la actualización o no,
Creo que no has entendido mi duda. El código no hace lo que realmente intento.
Quiero que me actualice en función del tiempo que ha pasado (basándome en un timestamp que tengo guardado en la bbdd).

¿Para qué necesito el if? Simplemente saco la diferencia de tiempos y lo multiplico por el rate, ¿no?
  #4 (permalink)  
Antiguo 10/10/2011, 15:48
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con script para juego online

Cita:
Iniciado por tripir9 Ver Mensaje
Creo que no has entendido mi duda. El código no hace lo que realmente intento.
Quiero que me actualice en función del tiempo que ha pasado (basándome en un timestamp que tengo guardado en la bbdd).

¿Para qué necesito el if? Simplemente saco la diferencia de tiempos y lo multiplico por el rate, ¿no?
Entendí cualquier cosa :p entendí que querías que cada 1 hora se actualice el rate.

Ahora hago unas pruebas en mi localhost y veo como se puede solucionar
  #5 (permalink)  
Antiguo 10/10/2011, 16:02
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con script para juego online

Mira esto:

Código PHP:
Ver original
  1. <?php
  2. // 1318283224
  3. $timedb = "1318283224";
  4. $madera = "200";
  5. $ratio = "2";
  6. $segundos = 1318283350 - $timedb; // 126
  7. $maderaF = $madera + (($segundos * $ratio)/3600);
  8.  
  9. echo $maderaF; // 200.07
  10. ?>

Ahí me devuelve la madera que teníamos más :: Los segundos que estuvimos cortando madera por la poporcion que se corta cada segundo, y hace lo dividimos por 3600 para hacerlo por segundos (o que no debería ir, porque ya lo estamos haciendo por segundo, en todo caso se tendria que bajar el ratio a un numero con decima 0,14 ratio por segundo )

Saludos

Etiquetas: juego, ogame, resources, time
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 20:24.