Игра Жизнь life

28.12.2016

Простенькая наброска для игры "Жизнь" (клеточный автомат), на Java Script

Подробнее про правила игры можно прочесть в статье Conway's Game of Life

pic1

game.php (Download)

 <?

  function neighboursCount(&$aField, $x,$y)
  {
    global $n, $m;

    $iRet = 0;

    if ($x > 1)
    {
      if ($aField[$x-1][$y] == 1)
      {
        $iRet++;
      }

      if ($y > 1)
      {
        if ($aField[$x-1][$y-1] == 1)
        {
          $iRet++;
        }
      }

      if ($y < $m-1)
      {
        if ($aField[$x-1][$y+1] == 1)
        {
          $iRet++;
        }
      }
    }

    if ($x < $n-1)
    {
      if ($aField[$x+1][$y] == 1)
      {
        $iRet++;
      }

      if ($y > 1)
      {
        if ($aField[$x+1][$y-1] == 1)
        {
          $iRet++;
        }
      }

      if ($y < $m-1)
      {
        if ($aField[$x+1][$y+1] == 1)
        {
          $iRet++;
        }
      }
    }

    if ($y > 1)
    {
      if ($aField[$x][$y-1] == 1)
      {
        $iRet++;
      }
    }

    if ($y < $m-1)
    {
      if ($aField[$x][$y+1] == 1)
      {
        $iRet++;
      }
    }


/*
if ($x == 10 AND $y == 10)
{
  echo $aField[$x-1][$y].'--'.$iRet.'<br/>';
  $aField[$x][$y] = 2;
}
*/
    return $iRet;
  }

  function Draw(&$aField, &$aRet)
  {
    $sRet  = '<table border="1" cellpadding="0" cellspacing="0" width="500px" height="500px" class="">';
    $aRet = array();
    for ($i=0; $i<count($aField); $i++)
    {
      $sRet .= '<tr>';
      $aRet[$i] = array();
      for ($j=0; $j<count($aField[$i]); $j++)
      {
        $iNBRs = neighboursCount($aField, $i, $j);

        switch ($aField[$i][$j])
        {
          case '1':
            $s = ' style="background-color : red;"';
          break;

          case '2':
            $s = ' style="background-color : blue;"';
          break;

          default:
            $s = '';
          break;
        }

        $sRet .= '<td '.$s.'>';
        $sRet .= '&nbsp;'; #.$iNBRs;
        $sRet .= '</td>';


        if ( ($iNBRs > 1) AND ($iNBRs < 4) )
        {
          $aRet[$i][$j] = 1;
        }
        else
        {
          $aRet[$i][$j] = 0;
        }

      }
      $sRet .= '</tr>';
    }
    $sRet .= '</table><hr/>';
    return $sRet;
  }



  $n = 20;
  $m = 20;
  $aField = array();
  for ($i=0; $i<$n; $i++)
  {
    $aField[$i] = array();
    for ($j=0; $j<$m; $j++)
    {
      $aField[$i][$j] = 0;
    }
  }

  $aField[3][3] = 1;
  $aField[3][4] = 1;
  $aField[3][5] = 1;
  $aField[4][3] = 1;

//  echo neighboursCount($aField, 10, 10);

  $Year = isset($_REQUEST['Year'])?$_REQUEST['Year']:0;
  if (!$Year)
  {
    $Year = 1;
  }
  echo '<form name="frmMain" action="index.php" method="get"><div width="100%" align="center"><br>';
  $aRet = array();
  for ($i=0; $i<$Year; $i++)
  {
    $sRet = Draw($aField, $aRet);
    $aField = $aRet;
  }
  echo $sRet;
  echo '</div><input name="Year" type="hidden" value="'.(++$Year).'"><input type="submit" value="Go On"></form><br><a href="index.php">Reset</a>';


?>

Скачать


Категории: Web, JavaScript
Яндекс.Метрика