Conways Spiel des Lebens in PHP und OOP
Hallo Leute, ich bastel grad an einer Version von Conways Spiel des Lebens in PHP mit OOP.
Leider habe ich da irgendwo Probleme. ;(
Hier mal mein Quellcode.
PHP-Code:
<?
session_start();
class field
{
var $row = 3;
var $col = 3;
var $alive = '<img src="alive.png" alt="alive" width="30" height="30" border="1" />';
var $dead = '<img src="dead.png" alt="dead" width="30" height="30" border="1" />';
var $cells = array();
function init_gen()
{
for($i = 0; $i <= $this->row*$this->col-1; $i++)
{
$this->cells[$i] = 0;
}
$this->cells[0] = 1;
$this->cells[2] = 1;
$this->cells[4] = 1;
$_SESSION['get_cells'] = implode(',', $this->cells);
}
function next_gen()
{
$this->cells = explode(',', $_SESSION['get_cells']);
$pitch = $this->row;
$alive_neighbours = 0;
$dead_neighbours = 0;
for($i = 0; $i <= $this->row*$this->col-1; $i++)
{
if(0 == $this->cells[$i])
{
# if weiß Nachbarn = 3 = 1*grün Geboren
if(1 == $this->cells[$i-1] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i-$pitch] OR 1 == $this->cells[$i-1] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i+$pitch] OR 1 == $this->cells[$i+$pitch] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i-$pitch] OR 1 == $this->cells[$i+$pitch] AND 1 == $this->cells[$i-1] AND 1 == $this->cells[$i-$pitch])
{
$dead_neighbours++;
}
if(3 == $dead_neighbours)
{
$this->cells[$i] = 1;
}
}
elseif(1 == $this->cells[$i])
{
# if grün Nachbarn = 2 OR 3 Überlebt
if(1 == $this->cells[$i-1] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i-$pitch] OR 1 == $this->cells[$i-1] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i+$pitch] OR 1 == $this->cells[$i+$pitch] AND 1 == $this->cells[$i+1] AND 1 == $this->cells[$i-$pitch] OR 1 == $this->cells[$i+$pitch] AND 1 == $this->cells[$i-1] AND 1 == $this->cells[$i-$pitch])
{
$this->cells[$i] = 1;
}
elseif(1 == $this->cells[$i-1] AND 1 == $this->cells[$i+1] OR 1 == $this->cells[$i-$pitch] AND 1 == $this->cells[$i+$pitch] OR 1 == $this->cells[$i-1] AND 1 == $this->cells[$i+$pitch] OR 1 == $this->cells[$i+1] AND 1 == $this->cells[$i+$pitch] OR 1 == $this->cells[$i-$pitch] AND 1 == $this->cells[$i-1] OR 1 == $this->cells[$i-$pitch] AND 1 == $this->cells[$i+1])
{
$this->cells[$i] = 1;
}
# if grün Nachbarn < 2 Stirbt OR grün Nachbarn >= 5 Stirb
if(1 == $this->cells[$i-1] OR 1 == $this->cells[$i+1] OR 1 == $this->cells[$i-$pitch] OR 1 == $this->cells[$i+$pitch])
{
$alive_eighbours++;
if(1 == $alive_neighbours OR 4 < $alive_neighbours)
{
$this->cells[$i] = 0;
}
}
}
}
$_SESSION['get_cells'] = implode(',', $this->cells);
}
function show()
{
$this->cells = explode(',', $_SESSION['get_cells']);
$block_row = $this->row*30 + $this->row*2;
$block_col = $this->col*30 + $this->col*2;
echo "\n".'<div>'."\n".'<p>'."\n".'<a href="?next-gen=go">Next-Gen</a> - <a href="gol.php">Re Start</a>'."\n".'</p>'."\n";
echo '<p style="border: 1px solid black; width: '.$block_row.'px; height: '.$block_col.'px; margin: 0; padding: 0;">'."\n";
foreach($this->cells as $value)
{
if(1 == $value)
{
echo $this->alive;
}
else
{
echo $this->dead;
}
}
echo "\n".'</p>'."\n".'</div>';
}
}
$gol = new field();
if(!'go' == $_GET['next-gen'])
{
$gol->init_gen();
}
else
{
$gol->next_gen();
}
$gol->show();
?>
Ich hoffe er ist für euch Verständlich. Mein derzeitiges Problem liegt in der Funktion next_gen(), den es wird keine Neue Generation erstellt. ;( Und ich weiß nicht mehr weiter mir raucht schon den ganzen Tag der Kopf.
Stell ich vielleicht die Falschen IF fragen in der next_gen() Function?