\n";
+ echo "perhaps the game has been cancled, check by login in here.";
+ output_footer();
+ exit();
+ }
+
+ DB_update_user_timestamp($myid);
+
+ /* get some information from the DB */
+ $gameid = DB_get_gameid_by_hash($me);
+ $myname = DB_get_name_by_hash($me);
+
+ /* check if game really is old enough */
+ $result = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
+ $r = mysql_fetch_array($result,MYSQL_NUM);
+ if(time()-strtotime($r[0]) > 60*60*24*30) /* = 1 month */
+ {
+ $message = "Hello, \n\n".
+ "Game $gameid has been cancled since nothing happend for a while and $myname requested it.\n";
+
+ $userids = DB_get_all_userid_by_gameid($gameid);
+ foreach($userids as $user)
+ {
+ $To = DB_get_email_by_userid($user);
+ mymail($To,$EmailName."game cancled (timed out)",$message);
+ }
+
+ /* delete everything from the dB */
+ DB_cancel_game($me);
+
+ echo "
Game $gameid has been cancled.
";
+ }
+ else
+ echo "
You need to wait longer before you can cancle a game...
\n";
+ }
+/* handle request from one specific player for one game,
+ * (the hash is set on a per game base) */
+else if(myisset("me"))
+ {
+ $me = $_REQUEST["me"];
+
+ /* test for valid ID */
+ $myid = DB_get_userid_by_hash($me);
+ if(!$myid)
+ {
+ echo "Can't find you in the database, please check the url. \n";
+ echo "perhaps the game has been cancled, check by login in here.";
+ output_footer();
+ exit();
+ }
- if($debug)
- {
- str_replace("\n"," ",$message);
- echo " To: $To Subject: $Subject $message \n";
- }
- else
- mail($To,$Subject,$message);
- return;
-}
+ /* the user had done something, update the timestamp */
+ DB_update_user_timestamp($myid);
+
+ /* get some information from the DB */
+ $gameid = DB_get_gameid_by_hash($me);
+ $myname = DB_get_name_by_hash($me);
+ $mystatus = DB_get_status_by_hash($me);
+ $mypos = DB_get_pos_by_hash($me);
+
-function parse_status()
-{
- global $game,$history,$player,$hash,$lines;
-
- $game["init"] = 0;
- $game["solo-who"] = -1;
- $game["solo-what"] = "todo";
- $game["wedding"] = -1;
- $game["poverty"] = "";
- $game["nines"] = -1;
- $game["startplayer"] = 0;
+ /* get rule set for this game */
+ $result = mysql_query("SELECT * FROM Rulesets".
+ " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
+ " WHERE Game.id='$gameid'" );
+ $r = mysql_fetch_array($result,MYSQL_NUM);
- for($i=0;$i<4;$i++)
- {
- $tmp = explode( ":",$lines[$i]);
- $hash[$i] = $tmp[0];
- $player[$tmp[0]]["number"] = $i;
- $player[$tmp[0]]["hash"] = $tmp[0];
- $player[$tmp[0]]["name"] = $tmp[1];
- $player[$tmp[0]]["email"] = $tmp[2];
- $player[$tmp[0]]["option"] = $tmp[3];
- $player[$tmp[0]]["points"] = $tmp[4];
- $player[$tmp[0]]["cards"] = $tmp[5];
- if(ereg("s",$tmp[3])) $game["init"]++; /* how many players are ready? */
- if(ereg("P",$tmp[3])) $game["poverty"].= $i; /* players with poverty, could be two, so use a string */
- if(ereg("N",$tmp[3])) $game["nines"] = $i; /* the player with too many nines, only one possible */
- if(ereg("W",$tmp[3])) $game["wedding"] = $i; /* the player with the wedding, also only one possible */
- if(ereg("([OSQJCAH])",$tmp[3],$match) && ($game["solo-who"]<0) )
+ $RULES["dullen"] = $r[2];
+ $RULES["schweinchen"] = $r[3];
+
+ /* get some infos about the game */
+ $gametype = DB_get_gametype_by_gameid($gameid);
+ $gamestatus = DB_get_game_status_by_gameid($gameid);
+ $GT = $gametype;
+ if($gametype=="solo")
+ {
+ $gametype = DB_get_solo_by_gameid($gameid);
+ $GT = $gametype." ".$GT;
+ }
+
+ /* display rule set for this game */
+ echo "
\n";
+
+ /* does anyone have both foxes */
+ $GAME["schweinchen"]=0;
+ for($i=1;$i<5;$i++)
+ {
+ $hash = DB_get_hash_from_game_and_pos($gameid,$i);
+ $cards = DB_get_all_hand($hash);
+ if( in_array("19",$cards) && in_array("20",$cards) )
+ {
+ $GAME["schweinchen"]=1;
+ $GAME["schweinchen-who"]=$hash;
+ }
+ };
+
+ /* mystatus gets the player through the different stages of a game.
+ * start: yes/no
+ * init: check values from start,
+ * check for sickness
+ * check: check for return values from init
+ * poverty: handle poverty, wait here until all player have reached this state
+ * display sickness and move on to game
+ * play: game in progress
+ * gameover: are we revisiting a game
+ */
+ switch($mystatus)
+ {
+ case 'start':
+ check_want_to_play($me);
+ /* move on to the next stage*/
+ DB_set_hand_status_by_hash($me,'init');
+ break;
+ case 'init':
+ /* first check if everything went ok in the last step
+ * if not, send user back, if yes, check what he did
+ */
+ if( !myisset("in") )
+ {
+ echo "you need to answer the question.";
+ DB_set_hand_status_by_hash($me,'start');
+ }
+ else
+ {
+ if($_REQUEST["in"] == "no")
+ {
+ /* cancle the game */
+ $message = "Hello, \n\n".
+ "the game has been canceled due to the request of one of the players.\n";
+
+ $userids = DB_get_all_userid_by_gameid($gameid);
+ foreach($userids as $user)
+ {
+ $To = DB_get_email_by_userid($user);
+ mymail($To,$EmailName."game canceled",$message);
+ }
+
+ /* delete everything from the dB */
+ DB_cancel_game($me);
+ }
+ else
+ {
+ echo "thanks for joining the game...";
+
+ $mycards = DB_get_hand($me);
+ sort($mycards);
+ echo "
your cards are: \n";
+ foreach($mycards as $card)
+ display_card($card);
+ echo "
\n";
+
+ check_for_sickness($me,$mycards);
+
+ /* move on to the next stage*/
+ DB_set_hand_status_by_hash($me,'check');
+ }
+ }
+ break;
+
+ case 'check':
+ /* ok, user is in the game, saw his cards and selected his vorbehalt
+ * so first we check what he selected
+ */
+ echo "Processing what you selected in the last step... ";
+
+ if(!myisset("solo","wedding","poverty","nines") )
{
- $game["solo-who"] = $i;
- $game["startplayer"] = $i;
- switch($match[1])
+ /* all these variables have a pre-selected default,
+ * so we should never get here,
+ * unless a user tries to cheat ;) */
+ echo "something went wrong...please contact the admin.";
+ }
+ else
+ {
+ /* check if this sickness needs to be handled first */
+ $gametype = DB_get_gametype_by_gameid($gameid);
+ $startplayer = DB_get_startplayer_by_gameid($gameid);
+
+ if( $_REQUEST["solo"]!="No")
{
- case "O":
- $game["solo-what"] = "No Trump";
- case "S":
- $game["solo-what"] = "Trump";
- case "Q":
- $game["solo-what"] = "Queen";
- case "J":
- $game["solo-what"] = "Jack";
- case "C":
- $game["solo-what"] = "Club";
- case "A":
- $game["solo-what"] = "Spade";
- case "H":
- $game["solo-what"] = "Heart";
+ /* user wants to play a solo */
+
+ /* store the info in the user's hand info */
+ DB_set_solo_by_hash($me,$_REQUEST["solo"]);
+ DB_set_sickness_by_hash($me,"solo");
+
+ echo " Seems like you want to play a ".$_REQUEST["solo"]." solo. Got it. \n";
+
+ if($gametype == "solo" && $startplayer<$mypos)
+ {}/* do nothing, since someone else already is playing solo */
+ else
+ {
+ /* this solo comes first
+ * store info in game table
+ */
+ DB_set_gametype_by_gameid($gameid,"solo");
+ DB_set_startplayer_by_gameid($gameid,$mypos);
+ DB_set_solo_by_gameid($gameid,$_REQUEST["solo"]);
+ };
+ }
+ else if($_REQUEST["wedding"] == "yes")
+ {
+ /* TODO: add silent solo somewhere*/
+ echo "Ok, you don't want to play a silent solo...wedding was chosen. \n";
+ DB_set_sickness_by_hash($me,"wedding");
+ }
+ else if($_REQUEST["poverty"] == "yes")
+ {
+ echo "So you got poverty. You might as well have said nothing, since this is not implemented yet,".
+ " you need to play a normal game...to make it a bit harder, I'll tell the other people that".
+ " you only have a few trump... should make the game more interesting (although perhaps not for you:)) \n";
+ DB_set_sickness_by_hash($me,"poverty");
+ }
+ else if($_REQUEST["nines"] == "yes")
+ {
+ echo "What? You just don't want to play a game because you have a few nines? Well, if no one".
+ " is playing solo, this game will be canceled. \n";
+ DB_set_sickness_by_hash($me,"nines");
}
}
-
- }
- /* save the game history */
- for($i=4;$inext step of the setup. ";
+
+ /* move on to the next stage*/
+ DB_set_hand_status_by_hash($me,'poverty');
+ break;
+
+ case 'poverty':
+ /* here we need to check if there is a solo or some other form of sickness.
+ * If so, which one is the most important one
+ * set that one in the Game table
+ * tell people about it.
+ */
+ echo " Checking if someone else selected solo, nines or wedding... Poverty not handled at the moment ";
+
+ /* check if everyone has reached this stage */
+ $userids = DB_get_all_userid_by_gameid($gameid);
+ $ok=1;
+ foreach($userids as $user)
{
- $history[] = $lines[$i];
- }
- }
-
- if(sizeof($history)==0 || (sizeof($history)==1 && strlen($history[0])==3 ))
- $history[0] = $game["startplayer"].":";
-
- return;
-}
+ $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
+ if($userstat!='poverty' && $userstat!='play')
+ $ok=0;
+ };
-function count_nines($cards)
-{
- $card = explode(";",$cards);
-
- $nines =0;
+ if(!$ok)
+ {
+ echo "This step can only be handled after everyone finished the last step. ".
+ "Seems like this is not the case, so you need to wait a bit... please check back later.... ";
+ }
+ else
+ {
+ echo "Everyone has finished checking their cards, let's see what they said... ";
- foreach($card as $c)
- {
- if($c == "25" || $c == "26") $nines++;
- else if($c == "33" || $c == "34") $nines++;
- else if($c == "41" || $c == "42") $nines++;
- else if($c == "47" || $c == "48") $nines++;
- }
-
- return $nines;
-}
+ /* check what kind of game we are playing, in case there are any solos this already
+ *will have the correct information in it */
+ $gametype = DB_get_gametype_by_gameid($gameid);
+ $startplayer = DB_get_startplayer_by_gameid($gameid);
-function check_wedding($cards)
-{
- $card = explode(";",$cards);
-
- $count =0;
+ /* check for different sickness and just output a general info */
- if( in_array("3",$card) && in_array("2",$card) )
- $count=1;
+ /* check for nines */
+ $nines = 0;
+ foreach($userids as $user)
+ if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'nines')
+ {
+ $nines = $user;
+ $name = DB_get_name_by_userid($user);
+ echo "$name has a Vorbehalt. ";
+ break;
+ }
+
+ /* check players for poverty */
+ $poverty = 0;
+ foreach($userids as $user)
+ {
+ if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'poverty')
+ {
+ $poverty++;
+ $name = DB_get_name_by_userid($user);
+ echo "$name has a Vorbehalt. ";
+ }
+ }
- return $count;
-}
+ /* check players for wedding */
+ $wedding = 0;
+ foreach($userids as $user)
+ {
+ if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'wedding')
+ {
+ $wedding=$user;
+ $name = DB_get_name_by_userid($user);
+ echo "$name has a Vorbehalt. " ;
+ }
+ };
-function count_trump($cards)
-{
- $card = explode(";",$cards);
-
- $trump =0;
+ /* check for solo, output vorbehalt */
+ $solo = 0;
+ foreach($userids as $user)
+ {
+ if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'solo')
+ {
+ $solo++;
+ $name = DB_get_name_by_userid($user);
+ echo "$name has a Vorbehalt. " ;
+ }
+ }
- /* count each trump */
- foreach($card as $c)
- {
- if( (int)($c) <27) $trump++;
- }
+ /* now check which sickness comes first and set the gametype to it */
- /* subtract one, in case player has both foxes */
- if( in_array("19",$card) && in_array("20",$card) )
- $trump--;
+ /* gamestatus == normal, => cancel game */
+ if($gametype == "solo")
+ {
+ /* do nothing */
+ }
+ else if($nines)
+ {
+ /* cancle game */
+ /* TODO: should we keep statistics of this? */
+ $message = "Hello, \n\n".
+ "the game has been canceled because ".DB_get_name_by_userid($nines).
+ " has five or more nines and nobody is playing solo.\n";
+
+ /* TODO: add info about redeal in case this is a game of a series */
+
+ $userids = DB_get_all_userid_by_gameid($gameid);
+ foreach($userids as $user)
+ {
+ $To = DB_get_email_by_userid($user);
+ mymail($To,$EmailName."game canceled",$message);
+ }
+
+ /* delete everything from the dB */
+ DB_cancel_game($me);
+
+ echo "The game has been canceled because ".DB_get_name_by_userid($nines).
+ " has five or more nines and nobody is playing solo.\n";
+ output_footer();
+ exit();
+ }
+ else if($poverty==1 && $gametype !="poverty")
+ {
+ DB_set_gametype_by_gameid($gameid,"poverty");
+ $gametype = "poverty";
+ }
+ else if($poverty==2 && $gametype !="dpoverty")
+ {
+ DB_set_gametype_by_gameid($gameid,"dpoverty");
+ $gametype = "dpoverty";
+ }
+ else if($wedding> 0 && $gametype !="wedding")
+ {
+ DB_set_gametype_by_gameid($gameid,"wedding");
+ $gametype = "wedding";
+ };
- return $trump;
-}
+ echo " \n";
+ /* now the gametype is set correctly (shouldn't matter that this is calculated for every user)
+ * output what kind of game we have */
+
+ $poverty = 0;
+ foreach($userids as $user)
+ {
+ /* userids are sorted by position...
+ * so output whatever the firstone has, then whatever the next one has
+ * stop when the sickness is the same as the gametype
+ */
+
+ $name = DB_get_name_by_userid($user);
+ $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+ if($usersick)
+ echo "$name has $usersick "; /*TODO: perhaps save this in a string and store in Game? */
-function card_to_name($card)
-{
- switch($card)
- {
- case 1:
- case 2:
- return "ten of hearts";
- case 3:
- case 4:
- return "queen of clubs";
- case 5:
- case 6:
- return "queen of spades";
- case 7:
- case 8:
- return "queen of hearts";
- case 9:
- case 10:
- return "queen of diamonds";
- case 11:
- case 12:
- return "jack of clubs";
- case 13:
- case 14:
- return "jack of spades";
- case 15:
- case 16:
- return "jack of hearts";
- case 17:
- case 18:
- return "jack of diamonds";
- case 19:
- case 20:
- return "ace of diamonds";
- case 21:
- case 22:
- return "ten of diamonds";
- case 23:
- case 24:
- return "king of diamonds";
- case 25:
- case 26:
- return "nine of diamonds";;
- case 27:
- case 28:
- return "ace of clubs";
- case 29:
- case 30:
- return "ten of clubs";
- case 31:
- case 32:
- return "king of clubs";
- case 33:
- case 34:
- return "nine of clubs";
- case 35:
- case 36:
- return "ace of spades";
- case 37:
- case 38:
- return "ten of spades";
- case 39:
- case 40:
- return "king of spades";
- case 41:
- case 42:
- return "nine of spades";
- case 43:
- case 44:
- return "ace of hearts";
- case 45:
- case 46:
- return "king of hearts";
- case 47:
- case 48:
- return "nine of hearts";
- default:
- return "something went wrong, please contact the admin";
- }
-}
+ if($usersick=="poverty")
+ $poverty++;
+ if($usersick == "wedding" && $gametype =="wedding")
+ break;
+ if($usersick == "poverty" && $gametype =="poverty")
+ break;
+ if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2)
+ break;
+ if($usersick == "solo" && $gametype =="solo")
+ break;
+ };
-function card_value($card)
-{
- switch($card-1)
- {
- case 0:
- case 1:
- return 10;
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- return 3;
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- case 16:
- case 17:
- return 2;
- case 18:
- case 19:
- return 11;
- case 20:
- case 21:
- return 10;
- case 22:
- case 23:
- return 4;
- case 24:
- case 25:
- return 0;
- case 26:
- case 27:
- return 11;
- case 28:
- case 29:
- return 10;
- case 30:
- case 31:
- return 4;
- case 32:
- case 33:
- return 0;
- case 34:
- case 35:
- return 11;
- case 36:
- case 37:
- return 10;
- case 38:
- case 39:
- return 4;
- case 40:
- case 41:
- return 0;
- case 42:
- case 43:
- return 11;
- case 44:
- case 45:
- return 4;
- case 46:
- case 47:
- return 0;
- default:
- echo "something went wrong, please contact the admin ";
- return 0;
- }
-}
+ /* output Schweinchen in case the rules need it */
+ if( $gametype != "solo")
+ if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" )
+ echo DB_get_name_by_hash($GAME["schweinchen-who"])." has Schweinchen. ";
+
+ echo " \n";
+
+ /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/
+ switch($gametype)
+ {
+ case "solo":
+ /* are we the solo player? set us to re, else set us to contra */
+ $pos = DB_get_pos_by_hash($me);
+ if($pos == $startplayer)
+ DB_set_party_by_hash($me,"re");
+ else
+ DB_set_party_by_hash($me,"contra");
+ DB_set_hand_status_by_hash($me,'play');
+ break;
-function display_card($card)
-{
- if( $card/2 - (int)($card/2) == 0.5)
- echo "\n";
- else
- echo "\n";
- return;
-}
+ case "wedding":
+ /* set person with the wedding to re, do the rest during the game */
+ $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
+ if($usersick == "wedding")
+ DB_set_party_by_hash($me,"re");
+
+ echo "Don't know who will be Re and Contra, you need to ".
+ "figure that out at the end of the game yourself \n";
+ DB_set_hand_status_by_hash($me,'play');
+ break;
-function display_link_card($card,$me)
-{
- if( $card/2 - (int)($card/2) == 0.5)
- echo "\n";
- else
- echo "\n";
- return;
-}
+ case "normal":
+ $hand = DB_get_all_hand($me);
+
+ if(in_array('3',$hand)||in_array('4',$hand))
+ DB_set_party_by_hash($me,"re");
+ else
+ DB_set_party_by_hash($me,"contra");
+ DB_set_hand_status_by_hash($me,'play');
+ break;
+ case "poverty":
+ /* use extra column in DB.Game to store whom to ask,
+ * should be set for poverty and dpoverty(use two digits for dpoverty?) earlier*/
-function save_status()
-{
- global $player,$game,$hash,$history;
+ /* check if poverty resolved (e.g. DB.Game who set to NULL)
+ * yes? =>trump was taken, start game; break;
+ *
+ * check if we are being asked now
+ * no, display wait message, e.g. player X is asked at the moment
+ * yes, display number of trump and user's hand, ask if he wants to take it
+ * no, set whom-to-ask to next player, email next player, cancle game if no next player
+ * yes -> link to new page:display all cards, ask for N return cards
+ * set re/contra
+ *
+ */
+ case "dpoverty":
+ echo "TODO: handle poverty here (almost done in my developing version)";
+ DB_set_hand_status_by_hash($me,'play');
+ };
+ }
+
+ /* check if all players are ready to play */
+ $ok=1;
+ foreach($userids as $user)
+ if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
+ $ok=0;
- $output = fopen("status.txt","w");
- if ($output)
- {
- foreach($hash as $key)
+ if($ok)
{
- /* sorting the options, not sure why I do that actually */
- $tmp="";
- if( ereg("i",$player[$key]["option"]) )
- $tmp.="i";
- if( ereg("s",$player[$key]["option"]) )
- $tmp.="s";
- if( ereg("t",$player[$key]["option"]) )
- $tmp.="t";
- if( ereg("c",$player[$key]["option"]) )
- $tmp.="c";
- if( ereg("N",$player[$key]["option"]) )
- $tmp.="N";
- if( ereg("W",$player[$key]["option"]) )
- $tmp.="W";
- if( ereg("P",$player[$key]["option"]) )
- $tmp.="P";
- if( ereg("O",$player[$key]["option"]) )
- $tmp.="O";
- if( ereg("S",$player[$key]["option"]) )
- $tmp.="S";
- if( ereg("Q",$player[$key]["option"]) )
- $tmp.="Q";
- if( ereg("J",$player[$key]["option"]) )
- $tmp.="J";
- if( ereg("C",$player[$key]["option"]) )
- $tmp.="C";
- if( ereg("A",$player[$key]["option"]) )
- $tmp.="A";
- if( ereg("H",$player[$key]["option"]) )
- $tmp.="H";
- $player[$key]["option"]=$tmp;
+ /* only set this after all poverty, etc. are handled*/
+ DB_set_game_status_by_gameid($gameid,'play');
- /* saving the player stats */
- fwrite($output,"".$player[$key]["hash"].":" );
- fwrite($output,"".$player[$key]["name"].":" );
- fwrite($output,"".$player[$key]["email"].":" );
- fwrite($output,"".$player[$key]["option"].":" );
- fwrite($output,"".$player[$key]["points"].":" );
- fwrite($output,"".$player[$key]["cards"] .":");
- fwrite($output,"\n");
+ /* email startplayer */
+ $startplayer = DB_get_startplayer_by_gameid($gameid);
+ $email = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
+ $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+
+ if($hash!=$me)
+ {
+ /* email startplayer) */
+ $message = "It's your turn now.\n".
+ "Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
+ mymail($email,$EmailName."ready, set, go... ",$message);
+ }
+ else
+ echo " Please, start the game. ";
}
- fwrite($output,"\n");
- foreach($history as $line)
- fwrite($output,$line);
+ else
+ echo "You finished the setup, once everyone else has done the same you'll get an email when it is your turn.. ";
- fwrite($output,"\n");
- fclose($output);
- }
- else
- echo "can't open file for writing, please inform the admin.";
-
- return;
-}
+ break;
+ case 'play':
+ case 'gameover':
+ /* both entries here, so that the tricks are visible for both.
+ * in case of 'play' there is a break later that skips the last part
+ */
+
+ /* figure out what kind of game we are playing,
+ * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"],
+ * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"]
+ * accordingly
+ */
+
+ $gametype = DB_get_gametype_by_gameid($gameid);
+ $GT = $gametype;
+ if($gametype=="solo")
+ {
+ $gametype = DB_get_solo_by_gameid($gameid);
+ $GT = $gametype." ".$GT;
+ }
+ else
+ $gametype="normal";
+
+ set_gametype($gametype); /* this sets the $CARDS variable */
+
+ /* get some infos about the game */
+ $gamestatus = DB_get_game_status_by_gameid($gameid);
+
+ /* display useful things in divs */
+
+ /* display links to the users status page */
+ $result = mysql_query("SELECT email,password from User WHERE id='$myid'" );
+ $r = mysql_fetch_array($result,MYSQL_NUM);
+
+ display_links($r[0],$r[1]);
+
+ /* end display useful things*/
+
+ /* has the game started? No, then just wait here...*/
+ if($gamestatus == 'pre')
+ {
+ echo "You finished the setup, but not everyone else finished it...so you need to wait for the others... ";
+ break; /* not sure this works... the idea is that you can
+ * only play a card after everyone is ready to play */
+ }
+
+ /* display the table and the names */
+ $result = mysql_query("SELECT User.fullname as name,".
+ " Hand.position as position, ".
+ " User.id ".
+ "FROM Hand ".
+ "LEFT JOIN User ON User.id=Hand.user_id ".
+ "WHERE Hand.game_id='".$gameid."' ".
+ "ORDER BY position ASC");
+
+ echo "
Cards that have a green background have a comment, which you can access by hovering over the card with your mouse ;)
\n";
+ $offset = DB_get_user_timezone($user);
+ $zone = return_timezone($offset);
+ date_default_timezone_set($zone);
-$history=array();
+ echo " \n";
+ echo " $name \n";
+ echo " local time: ".date("Y-m-d H:i:s")."\n";
+ echo " \n";
-/* check for status file and read it, if possible */
+ }
+ echo "
\n";
-if(file_exists("status.txt"))
- $lines = file("status.txt");
- else
- die("no file");
+ /* get everything relevant to display the tricks */
+ $result = mysql_query("SELECT Hand_Card.card_id as card,".
+ " Hand.position as position,".
+ " Play.sequence as sequence, ".
+ " Trick.id, ".
+ " Comment.comment ".
+ "FROM Trick ".
+ "LEFT JOIN Play ON Trick.id=Play.trick_id ".
+ "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ".
+ "LEFT JOIN Hand ON Hand_Card.hand_id=Hand.id ".
+ "LEFT JOIN Comment ON Play.id=Comment.play_id ".
+ "WHERE Trick.game_id='".$gameid."' ".
+ "ORDER BY Trick.id,sequence ASC");
+ $trickNR = 1;
+
+ $lasttrick = DB_get_max_trickid($gameid);
+
+ $play = array(); /* needed to calculate winner later */
+ $seq = 1;
+ $pos = DB_get_startplayer_by_gameid($gameid)-1;
+ $firstcard = ""; /* first card in a trick */
+
+ echo "\n
\n";
+ echo "
Game $gameid:
\n";
+
+ while($r = mysql_fetch_array($result,MYSQL_NUM))
+ {
+ $pos = $r[1];
+ $seq = $r[2];
+ $trick = $r[3];
+ $comment = $r[4];
+
+ /* check if first schweinchen has been played */
+ if($r[0] == 19 || $r[0] == 20 )
+ $GAME["schweinchen"]++;
+
+ /* save card to be able to find the winner of the trick later */
+ $play[$seq] = array("card"=>$r[0],"pos"=>$pos);
+
+ if($seq==1)
+ {
+ /* first card in a trick, output some html */
+ if($trick!=$lasttrick)
+ {
+ /* start of an old trick? */
+ echo "
\n".
+ " \n";
+ };
+
+ /* remember first card, so that we are able to check, what cards can be played */
+ $firstcard = $r[0];
+ };
+
+ /* display card */
+ echo "
\n"; /* end div card */
+
+ /* end of trick? */
+ if($seq==4)
+ {
+ $trickNR++;
+ echo "
\n
\n"; /* end div table, end li table */
+ }
+ }
+
+ if($seq!=4 && $trickNR>1)
+ echo "
\n
\n"; /* end div table, end li table */
+
+ echo "
\n";
+
+ /* whos turn is it? */
+ if($seq==4)
+ {
+ $winner = get_winner($play,$gametype); /* returns the position */
+ $next = $winner;
+ $firstcard = ""; /* new trick, no first card */
+ }
+ else
+ {
+ $next = $pos+1;
+ if($next==5) $next=1;
+ }
+
+ /* my turn?, display cards as links, ask for comments*/
+ if(DB_get_pos_by_hash($me) == $next)
+ $myturn = 1;
+ else
+ $myturn = 0;
+
+ /* do we want to play a card? */
+ if(myisset("card") && $myturn)
+ {
+ $card = $_REQUEST["card"];
+ $handid = DB_get_handid_by_hash($me);
+
+ /* check if we have card and that we haven't played it yet*/
+ /* set played in hand_card to true where hand_id and card_id*/
+ $result = mysql_query("SELECT id FROM Hand_Card WHERE played='false' and ".
+ "hand_id='$handid' AND card_id=".DB_quote_smart($card));
+ $r = mysql_fetch_array($result,MYSQL_NUM);
+ $handcardid = $r[0];
+
+ if($handcardid)
+ {
+ $comment = "";
-/* check if we want to start a new game */
-if( isset($_REQUEST["PlayerA"]) &&
- isset($_REQUEST["PlayerB"]) &&
- isset($_REQUEST["PlayerC"]) &&
- isset($_REQUEST["PlayerD"]) &&
- isset($_REQUEST["EmailA"]) &&
- isset($_REQUEST["EmailB"]) &&
- isset($_REQUEST["EmailC"]) &&
- isset($_REQUEST["EmailD"]) && sizeof($lines<2))
- {
- $PlayerA = $_REQUEST["PlayerA"];
- $PlayerB = $_REQUEST["PlayerB"];
- $PlayerC = $_REQUEST["PlayerC"];
- $PlayerD = $_REQUEST["PlayerD"];
- $EmailA = $_REQUEST["EmailA"] ;
- $EmailB = $_REQUEST["EmailB"] ;
- $EmailC = $_REQUEST["EmailC"] ;
- $EmailD = $_REQUEST["EmailD"] ;
-
- $hashA = md5("AGameOfDoko".$PlayerA.$EmailA);
- $hashB = md5("AGameOfDoko".$PlayerB.$EmailB);
- $hashC = md5("AGameOfDoko".$PlayerC.$EmailC);
- $hashD = md5("AGameOfDoko".$PlayerD.$EmailD);
+ /* mark card as played */
+ mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
+ DB_quote_smart($card));
+ /* update Game timestamp */
+ DB_update_game_timestamp($gameid);
- /* send out email, check for error with email */
+ /* check for schweinchen */
+ //echo "schweinchen = ".$GAME["schweinchen"]." --$card- ";
+ if($card == 19 || $card == 20 )
+ {
+ $GAME["schweinchen"]++;
+ if($GAME["schweinchen"]==3 && $RULES["schweinchen"]=="second" )
+ $comment="Schweinchen! ";
+ if($RULES["schweinchen"]=="both" )
+ $comment="Schweinchen! ";
+ echo "schweinchen = ".$GAME["schweinchen"]." --- ";
+ }
- $message = "\n".
- "you are invited to play a game of DoKo (that is to debug the program ;).\n".
- "Place comments and bug reports here:\n".
- "http://wiki.nubati.net/index.php?title=EmailDoko\n\n".
- "The whole round would consist of the following players:\n".
- "$PlayerA\n".
- "$PlayerB\n".
- "$PlayerC\n".
- "$PlayerD\n\n".
- "If you want to join this game, please follow this link:\n\n".
- " ".$host."?a=";
-
- mymail($EmailA,"Invite for a game of DoKo","Hello $PlayerA,\n".$message.$hashA);
- mymail($EmailB,"Invite for a game of DoKo","Hello $PlayerB,\n".$message.$hashB);
- mymail($EmailC,"Invite for a game of DoKo","Hello $PlayerC,\n".$message.$hashC);
- mymail($EmailD,"Invite for a game of DoKo","Hello $PlayerD,\n".$message.$hashD);
-
- /* read in random.txt */
- if(file_exists("random.txt"))
- $random = file("random.txt");
- else
- die("no random file");
-
- $randomNR = explode( ":", $random[2] );
-
- /* write initial status into file */
- $output = fopen("status.txt","w");
- if ($output)
- {
- fwrite($output, "$hashA:$PlayerA:$EmailA:::" );
- for($i=0;$i<11;$i++)
- fwrite($output,"$randomNR[$i];" );
- fwrite($output,"$randomNR[11]:" ); $i++;
- fwrite($output,"\n");
-
- fwrite($output, "$hashB:$PlayerB:$EmailB:::" );
- for(;$i<23;$i++)
- fwrite($output,"$randomNR[$i];" );
- fwrite($output,"$randomNR[23]:" ); $i++;
- fwrite($output,"\n");
-
- fwrite($output, "$hashC:$PlayerC:$EmailC:::" );
- for(;$i<35;$i++)
- fwrite($output,"$randomNR[$i];" );
- fwrite($output,"$randomNR[35]:" ); $i++;
- fwrite($output,"\n");
-
- fwrite($output, "$hashD:$PlayerD:$EmailD:::");
- for(;$i<47;$i++)
- fwrite($output,"$randomNR[$i];" );
- fwrite($output,"$randomNR[47]:" );
- fwrite($output,"\n");
-
- fclose($output);
- }
- else
- echo "can't open file for writing";
- };
+ /* get trick id or start new trick */
+ $a = DB_get_current_trickid($gameid);
+ $trickid = $a[0];
+ $sequence = $a[1];
+
+ $playid = DB_play_card($trickid,$handcardid,$sequence);
+
+ /* check for coment */
+ if(myisset("comment"))
+ {
+ $comment.=$_REQUEST["comment"];
+ };
+ if($comment != "")
+ DB_insert_comment($comment,$playid,$myid);
-/* test if a game is running, else output everything for a new game */
-if(sizeof($lines)<2)
- {
-?>
-
no game in progress, please input 4 names and email addresses, please make sure that the addresses are correct!
-
-
-
- Do you want to play a game of DoKo?
- yes
- no
-
- Do you want to get an email for every card played or only if it your move?
- every card
- only on my turn
-\n";
- echo "\n";
- echo "\n";
- echo "
\n";
- }
- }
+ $ok=1;
-/* ***
- * * *
- * ***
- * * *
- * ***
- * yes? email him his hand, ask for solo, poverty, email every move or every card?
- */
- if(isset($_REQUEST["b"]))
- {
- $b=$_REQUEST["b"];
+ $uid = DB_get_userid_by_email($email);
+ if(!$uid)
+ $ok=0;
- if( ereg("s",$player[$b]["option"]) && $game["init"]<4)
+ if($ok)
{
- echo "just wait for the game to start";
- }
- else if( (!isset($_REQUEST["in"])|| !isset($_REQUEST["update"])) && !ereg("i",$player[$b]["option"]))
- {
- echo "go back to ";
- echo " here and fill out the form \n";
+ echo "Hmm, you forgot your passwort...nothing I can do at the moment:( ";
+ echo " you need to email Arun for now... in the future it will be all automated and an ";
+ echo "email with a new password will go to $email.";
}
else
- { /* show the hand */
- if($_REQUEST["in"]=="no")
- {
- for($i=0;$i<4;$i++)
- {
- $message = "Hello ".$player[$hash[$i]]["name"].",\n\n".
- "the game has been canceled due to the request of one of the players.\n";
- mymail($player[$hash[$i]]["email"],"[DoKo-Debug] the game has been canceled",$message);
- }
- $output = fopen("status.txt","w");
- if($output)
- fclose($output);
- else
- echo "problem opening file";
- }
+ {
+ if($email=="")
+ echo "you need to give me an email address!";
else
- {
- if($_REQUEST["update"]=="card") $player[$b]["option"].="c";
- if($_REQUEST["update"]=="turn") $player[$b]["option"].="t";
-
- $player[$b]["option"].="i";
-
- save_status();
-
- $allcards = $player[$b]["cards"];
- $mycards = explode(";",$allcards);
-
- sort($mycards);
- echo "your cards are \n";
- foreach($mycards as $card)
- {
- display_card($card);
- }
- echo " \n";
- ?>
-
aehm... at the moment please just answer everything with no, still need to implement this
-
-
- do you want to play solo?
-
-
-
-";
- echo " no \n";
- }
- else
- {
- echo " no \n";
- };
-
- echo "do you have poverty?";
- if(count_trump($player[$b]["cards"])<4)
- {
- echo " yes";
- echo " no \n";
- }
- else
- {
- echo " no \n";
- };
-
- echo "do you have too many nines?";
- if(count_nines($player[$b]["cards"])>4)
- {
- echo " yes";
- echo " no \n";
- }
- else
- {
- echo " no \n";
- };
-
- echo "\n";
- echo "\n";
-
- echo "
\n";
- }
- }
+ echo "couldn't find a player with this email, please contact Arun, if you think this is a mistake";
+ }
}
- if(isset($_REQUEST["c"]))
+ else
+ {
+ if(strlen($password)!=32)
+ $password = md5($password);
+
+ $ok=1;
+ $uid = DB_get_userid_by_email_and_password($email,$password);
+ if(!$uid)
+ $ok=0;
+
+ if($ok)
+ {
+ $time = DB_get_user_timestamp($uid);
+ $unixtime =strtotime($time);
+
+ $offset = DB_get_user_timezone($uid);
+ $zone = return_timezone($offset);
+ date_default_timezone_set($zone);
+
+ echo "last login: ".date("r",$unixtime)." ";
+
+ DB_update_user_timestamp($uid);
+
+ echo "
these are the games you are playing in: \n";
+ $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand".
+ " LEFT JOIN Game On Hand.game_id=Game.id".
+ " WHERE Hand.user_id='$uid' AND Game.status<>'gameover'" );
+ while( $r = mysql_fetch_array($result,MYSQL_NUM))
+ {
+ echo "game #".$r[1]." ";
+ if(time()-strtotime($r[2]) > 60*60*24*30)
+ echo " The game has been running for over a month.".
+ " Do you want to cancel it? yes".
+ " (clicking here is final and can't be restored)";
+ echo " ";
+ }
+ echo "
\n";
+
+
+ echo "
and these are your games that are already done: Game: \n";
+ $result = mysql_query("SELECT hash,game_id from Hand WHERE user_id='$uid' AND status='gameover'" );
+ while( $r = mysql_fetch_array($result,MYSQL_NUM))
+ echo "#".$r[1]." , ";
+ echo "
";
+ }
+ else
+ {
+ echo "sorry email and password don't match ";
+ }
+ };
+ output_footer();
+ exit();
+ }
+/* page for registration */
+ else if(myisset("register") )
+ {
+ output_register();
+ }
+/* new user wants to register */
+ else if(myisset("Rfullname","Remail","Rpassword","Rtimezone") )
+ {
+ $ok=1;
+ if(DB_get_userid_by_name($_REQUEST["Rfullname"]))
{
- $c=$_REQUEST["c"];
-
- if(!isset($_REQUEST["solo"])|| !isset($_REQUEST["wedding"])|| !isset($_REQUEST["poverty"]) || !isset($_REQUEST["nines"]) )
- {
- echo "go back to ";
- echo " here and fill out the form \n";
- }
- else if( ereg("s",$player[$c]["option"]) && $game["init"]<4 )
- {
- echo "just wait for the game to start";
- }
- else if($game["init"]<4)
- {
- if( $_REQUEST["solo"]!="No")
- {
- switch($_REQUEST["solo"])
- {
- case "No trump":
- $player[$c]["option"].="O";
- break;
- case "Normal solo":
- $player[$c]["option"].="S";
- break;
- case "Queen solo":
- $player[$c]["option"].="Q";
- break;
- case "Jack solo":
- $player[$c]["option"].="J";
- break;
- case "Club solo":
- $player[$c]["option"].="C";
- break;
- case "Spade solo":
- $player[$c]["option"].="A";
- break;
- case "Hear solo":
- $player[$c]["option"].="H";
- break;
- }
- }
- else if($_REQUEST["wedding"] == "yes")
- {
- echo "wedding was chosen \n";
- $player[$c]["option"].="W";
- }
- else if($_REQUEST["poverty"] == "yes")
- {
- echo "poverty was chosen \n";
- $player[$c]["option"].="P";
- }
- else if($_REQUEST["nines"] == "yes")
- {
- echo "nines was chosen \n";
- $player[$c]["option"].="N";
- }
-
- $message = "you're in. once everyone has filled out the form,".
- "the game will start and you'll get an eamil on your turn\n";
- mymail($player[$c]["email"],"[DoKo-debug] the game will start soon",$message);
-
- $player[$c]["option"].="s";
- save_status();
- if(file_exists("status.txt"))
- $lines = file("status.txt");
- else
- die("no file");
- parse_status();
-
- if($game["init"]==4)
- {
- $message = "The game can start now, it's your turn, please use this link to play a card:\n".
- $host."?me=".$hash[$game["startplayer"]]."\n";
- mymail($player[$hash[$game["startplayer"]]]["email"],"[DoKo-debug] let's go",$message);
- }
-
- }
+ echo "please chose another name ";
+ $ok=0;
}
- if($game["init"]==4)
+ if(DB_get_userid_by_email($_REQUEST["Remail"]))
{
- /* check for sickness*/
- /***** someone has 5 nines and no one is playing solo=> cancel game */
- if($game["nines"]>=0 && $game["solo-who"]<0)
- {
- $message = $player[$hash[$game["poverty"]]]["nines"]." has more than 4 nines. Game aborted!\n";
- for($i=0;$i<4;$i++)
- {
- mymail($player[$hash[$i]]["email"],"[DoKo-debug] the game has been canceled",$message);
- };
-
- $output = fopen("status.txt","w");
- if($output)
- fclose($output);
- else
- echo "problem opening file";
- }
-
- /* who is requesting this*/
- if(!isset($_REQUEST["me"]))
- {
- if(!isset($_REQUEST["recovery"]))
- {
- echo "A game is in progress and kibitzing is not allowed. Sorry!. \n";
- echo "In case you are playing, but lost your email or can't access the game anymore, please input your email here: \n";
- ?>
-
- recorvery:
-
-
-=0)
- {
- $message = "Please try this link: ".$host."?me=".$hash[$ok]."\n".
- "\n if this doesn't work, contact the admin.\n";
- mymail($recovery,"[DoKo-Debug] recovery ",$message);
- echo "email has been sent.";
- }
- else
- {
- echo "can't find this email address, sorry.";
- };
- } /* end recovery */
- }
+ echo "this email address is already used ?! ";
+ $ok=0;
+ }
+ if($ok)
+ {
+ $r=mysql_query("INSERT INTO User VALUES(NULL,".DB_quote_smart($_REQUEST["Rfullname"]).
+ ",".DB_quote_smart($_REQUEST["Remail"]).
+ ",".DB_quote_smart(md5($_REQUEST["Rpassword"])).
+ ",".DB_quote_smart($_REQUEST["Rtimezone"]).",NULL)");
+
+ if($r)
+ echo " added you to the database";
else
- { /* $me is set */
- $me = $_REQUEST["me"];
-
- /* output if we are playing a solo or a wedding */
- if($game["solo-who"]>=0)
- echo $player[$hash[$game["solo-who"]]]["name"]." is playing a ".$game["solo-what"]." solo! \n";
- else if($game["wedding"]>=0)
- echo $player[$hash[$game["wedding"]]]["name"]." is playing a wedding! \n";
-
- /* show history */
- foreach($history as $play)
- {
- echo " \n";
-
- $trick = explode(":",$play);
-
- $last=-2;
- /* found old trick, display it */
- echo "