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';
}
?>
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;
}
}
?>
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.