Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/03/2007, 09:04
stardust
 
Fecha de Ingreso: mayo-2006
Ubicación: Madrid
Mensajes: 153
Antigüedad: 17 años, 10 meses
Puntos: 3
Generador de mapas

Hola:

Estoy programando un jueguecillo y me gustaría que se pudieran construir los edificios de forma visual (eligiendo dónde se quiere poner y demás). El juego usa dos frames: el de la izuierda que es el menú y el de la derecha que es el principal. Cada vez que se elige una opción del menú, los frames se recargan y se obtiene la información del módulo a cargar en el frame principal con GET.

Este es el código fuente del módulo:
Código PHP:
<?php
session_start
();
if (isset(
$_SESSION['id_usuario'])){   //Comprueba si hay info para login
    
include('../lib/funciones.php');
    include(
'../lib/cabecera.php');
    echo 
'<P><FORM METHOD="get" ACTION="construccion.php">';
    echo  
'<INPUT TYPE="IMAGE" SRC="imagen_mapa.php?x='.$_GET["mapa_x"].'&y='.$_GET["mapa_y"].'&opcion='.$_GET["opcion"].'" NAME="mapa" BORDER="0" style="cursor:crosshair">';
     echo
'<input name="modulo" type="hidden" value="construccion" />';
     echo 
'<label><br>';
     echo 
'<input name="opcion" type="radio" value="casa" checked="checked"/>';
     echo 
'</label>';
     echo 
'Casa<br>';
     echo 
'<label>';
     echo 
'<input name="opcion" type="radio" value="aserradero" />';
     echo 
'Aserradero<br>';
     echo 
'</label>';
     echo 
'<label>';
     echo 
'<input name="opcion" type="radio" value="mina" />';
     echo 
'Mina<br>';
     echo 
'</label>';
   echo    
'</FORM>';
if (isset(
$_SESSION['construido']) AND $_SESSION['construido']==1){
  echo 
'Se ha podido<br>'.$_SESSION['construido'];
    
print_r($_SESSION);
  
$_SESSION['construido']=0;
  }else{
        
print_r($_SESSION);
    echo 
'No se ha podido';
  }
  
print_r($_SESSION);
    include(
'../lib/cola.php');
}else{
  echo 
'No estás logeado';
  }
?>
y este es el código de la página que genera la imagen:

Código PHP:
<?php
session_start
();

Header"Content-type: image/jpeg");
if(isset(
$_GET)){
$imagen_sombra=imagecreatefromjpeg('../img/mapa2.jpg');
$color=imagecolorat($imagen_sombra,$_GET['x'],$_GET['y']);
if(
$color<>0){            
    
$imagen=imagecreatefromjpeg('../img/mapa.jpg');                    //Crea el mapa visible
    
$opcion=imagecreatefromjpeg('../img/'.$_GET["opcion"].'.jpg');   
    
$blanco=imagecolorallocate ($opcion,255,255,255);
    
imagecolortransparent($opcion,$blanco);
    
imagecopymerge($imagen,$opcion,$_GET['x'],$_GET['y'],0,0,30,30,100);
    
Imagejpeg($imagen,"",100);
    
Imagejpeg($imagen,"../img/mapa.jpg",100);
    
ImageDestroy($imagen);            //Crea la sombra del mapa
    
$negro=imagecolorallocate ($imagen_sombra,0,0,0);
    
imagefilledrectangle($imagen_sombra,$_GET['x'],$_GET['y'],$_GET['x']+30,$_GET['y']+30,$negro);
      
Imagejpeg($imagen_sombra,"../img/mapa2.jpg",100);    
    
ImageDestroy($imagen_sombra);
    
$_SESSION['construido']=1;
}else{
      
$imagen=imagecreatefromjpeg('../img/mapa.jpg');
      
Imagejpeg($imagen,"",100);
    
ImageDestroy($imagen);
    
$_SESSION['construido']=0;
}
}

?>
$Imagen es la imagen que se muestra al usuario (un cuadrado verde con un río en el medio). $Imagen_sombra es la imagen "escondida" que uso para saber si se puede construir o no en ese punto (tiene dos colores: el blanco indica que sí y el negro que no).

El código funciona. Si se puede construir entonces pone $_SESSION['construido'] a 1, si no a 0. El problema es que funciona con retardo, es decir, si yo pongo una casa y la construye no me dice nada, si después construyo una mina me dice que ha construido una casa, si luego construyo un aserradero me dice que ha construido una mina... He probado de 1000 formas para intentar solucionarlo pero nada. ¿Me podría alguien (si es que alguien ha leído hasta aquí) decir por que va con retardo?

Saludos y perdón por la extensión.