php flipt

  • Onderwerp starter Onderwerp starter TI84
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

TI84

Nieuwe gebruiker
Lid geworden
27 nov 2009
Berichten
4
Beste,

Ik wil een simpel spelletje maken, multiplayer voor op meerdere computers. (denk bv aan bomberman ofzo).
Ik weet dat php niet ideaal is voor het maken van spelletjes, maar laat me maar mn gang gaan.

Ik ben van plan om eerst een pagina te laden, daarna mbv javascript key's input op te slaan, daarna mbv setTimeout en xmlhttp.open(GET,"url?keyinput="+key,true een bestandje gegevens te laden en op te slaan (bv eigen positie laden uit database, bewerken, opslaan, en terugsturen) in een database (mbv mysql), en daarna hetgeen wat ik terug krijg als string op te knippen en met js de style van mijn elementen aan te passen. en weer een timeout te setten

Ik heb bij de xmlhttp.open... al een counter moeten toegevoegd omdat ik vermoed dat hij alleen een bestand laad als hij het bestand nog niet eerder geladen heeft.
Toen ik bij de xmlhttp.open ook mijn eigen positie stuurde gebeurde er niks vreemd, maar wanneer ik mijn eigen positie uit de database haal, bewerk afhankelijk van keyinput en dan terugsturen, flipt hij soms (bv wanneer ik van richting verander, of soms uit het niets), hij geeft dan gekke posities en mijn divje begint dan te springen naar plekken die ik niet kan verklaren.
Ik vermoed dat het probleem is dat de waarde die ik laad uit de database(mysql) incorrect zijn (waardes van bv een minuut geleden), waardoor hij van een foutieve beginwaarde uitgaat.
Kan het zijn dat wanneer er een timeout komt, dat js niet goed afsluit waar het mee bezig was, en dat daardoor variable incorrecte waardes kunnen hebben?

Oja, de bestanden:
HTML:
<html>
<head>
<title>PACMAN</title>
<?php
include 'db.php';


$query = "
	DROP TABLE `eten`;
";$resultaat =mysql_query($query, $db);$query = "
	CREATE TABLE `eten`(
		`gamenr` INT NOT NULL,
		`etennr` INT NOT NULL,
		`top` INT NOT NULL,
		`left` INT NOT NULL,
		`visibility` BOOLEAN NOT NULL,
		`status` INT
	) ENGINE = MYISAM ;
";$resultaat =mysql_query($query, $db);$query = "
	ALTER TABLE `eten`     ADD PRIMARY KEY(  `gamenr`,`etennr`);
";$resultaat =mysql_query($query, $db);
$query = "INSERT INTO `pacman`.`eten` (`gamenr` ,	`etennr`,`top` ,`left` ,	`visibility` ,	`status` )
		VALUES (0,0,100,100,0,NULL);";$resultaat =mysql_query($query, $db);			//DIT IS PACMAN


$query = "INSERT INTO `pacman`.`eten` (`gamenr` ,	`etennr`,`top` ,`left` ,	`visibility` ,	`status` )
		VALUES (0,$i,300,300,0,NULL);";$resultaat =mysql_query($query, $db);

$query = "INSERT INTO `pacman`.`eten` (`gamenr` ,	`etennr`,`top` ,`left` ,	`visibility` ,	`status` )
		VALUES (0,2,500,300,0,NULL);";$resultaat =mysql_query($query, $db);

?>
<script type="text/javascript">
richting=0;
counter=0

function toetsen(){
	document.onkeydown = keyDownListener;
	document.onkeyup = keyUpListener;
}
function keyDownListener(e){
	if(!e) e=window.event; // for I.E.
	if(e.keyCode==37) richting=1;
	if(e.keyCode==38) richting=3;
	if(e.keyCode==39) richting=2;
	if(e.keyCode==40) richting=4;
}
function keyUpListener(e){
	if(!e) e=window.event;	// for I.E.
}

function timeout(){
if (window.XMLHttpRequest)	// code for IE7+, Firefox, Chrome, Opera, Safari
	xmlhttp=new XMLHttpRequest();
else						// code for IE6, IE5
	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function(){
	if (xmlhttp.readyState==4 && xmlhttp.status==200){
		var antw=xmlhttp.responseText;
		document.getElementById("eten0").innerHTML=antw; //+antw.substr(12,2);
		document.getElementById("eten0").style.top=antw.substr(0,6)+'px';
		document.getElementById("eten0").style.left=antw.substr(6,6)+'px';
		for(var i=1;i<3;i++){
			if (antw.substr(12+i-1,1)==1)
				document.getElementById("eten"+i).style.visibility='hidden';
			else
				document.getElementById("eten"+i).style.visibility='visible';
		}
	}
}
xmlhttp.open("GET","getdb.php?c="+counter+"&r="+richting,true);
counter++;
xmlhttp.send();

if (counter<100)
	window.setTimeout('timeout();',50);
}
</script>
</head>

<body onload="toetsen();" onkeypress="keyDownListener()" >
<div id='container' style='position:relative;'>
<!--<div id='pacman' style='position:absolute;height:100;width:100;top:100;left:100;background:#F00;'>PACMAN</div>-->
<?php
$query = "SELECT eten.etennr,eten.top,eten.left FROM eten Where gamenr='0'"; // de SQL-query die wordt uitgevoerd
$resultaat= mysql_query($query, $db);
while($row = mysql_fetch_row($resultaat)){
	if ($row[0]==0)
	echo "<div id='eten$row[0]' style='position:absolute;height:40;width:40;top:$row[1];left:$row[2];background:#F00;visibility:visible;'></div>";
	else
	echo "<div id='eten$row[0]' style='position:absolute;height:10;width:10;top:$row[1];left:$row[2];background:#0FF;visibility:visible;'></div>";
}

?>
</div>
</body>

<script type="text/javascript">
timeout();
</script>

</html>

PHP:
<?php

$richting=$_GET["r"];

include 'db.php';
$query = "SELECT eten.gamenr,eten.etennr,eten.top,eten.left,eten.visibility FROM eten Where gamenr='0' LIMIT 0 , 30;"; // de SQL-query die wordt uitgevoerd
$resultaat= mysql_query($query, $db);
$row=mysql_fetch_row($resultaat);
$top=$row[2];
$left=$row[3];
if ($richting==1)	$left-=5;	
if ($richting==2)	$left+=5;	
if ($richting==3)	$top-=5;	
if ($richting==4)	$top+=5;	

$gamenr=0;
$etennr=0;
$query = "UPDATE `pacman`.`eten` SET `eten`.`top` = $top WHERE `eten`.`gamenr` = $gamenr AND `eten`.`etennr` =$etennr LIMIT 1 ;";
mysql_query($query, $db);
$query = "UPDATE `pacman`.`eten` SET `eten`.`left` = $left WHERE `eten`.`gamenr` = $gamenr AND `eten`.`etennr` =$etennr LIMIT 1 ;";
mysql_query($query, $db);


echo substr('00000',0,5-floor(log10($top))).$top;	//return TOP
echo substr('00000',0,5-floor(log10($left))).$left;	//return LEFT

while($row = mysql_fetch_row($resultaat)){
	$gamenr=$row[0];
	$etennr=$row[1];
	$etentop=$row[2];
	$etenleft=$row[3];
	$zichtbaar=$row[4];
	if ($top+40>$etentop&&$top-10<$etentop && $left+40>$etenleft&&$left-10<$etenleft&&$zichtbaar==0){
		$query = "UPDATE `pacman`.`eten` SET `eten`.`visibility` = '1' WHERE `eten`.`gamenr` = $gamenr AND `eten`.`etennr` =$etennr LIMIT 1 ;";
		mysql_query($query, $db);
		$zichtbaar=1;
	}
	echo $zichtbaar;
}
?>

Alvast bedankt
Rens
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan