X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=index.php;h=7addf0ef375a7f371238ffda434f372b3c2fbef9;hp=40fc4122cac2c5565fffafd716e8e4f32d7365df;hb=a0b3efd697ed19fe2bf204868ab5920e4af5d467;hpb=fb8907b3f2daf368222f514d5ff36a059e330a0d diff --git a/index.php b/index.php index 40fc412..7addf0e 100644 --- a/index.php +++ b/index.php @@ -31,12 +31,15 @@ if(myisset("new")) output_form_for_new_game($names); } /*check if everything is ready to set up a new game */ -else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) + else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen" )) { $PlayerA = $_REQUEST["PlayerA"]; $PlayerB = $_REQUEST["PlayerB"]; $PlayerC = $_REQUEST["PlayerC"]; $PlayerD = $_REQUEST["PlayerD"]; + + $dullen = $_REQUEST["dullen"]; + $schweinchen = $_REQUEST["schweinchen"]; $EmailA = DB_get_email_by_name($PlayerA); $EmailB = DB_get_email_by_name($PlayerB); @@ -46,6 +49,7 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="") { echo "couldn't find one of the names, please start a new game"; + output_footer(); exit(); } @@ -58,25 +62,39 @@ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD" )) $randomNR = create_array_of_random_numbers(); $randomNRstring = join(":",$randomNR); + /* get ruleset information or create new one */ + $ruleset = DB_get_ruleset($dullen,$schweinchen); + if($ruleset <0) + { + echo "Error defining ruleset: $ruleset"; + output_footer(); + exit(); + }; + /* create game */ $followup = NULL; if(myisset("followup") ) { $followup= $_REQUEST["followup"]; $session = DB_get_session_by_gameid($followup); + $ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game, + this way no manipulation is possible */ if($session) - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre','$session' ,NULL)"); + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',". + "'$ruleset','$session' ,NULL)"); else { /* get max session */ $max = DB_get_max_session(); $max++; - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre','$max' ,NULL)"); + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',". + "'$ruleset','$max' ,NULL)"); mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup)); } } else - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre', NULL ,NULL)"); + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre', ". + "'$ruleset',NULL ,NULL)"); $game_id = mysql_insert_id(); /* create hash */ @@ -141,6 +159,7 @@ else if(myisset("cancle","me")) { 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(); } @@ -187,6 +206,7 @@ else if(myisset("me")) { 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(); } @@ -198,8 +218,47 @@ else if(myisset("me")) $mystatus = DB_get_status_by_hash($me); $mypos = DB_get_pos_by_hash($me); - /* display the game number */ - echo "

Game $gameid

\n"; + + /* display rule set */ + echo "
\n"; + $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); + + $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; + } + else + $gametype="normal"; + + if($gamestatus != 'pre') + echo " Gametype: $GT
\n"; + + echo "Rules:
\n"; + echo "10ofhearts : ".$r[2]."
\n"; + echo "schweinchen: ".$r[3]."
\n"; + 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 @@ -219,9 +278,9 @@ else if(myisset("me")) DB_set_hand_status_by_hash($me,'init'); break; case 'init': - if( !myisset("in","update") ) + if( !myisset("in") ) { - echo "you need to answer both question"; + echo "you need to answer the question"; DB_set_hand_status_by_hash($me,'start'); } else @@ -244,13 +303,11 @@ else if(myisset("me")) } else { - echo "thanks for joining the game... please scroll down"; - echo "TODO: make this page nicer
"; - echo "TODO: set card pref
"; + echo "thanks for joining the game..."; $mycards = DB_get_hand($me); sort($mycards); - echo "

your cards are:
\n"; + echo "

your cards are:
\n"; foreach($mycards as $card) display_card($card); echo "

\n"; @@ -265,8 +322,6 @@ else if(myisset("me")) case 'check': echo "checking if you selected solo or nines...
". - " if you have a wedding, please send an email to the other players.
". - " if you have poverty you need to play a normal game,sorry...
". " Please click here to finish the setup.
"; if(!myisset("solo","wedding","poverty","nines") ) { @@ -303,17 +358,20 @@ else if(myisset("me")) else if($_REQUEST["wedding"] == "yes") { /* TODO: add silent solo somewhere*/ - echo "wedding was chosen
\n"; + 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 "poverty was chosen
\n"; + echo "So you got poverty. You might as well have said nothing, since this is not implemented yet,". + " so 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 "nines was chosen
\n"; + 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"); } } @@ -329,23 +387,22 @@ else if(myisset("me")) * set that one in the Game table * tell people about it. */ - echo "
checking if someone else selected solo or nines... wedding and poverty not handled at the moment
". + echo "
checking if someone else selected solo or nines... poverty not handled at the moment
". " Please click here to finish the setup.
"; - /* only set this after all poverty, etc. are handled*/ - DB_set_hand_status_by_hash($me,'play'); - - /* check if the game can start */ + /* check if everyone has reached this stage */ $userids = DB_get_all_userid_by_gameid($gameid); $ok=1; foreach($userids as $user) - if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play') - $ok=0; - + { + $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid); + if($userstat!='poverty' && $userstat!='play') + $ok=0; + }; + if($ok) { - DB_set_game_status_by_gameid($gameid,'play'); - + echo "Everyone has finished checking their cards, let's see what they said...
"; /* check what kind of game we are playing */ $gametype = DB_get_gametype_by_gameid($gameid); $startplayer = DB_get_startplayer_by_gameid($gameid); @@ -358,9 +415,9 @@ else if(myisset("me")) $nines = $user; /* gamestatus == normal, => cancel game */ - if($nines && $gamestatus == "normal") + if($nines && $gametype != "solo") { - /* TODO: set game type to nines to be able to keep statistics? */ + /* 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.\n"; @@ -373,7 +430,11 @@ else if(myisset("me")) /* delete everything from the dB */ DB_cancel_game($me); + output_footer(); + exit(); } + + /* check for different sickness and just output a general info */ /* check players for poverty */ $poverty = 0; @@ -386,22 +447,147 @@ else if(myisset("me")) echo "$name has a Vorbehalt.
"; } } - /* if gamestatus == normal, set poverty or dpovert (in case two people have poverty) */ - + /* check players for wedding */ $wedding = 0; foreach($userids as $user) { if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'wedding') { - $wedding++; + $wedding=$user; + $name = DB_get_name_by_userid($user); + echo "$name has a Vorbehalt.
" ; + } + }; + + /* 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.
" ; } } - + + /* now check which sickness comes first and set the gametype to it */ + + /* if gamestatus == normal, set poverty or dpovert (in case two people have poverty) */ + if($poverty>0 && $gametype == "normal") + { + if($poverty==1) + { + DB_set_gametype_by_gameid($gameid,"poverty"); + $gametype = "poverty"; + } + else if($poverty==2) + { + DB_set_gametype_by_gameid($gameid,"dpoverty"); + $gametype = "dpoverty"; + }; + }; /* if gamestatus == normal, set wedding */ + if($wedding> 0 && $gametype == "normal") + { + DB_set_gametype_by_gameid($gameid,"wedding"); + $gametype = "wedding"; + }; + + /* now the gametype is set correctly (shouldn't matter that this is calculated for every user) + * output what kind of game we have */ + + echo "
\n"; + + $poverty=0; + foreach($userids as $user) + { + $name = DB_get_name_by_userid($user); + $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + if($usersick=="poverty") + $poverty++; + if($usersick) + echo "$name has $usersick
"; + 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; + + }; + + 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; + case "wedding": + 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; + 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": + /* figure out who has poverty */ + /* check who was asked already + * everyone or trump was taken? + * trump was taken, start game + * trump was not taken, cancle game + * + * not everyone, figure out who is next in the list + * is the next person this one? + * no, display wait message, e.g. player X is asked at the moment + * yes, display trump, ask if he wants to take it + * no, set player asked to true, email next player + * yes, display all cards, ask for N return cards + * set re/contra + * + */ + case "dpoverty": + echo "TODO: handle double poverty here"; + DB_set_hand_status_by_hash($me,'play'); + }; + } + else + { + echo "You need to wait for the others, the game can only start after everyone finished checking their cards.
"; + }; + + /* 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; + + if($ok) + { + /* only set this after all poverty, etc. are handled*/ + DB_set_game_status_by_gameid($gameid,'play'); } break; @@ -412,7 +598,8 @@ else if(myisset("me")) */ /* figure out what kind of game we are playing, - * set the global variables $TRUMP,$DIAMONDS,$HEARTS,$CLUBS,$SPADES + * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"], + * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"] * accordingly */ @@ -426,37 +613,18 @@ else if(myisset("me")) else $gametype="normal"; - set_gametype($gametype); + 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 local time */ - echo "
\n Local times:"; - $users = array(); - $users = DB_get_all_userid_by_gameid($gameid); - foreach($users as $user) - { - $offset = DB_get_user_timezone($user); - $zone = return_timezone($offset); - date_default_timezone_set($zone); - $name = DB_get_name_by_userid($user); - - echo "\n"; - }; - echo "
$name ".date("Y-m-d H:i:s")."
\n
\n"; - - if($gamestatus != 'pre') - display_status($GT); - /* 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); - output_link_to_user_page($r[0],$r[1]); - display_news(); + display_links($r[0],$r[1]); /* end display useful things*/ @@ -470,7 +638,8 @@ else if(myisset("me")) /* display the table and the names */ $result = mysql_query("SELECT User.fullname as name,". - " Hand.position as position ". + " Hand.position as position, ". + " User.id ". "FROM Hand ". "LEFT JOIN User ON User.id=Hand.user_id ". "WHERE Hand.game_id='".$gameid."' ". @@ -482,11 +651,20 @@ else if(myisset("me")) { $name = $r[0]; $pos = $r[1]; - - echo " $name\n"; + $user = $r[2]; + + $offset = DB_get_user_timezone($user); + $zone = return_timezone($offset); + date_default_timezone_set($zone); + + echo " \n"; + echo " $name
\n"; + echo " local time: ".date("Y-m-d H:i:s")."\n"; + echo "
\n"; + } echo "\n"; - + /* get everything relevant to display the tricks */ $result = mysql_query("SELECT Hand_Card.card_id as card,". " Hand.position as position,". @@ -510,7 +688,7 @@ else if(myisset("me")) $firstcard = ""; /* first card in a trick */ echo "\n