fixed a lot of bugs, started to work on solos, moved some stuff to output.php
[e-DoKo.git] / functions.php
index 0168ce3922b3769198ed166ef16bc9ec59d53c4b..c4305b506ced23d5dbc37deedbd7631aa8e6c2fa 100644 (file)
@@ -1,21 +1,5 @@
 <?php
 
-/*
- * config 
- */
-
-$host  = "http://doko.nubati.net/database/index.php";
-$wiki  = "http://wiki.nubati.net/index.php?title=EmailDoko";
-$debug = 0;
-
-$last=-2;
-
-/*
- * end config
- */    
-
-
-/* helper function */
 function mymail($To,$Subject,$message)
 {  
   global $debug;
@@ -30,56 +14,159 @@ function mymail($To,$Subject,$message)
   return;
 }
 
-function is_trump($c) { return (($c<27) ? 1:0);}
-function is_club($c)  { return (in_array($c,array('27','28','29','30','31','32','33','34')));}
-function is_spade($c) { return (in_array($c,array('35','36','37','38','39','40','41','42')));}
-function is_heart($c) { return (in_array($c,array('43','44','45','46','47','48')));}
-
-function compare_cards($a,$b)
+function myisset()
 {
-  /* if a is higher than b return 1, else 0, a being the card first played */
+  /* returns 1 if all names passed as args are defined by a GET or POST statement,
+   * else it returns 0
+   */
+
+  $ok   = 1;
+  $args = func_get_args();
   
-  /* first map all cards to the odd number */
+  foreach($args as $arg)
+    {
+      $ok = $ok * isset($_REQUEST[$arg]);
+      /* echo "$arg: ok = $ok <br />";
+       */
+    }
+  return $ok;
+}
+
+function is_trump($c,$game) 
+{ 
+  switch($game)
+    {
+    case "queen":
+      if(in_array($c,array('3','4','5','6','7','8','9','10')))
+       return 1;
+      else 
+       return 0;
+      break;
+    case "normal":
+      return (($c<27) ? 1:0);
+      break;
+    }
+}
+
+function is_same_suite($c1,$c2,$game) 
+{
+  switch($game)
+    {
+    case "queen":
+      /* clubs */
+      if(in_array($c1,array('11','12','27','28','29','30','31','32','33','34')) &&
+        in_array($c2,array('11','12','27','28','29','30','31','32','33','34')) )
+       return 1;
+      /* spade */
+      if(in_array($c1,array('13','14','35','36','37','38','39','40','41','42')) &&
+        in_array($c2,array('13','14','35','36','37','38','39','40','41','42')) )
+       return 1;
+      /* heart */
+      if(in_array($c1,array( '1', '2','15','16','43','44','45','46','47','48')) &&
+        in_array($c2,array( '1', '2','15','16','43','44','45','46','47','48')) )
+       return 1;
+      /* diamonds */
+      if(in_array($c1,array('17','18','19','20','21','22','23','24','25','26')) &&
+        in_array($c2,array('17','18','19','20','21','22','23','24','25','26')) )
+       return 1;
+      
+      return 0;
+      break;
+    case "normal":
+      /* clubs */
+      if(in_array($c1,array('27','28','29','30','31','32','33','34')) &&
+        in_array($c2,array('27','28','29','30','31','32','33','34')) )
+       return 1;
+      /* spade */
+      if(in_array($c1,array('35','36','37','38','39','40','41','42')) &&
+        in_array($c2,array('35','36','37','38','39','40','41','42')) )
+       return 1;
+      /* heart */
+      if(in_array($c1,array('43','44','45','46','47','48')) &&
+        in_array($c2,array('43','44','45','46','47','48')) )
+       return 1;
+      
+      return 0;
+      break;
+    }
+}
+
+function compare_cards($a,$b,$game)
+{
+  /* if "a" is higher than "b" return 1, else 0, "a" being the card first played */
+
+  /* first map all cards to the odd number, 
+   * this insure that the first card wins the trick 
+   * if they are the same card
+   */
   if( $a/2 - (int)($a/2) != 0.5)
     $a--;
   if( $b/2 - (int)($b/2) != 0.5)
     $b--;
   
-  if(is_trump($a) && $a<=$b)
-    return 1;
-  else if(is_trump($a) && $a>$b)
-    return 0;
-  else 
-    { /*$a is not a trump */
-      if(is_trump($b))
+  switch($game)
+    {
+    case "trumpless":
+      break;
+    case "jack":
+      break;
+    case "queen":
+      if(is_trump($a,$game) && $a<=$b)
+       return 1;
+      else if(is_trump($a,$game))
        return 0;
-      else
-       {
-         /* both clubs? */
-         if( is_club($a) && is_club($b))
-           if($a<=$b)
+      else 
+       { /*$a is not a trump */
+         if(is_trump($b,$game))
+           return 0;
+         else
+           {
+             if(is_same_suite($a,$b,$game))
+               if($a<=$b)
+                 return 1;
+               else
+                 return 0;
+             
+             /* not the same suit and no trump: a wins */
              return 1;
-           else
-             return 0;
-         /* both spade? */
-         if( is_spade($a) && is_spade($b))
-           if($a<=$b)
-             return 1;
-           else
-             return 0;
-         /* both heart? */
-         if( is_heart($a) && is_heart($b))
-           if($a<=$b)
+           }     
+       }
+      break;
+    case "trump":
+      break;
+    case "club":
+      break;
+    case "spade":
+      break;
+    case "heart":
+      break;
+    case "normal":
+      if($a==1 && $b==1) /* both 10 of hearts */
+       return 0;        /* second one wins. TODO should be able to set this at the start of a new game */
+      if(is_trump($a,$game) && $a<=$b)
+       return 1;
+      else if(is_trump($a,$game))
+       return 0;
+      else 
+       { /*$a is not a trump */
+         if(is_trump($b,$game))
+           return 0;
+         else
+           {
+             if(is_same_suite($a,$b,$game))
+               if($a<=$b)
+                 return 1;
+               else
+                 return 0;
+             
+             /* not the same suit and no trump: a wins */
              return 1;
-           else
-             return 0;
-      return 1;
-       }         
+           }     
+       }
     }
-      
 } 
 
-function get_winner($p)
+function get_winner($p,$mode)
 {
   /* get all 4 cards played in a trick */
   $c1 = $p[1];
@@ -88,11 +175,11 @@ function get_winner($p)
   $c4 = $p[4];
 
   /* find out who won */
-  if( compare_cards($c1,$c2) && compare_cards($c1,$c3) && compare_cards($c1,$c4) )
+  if( compare_cards($c1,$c2,$mode) && compare_cards($c1,$c3,$mode) && compare_cards($c1,$c4,$mode) )
     return 1;
-  if( compare_cards($c2,$c3) && compare_cards($c2,$c4) )
+  if( !compare_cards($c1,$c2,$mode) && compare_cards($c2,$c3,$mode) && compare_cards($c2,$c4,$mode) )
     return 2;
-  if( compare_cards($c3,$c4) )
+  if( !compare_cards($c1,$c3,$mode) && !compare_cards($c2,$c3,$mode) && compare_cards($c3,$c4,$mode) )
     return 3;
   return 4;
 }
@@ -288,27 +375,6 @@ function card_value($card)
     }
 }
 
-function display_card($card)
-{
-  /* cards are only availabl for the odd values, e.g. 1.png, 3.png, ... 
-   * convert even cards to the matching odd value */
-
-  if( $card/2 - (int)($card/2) == 0.5)
-    echo "<img src=\"cards/".$card.".png\"  alt=\"".card_to_name($card)."\" />\n";
-  else
-    echo "<img src=\"cards/".($card-1).".png\"  alt=\"".card_to_name($card-1)."\" />\n";
-
-  return;
-}
-
-function display_link_card($card)
-{
-  if( $card/2 - (int)($card/2) == 0.5)
-    echo "<input type=\"radio\" name=\"card\" value=\"".$card."\" /><img src=\"cards/".$card.".png\" alt=\"\" />\n";
-  else
-    echo "<input type=\"radio\" name=\"card\" value=\"".$card."\" /><img src=\"cards/".($card-1).".png\" alt=\"\" />\n";
-  return;
-}
 
 function  create_array_of_random_numbers()
 {
@@ -323,108 +389,8 @@ function  create_array_of_random_numbers()
   return $r;
 }
 
-function check_want_to_play($me)
-{
-   ?>
- <form action="index.php" method="post">
-   Do you want to play a game of DoKo?
-   yes<input type="radio" name="in" value="yes" />
-   no<input type="radio" name="in" value="no" /> <br />
-
-   Do you want to get an email for every card played or only if it your move?
-   every card<input type="radio" name="update" value="card" />
-   only on my turn<input type="radio" name="update" value="turn" /> <br />
-<?php   
-  echo "<input type=\"hidden\" name=\"me\" value=\"$me\" />\n";
-  echo "\n";
-  echo "<input type=\"submit\" value=\"count me in\" />\n";
-  echo " </form>\n";
-
-  return;
-}
-
-function check_for_sickness($me,$mycards)
-{
- ?>
-  <p> nothing implemented so far, but give it a try anyway ;) </p>               
 
-  <form action="index.php" method="post">
 
-    do you want to play solo? 
-    <select name="solo" size="1">
-      <option>No</option>
-      <option>trumpless</option>
-      <option>trump</option>
-      <option>queen</option>
-      <option>jack</option>
-      <option>club</option>
-      <option>spade</option>
-      <option>heart</option>
-    </select>     
-    <br />
-
- <?php   
-      
-   echo "wedding?";
-  if(check_wedding($mycards))
-     {
-       echo " yes<input type=\"radio\" name=\"wedding\" value=\"yes\" />";
-       echo " no <input type=\"radio\" name=\"wedding\" value=\"no\" /> <br />\n";
-     }
-   else
-     {
-       echo " no <input type=\"hidden\" name=\"wedding\" value=\"no\" /> <br />\n";
-     };
-
-  echo "do you have poverty?";
-  if(count_trump($mycards)<4)
-    {
-      echo " yes<input type=\"radio\" name=\"poverty\" value=\"yes\" />";
-      echo " no <input type=\"radio\" name=\"poverty\" value=\"no\" /> <br />\n";
-    }
-  else
-    {
-      echo " no <input type=\"hidden\" name=\"poverty\" value=\"no\" /> <br />\n";
-    };
-
-   echo "do you have too many nines?";
-  if(count_nines($mycards)>4)
-     {
-       echo " yes<input type=\"radio\" name=\"nines\" value=\"yes\" />";
-       echo " no <input type=\"radio\" name=\"nines\" value=\"no\" /> <br />\n";
-     }
-   else
-     {
-       echo " no <input type=\"hidden\" name=\"nines\" value=\"no\" /> <br />\n";
-     };
-
-   echo "<input type=\"hidden\" name=\"me\" value=\"$me\" />\n";
-   echo "<input type=\"submit\" value=\"count me in\" />\n";
-
-   echo "</form>\n";
-
-  return;
-}
-
-function display_status()
-{
-  echo "<div class=\"info\">";
-  echo " is someone playing solo, etc?";
-  echo "</div>";
-  
-  return;
-}
-
-function display_news()
-{
-  global $wiki;
-  echo "<div class=\"bug\"> ".
-    "Please hit shift+reload.<br /><hr />".
-    "Fixed a few bugs, comments might be working again <br /><hr />".
-    "If you find more bugs, please list them in the <a href=\"".$wiki.
-    "\">wiki</a>.</div>\n";
-  return;
-}
 
 function display_cards($me,$myturn)
 {