<html>
   <head>
      <title>Mini-Dame</title>
   </head>
   <body>
   <?php
   
/* function init 
 * Initialisiert das Spielfeld
 * @return array 
 * */
   function init()
      {
      $spielfeld[1] = array   (1 => "s",2 => "s",3 => "s");
      $spielfeld[2] = array   (1 => NULL,2 => NULL,3 => NULL);
      $spielfeld[3] = array   (1 => "w",2 => "w",3 => "w");
      return $spielfeld;
      }
      
/* Funktion gewonnen
 * Gibt zurück, ob der Spieler mit der Farbe $farbe gewonnen hat
 * @param feld array Spielfeld
 * @param farbe char[s/w] Spieler, der dran ist
 * @return bool
 **/
function gewonnen($feld,$farbe)
   {
   $moeglichkeiten=0;
   $weiss=0;
   $schwarz=0;
   $glw=0;
   $gls=0;
   $w=0;
   $s=0;
   for ($i=1;$i<4;$i++)
         {
         for ($j=1;$j<4;$j++)
            {
            if ($i==1) {if ($feld[1][$j]=='w'){$glw++;}}
            if ($i==3) {if ($feld[3][$j]=='s'){$gls++;}}
            $k=10*$i+$j;
            if ($feld[$i][$j] == "s") {$schwarz++;;}
            if ($feld[$i][$j] == "w") {$weiss++;}
            if ($feld[$i][$j] == $farbe)
               {
               if (zugmoeglich($i,$j,'l',$feld))
                  {$moeglichkeiten++;}
               if (zugmoeglich($i,$j,'v',$feld))
                  {$moeglichkeiten++;}                     
               if (zugmoeglich($i,$j,'r',$feld))
                  {$moeglichkeiten++;}
               }
            }
         }
   if ($moeglichkeiten==0)
      {
      if ($farbe=="w"){$s++;}else{$w++;}
      echo 'kein Zug mehr m&ouml;glich<br/>';
      }
   if ($weiss==0)
      {echo 'Keine wei&szlig;en Steine mehr da<br />';$s++;}
   if ($schwarz==0)
      {echo 'Keine schwarzen Steine mehr da<br />';$w++;}
   if ($gls>0)
      {echo '<b>Schwarz</b> hat die gegnerische Grundlinie erreicht.<br />';$s++;}
   if ($glw>0)
      {echo '<b>Wei&szlig;</b> hat die gegnerische Grundlinie erreicht.<br />';$w++;}
   if ($w>0) 
      {
      echo '<b>Wei&szlig;</b> gewinnt!';
      return 'w';
      }
   else
      {
      if ($s>0) 
         {
         echo '<b>schwarz</b> gewinnt!';
         return 's';
         }
      else
         {
         return FALSE;
         }
      }
   }
   
/* Funktion Zugmöglich 
 * 
 * prüft, ob ein Zug möglich ist oder nicht
 * @param z int Zeile des gewählten Feldes
 * @param s int Spalte des gewählten Feldes
 * @param richtg char Richtung, in die gezogen werden soll (v - vor; l - vorn-links; r - vorn rechts)
 * @param spielfeld array das zu verändernde Spielfeld
 * @return bool
 **/
function zugmoeglich($z,$s,$richtg,$spielfeld)
   {
   $farbe = $spielfeld[$z][$s];
   if ($farbe==NULL){return FALSE;}
      else
      {
      if ($farbe == "w") {$r=-1;} else {$r=1;}
         {
         switch ($richtg)
            {
            case 'v' :
               {$sn=$s;}
            break;
            case 'l' :
               {$sn=$s+$r;}
            break;
            case 'r' :
               {$sn=$s-$r;}
            break;
            }
         $zn=$z+$r;
         if (($sn>3) || ($sn<1)) 
            {return FALSE; }
         else 
            {
            if (($zn>3) || ($zn<1)) 
               {return FALSE; }
            else 
               {
               if ($spielfeld[$zn][$sn] == $farbe) 
               {return FALSE; }
               else 
                  {
                  if ((($richtg=='l')||($richtg=='r'))&&($spielfeld[$zn][$sn] == NULL))
                     {return FALSE;}
                  else
                     {
                     if (($richtg=="v")&&($spielfeld[$zn][$sn] != NULL))
                        {return FALSE;}
                     else
                        {return TRUE;}
                     }
                  }
               }
            }
         }
      }
   }
   
/* Prozedur Zeichnefeld
 * 
 * Stellt das Spielfeld als Tabelle dar.
 * @param spielfeld array Spielfeld
 * @param farbe char Farbe des Spielers, der als nächstes dran ist
 * @param rundennummer int Nummer der Spielrunde
 * AUSNAHMEN: @param farbe==FALSE -> zeichne das Spielfeld ohne Bedienelemente -> Spiel wurde gewonnen
 * */
function zeichnefeld($spielfeld,$farbe,$rundennr)
   {
   echo  '  <form method="$GET" action="15R32b.php">
            <table border="1">';
   for ($i=1;$i<4;$i++)
      {
      echo  '  <tr height="100px">';
      for ($j=1;$j<4;$j++)
         {
         $k=10*$i+$j;
         echo  '  <td align="center" width="100px">
                  <input type="hidden" name="'.$k.'" value="'.$spielfeld[$i][$j].'" />';
         if ($spielfeld[$i][$j] == "s") {echo '<img src="schwarz.png" /><br />';}
         if ($spielfeld[$i][$j] == "w") {echo '<img src="weiss.png" /><br />';}
         if ($spielfeld[$i][$j] == NULL) {echo '<img src="nix.png" /><br />';} 
         if ($spielfeld[$i][$j] == $farbe)
            {
            if ($farbe!=FALSE)
               {
               if (zugmoeglich($i,$j,'l',$spielfeld))
                  {
                  echo '<input type="submit" name="r" value="'.$k.'l" />';
                  }
               if (zugmoeglich($i,$j,'v',$spielfeld))
                  {
                  echo '<input type="submit" name="r" value="'.$k.'v" />';
                  }                     
               if (zugmoeglich($i,$j,'r',$spielfeld))
                  {
                  echo '<input type="submit" name="r" value="'.$k.'r" />';
                  }
               }
            echo  '</td>';
            }
         }
      echo  '</tr>';
      }
   echo  '  </table>
            <p>Rundennummer: <b>'.$rundennr.'</b></p>
            <input type="hidden" name="farbe" value="'.$farbe.'"/>
            <input type="hidden" name="rundennr" value="'.$rundennr.'"/>
            </form>';
   }

/*Funktion zug
 * 
 * Führt den durch die Parameter festgelegten Zug aus und gibt das veränderte Spielfeld zurück
 * @param z int Zeilennummer des Spielsteins
 * @param s int Spaltennummer des Spielsteins
 * @param richtg {'l','v','r'} richtung, in die gezogen wird ([l]inks, [v]or, [r]echts)
 * @param spielfeld array Spielfeld
 * @return array Spielfeld
 * */
function zug($z,$s,$richtg,$spielfeld)
   {
   if ($spielfeld[$z][$s] == "w") {$farbe="w";$r=-1;} else {$farbe="s";$r=1;}
   switch ($richtg)
      {
      case 'v' :
         {$sn=$s;}
      break;
      case 'l' :
         {$sn=$s+$r;}
      break;
      case 'r' :
         {$sn=$s-$r;}
      break;
      }
   $zn=$z+$r;
   $spielfeld[$z][$s] = NULL;
   $spielfeld[$zn][$sn] = $farbe;
   return $spielfeld;
   }

/* Spiel */
   if (!ISSET($_GET['r']))
      {
      $feld = init();
      zeichnefeld($feld,'w',0);
      }
   else
      {
      for ($i=1;$i<4;$i++)
         {
         for ($j=1;$j<4;$j++)
            {
            $name=10*$i+$j;
            $feld[$i][$j]=$_GET[$name];
            }
         }
      $uebergabe = $_GET['r'];
      $runde=$_GET['rundennr'];
      {$runde++;}
      $z=$uebergabe[0];
      $s=$uebergabe[1];
      $r=$uebergabe[2];
      $farbe=$_GET['farbe'];
      $feld = zug($z,$s,$r,$feld);
      if ($farbe=='s') {$farbe='w';}else{$farbe='s';}
      if (gewonnen($feld,$farbe) != FALSE)
         {
         zeichnefeld($feld,FALSE,$runde);
         }
      else
         {
         zeichnefeld($feld,$farbe,$runde);
         }
      }
   ?>
   </body>
</html>
