From dceed6f464ca2a65ba25e454aeaea2e1434cd5f3 Mon Sep 17 00:00:00 2001 From: arun Date: Fri, 8 Dec 2006 10:00:16 +0000 Subject: [PATCH] playing games should work now... new games can be started automatically at the end of an old one. --- create_database.sql | 1 + db.php | 94 ++++++++++++++++++++++++++--- index.php | 141 ++++++++++++++++++++++++++++++++------------ 3 files changed, 190 insertions(+), 46 deletions(-) diff --git a/create_database.sql b/create_database.sql index b6e7332..66c0cc3 100644 --- a/create_database.sql +++ b/create_database.sql @@ -73,6 +73,7 @@ CREATE TABLE `Game` ( `type` enum('solo','wedding','poverty','dpoverty') default NULL, `solo` enum('trumpless','jack','queen','trump','club','spade','heart','silent') default NULL, `status` enum('pre','play','gameover') default NULL, + `followup_of` int(11) default NULL, `id` int(11) NOT NULL auto_increment, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db.php b/db.php index fd5178d..52f51d9 100644 --- a/db.php +++ b/db.php @@ -7,8 +7,8 @@ function DB_open() { global $DB; - if ( $DB = mysql_connect('mysql.nubati.net','doko', '$DoKo#.') ) - mysql_select_db('dokodb') or die('Could not select database'); + if ( $DB = mysql_connect('localhost','dokodb', 'doko') ) + mysql_select_db('doko') or die('Could not select database'); else die (mysql_error()); @@ -50,7 +50,6 @@ function DB_test() function DB_get_email_by_name($name) { - echo "*looking for $name*"; $result = mysql_query("SELECT email FROM User WHERE fullname=".DB_quote_smart($name).""); $r = mysql_fetch_array($result,MYSQL_NUM); @@ -126,7 +125,7 @@ function DB_get_pos_by_hash($hash) function DB_get_name_by_hash($hash) { - $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON hand.user_id=user.id WHERE hash=".DB_quote_smart($hash)); + $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE hash=".DB_quote_smart($hash)); $r = mysql_fetch_array($result,MYSQL_NUM); if($r) @@ -146,12 +145,40 @@ function DB_get_status_by_hash($hash) return 0; } +function DB_set_game_status_by_gameid($id,$status) +{ + mysql_query("UPDATE Game SET status='".$status."' WHERE id=".DB_quote_smart($id)); + return; +} + +function DB_get_game_status_by_gameid($id) +{ + $result = mysql_query("SELECT status FROM Game WHERE id=".DB_quote_smart($id)); + $r = mysql_fetch_array($result,MYSQL_NUM); + + if($r) + return $r[0]; + else + return NULL; +} + function DB_set_hand_status_by_hash($hash,$status) { mysql_query("UPDATE Hand SET status='".$status."' WHERE hash=".DB_quote_smart($hash)); return; } +function DB_get_hand_status_by_userid($id) +{ + $result = mysql_query("SELECT status FROM Hand WHERE user_id=".DB_quote_smart($id)); + $r = mysql_fetch_array($result,MYSQL_NUM); + + if($r) + return $r[0]; + else + return 0; +} + function DB_get_gameid_by_hash($hash) { $result = mysql_query("SELECT game_id FROM Hand WHERE hash=".DB_quote_smart($hash)); @@ -207,6 +234,22 @@ function DB_get_hand($me) return $cards; } +function DB_get_cards_by_trick($id) +{ + $cards = array(); + $cards[0]=0; /* need to return index 1-4 */ + + $result = mysql_query("SELECT card_id FROM Play LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id ". + "LEFT JOIN Hand ON Hand.id=Hand_Card.hand_id ". + "WHERE trick_id=". + DB_quote_smart($id)." ORDER BY position ASC"); + while($r = mysql_fetch_array($result,MYSQL_NUM)) + $cards[]=$r[0]; + + return $cards; +} + + function DB_set_solo_by_hash($me,$solo) { mysql_query("UPDATE Hand SET solo=".DB_quote_smart($solo)." WHERE hash=".DB_quote_smart($hash)); @@ -221,10 +264,10 @@ function DB_set_sickness_by_hash($me,$sickness) function DB_get_current_trickid($gameid) { - $result = mysql_query("SELECT trick.id,MAX(play.sequence) FROM Play ". - "LEFT JOIN Trick ON play.trick_id=trick.id ". - "WHERE trick.game_id=".DB_quote_smart($gameid)." ". - "GROUP BY trick.id"); + $result = mysql_query("SELECT Trick.id,MAX(Play.sequence) FROM Play ". + "LEFT JOIN Trick ON Play.trick_id=Trick.id ". + "WHERE Trick.game_id=".DB_quote_smart($gameid)." ". + "GROUP BY Trick.id"); while( $r = mysql_fetch_array($result,MYSQL_NUM) ) { $trickid = $r[0]; @@ -261,4 +304,39 @@ function DB_play_card($trickid,$handcardid,$sequence) return; } +function DB_get_all_names_by_gameid($id) +{ + $names = array(); + + $result = mysql_query("SELECT fullname FROM Hand LEFT JOIN User ON Hand.user_id=User.id WHERE game_id=". + DB_quote_smart($id)." ORDER BY position ASC"); + while($r = mysql_fetch_array($result,MYSQL_NUM)) + $names[] = $r[0]; + + return $names; +} + +function DB_get_all_userid_by_gameid($id) +{ + $names = array(); + + $result = mysql_query("SELECT user_id FROM Hand WHERE game_id=". + DB_quote_smart($id)); + while($r = mysql_fetch_array($result,MYSQL_NUM)) + $names[] = $r[0]; + + return $names; +} + +function DB_get_hash_from_game_and_pos($id,$pos) +{ + $result = mysql_query("SELECT hash FROM Hand WHERE game_id=".DB_quote_smart($id)." and position=".DB_quote_smart($pos)); + $r = mysql_fetch_array($result,MYSQL_NUM); + + if($r) + return $r[0]; + else + return ""; +} + ?> \ No newline at end of file diff --git a/index.php b/index.php index 58dd183..f0bfad5 100644 --- a/index.php +++ b/index.php @@ -37,6 +37,7 @@ \n"; + + /*check if we still have cards left, else set status to gameover */ if(sizeof(DB_get_hand($me))==0) - DB_set_hand_status_by_hash($me,'gameover'); + { + DB_set_hand_status_by_hash($me,'gameover'); + $mystatus='gameover'; + } + + /* if all players are done, set game status also to game over */ + $userids = DB_get_all_userid_by_gameid($gameid); + $done=1; + foreach($userids as $user) + if(DB_get_hand_status_by_userid($user)!='gameover') + $done=0; + + if($done) + DB_set_game_status_by_gameid($gameid,"gameover"); - echo "TODO: email next player
"; + /* email next player */ + if(DB_get_game_status_by_gameid($gameid)=='play') + { + if($sequence==4) + { + $play = DB_get_cards_by_trick($trickid); + $winner = get_winner($play); /* returns the position */ + $next = $winner; + } + else + { + $next = DB_get_pos_by_hash($me)+1; + } + if($next==5) $next=1; + + echo "TODO: email next player at pos $next
"; + if($debug) + echo "DEBUG: next player
\n"; + + } } else { @@ -430,7 +474,7 @@ else if(isset($_REQUEST["me"])) if($myturn && !isset($_REQUEST["card"])) { - echo "Hello ".DB_get_name_by_hash($me).", it's your turn!
\n"; + echo "Hello ".$myname.", it's your turn!
\n"; echo "Your cards are:
\n"; echo "
\n"; foreach($mycards as $card) @@ -442,19 +486,40 @@ else if(isset($_REQUEST["me"]))
\n"; foreach($mycards as $card) display_card($card); } echo "\n"; - /*check if we still have cards left, else set status to gameover */ - - break; - case 'gameover': - echo "the game is over... guess the final score should be displayed here...
\n"; - echo "TODO: suggest a new game with the next person as dealer
\n"; + + /* check if we need to set status to 'gameover' is done during playing of the card */ + if($mystatus=='play') + break; + /* the following happens only when the gamestatus is 'gameover' */ + /* check if game is over, display results */ + if(DB_get_game_status_by_gameid($gameid)=='play') + { + echo "the game is over for you.. other people still need to play though"; + } + else + { + echo "the game is over now... guess the final score should be displayed here...
\n"; + + /* suggest a new game with the same people in it, just rotated once */ + $names = DB_get_all_names_by_gameid($gameid); + + echo "Do you want to continue playing?(This will start a new game, with the next person as dealer.)\n"; + echo "
\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + } break; default: echo "error in testing the status"; -- 2.17.1