diff options
author | arun <arun@nubati.net> | 2006-12-08 10:00:16 +0000 |
---|---|---|
committer | arun <arun> | 2006-12-08 10:00:16 +0000 |
commit | dceed6f464ca2a65ba25e454aeaea2e1434cd5f3 (patch) | |
tree | df49a123715193a94f7b80d56d18d9e7dc3fe238 | |
parent | 987f4b37750c1c4c6d414a3cb8ae5e7b798fe41a (diff) | |
download | e-DoKo-dceed6f464ca2a65ba25e454aeaea2e1434cd5f3.tar.gz e-DoKo-dceed6f464ca2a65ba25e454aeaea2e1434cd5f3.tar.bz2 e-DoKo-dceed6f464ca2a65ba25e454aeaea2e1434cd5f3.zip |
playing games should work now... new games can be started automatically at the end of an old one.
-rw-r--r-- | create_database.sql | 1 | ||||
-rw-r--r-- | db.php | 94 | ||||
-rw-r--r-- | 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; @@ -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 @@ -37,6 +37,7 @@ </div> <?php +error_reporting(E_ALL); include_once("functions.php"); include_once("db.php"); @@ -96,7 +97,9 @@ else if( isset($_REQUEST["PlayerA"]) && $randomNRstring = join(":",$randomNR); /* create game */ - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', NULL, NULL,'pre', NULL)"); + $followup = NULL; + if(isset($_REQUEST["followup"])) $followup= $_REQUEST["followup"]; + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', NULL, NULL,'pre',$followup ,NULL)"); $game_id = mysql_insert_id(); @@ -146,21 +149,14 @@ else if( isset($_REQUEST["PlayerA"]) && mymail($EmailB,"You are invited to a game of DoKo","Hello $PlayerB,\n".$message.$hashB); mymail($EmailC,"You are invited to a game of DoKo","Hello $PlayerC,\n".$message.$hashC); mymail($EmailD,"You are invited to a game of DoKo","Hello $PlayerD,\n".$message.$hashD); - - /* - - do things like: - select fullname,strength,suite,game_id from hand_card left join hand on hand_id=hand.id left join user on user.id=user_id left join card on card_id=card.id where game_id='4' - - */ - + } /* end set up a new game */ else if(isset($_REQUEST["me"])) { /* handle request from one specifig player, - * the hash is set on a per game base, so first just handle this game + * the hash is set on a per game base, so first just handle this game * perhaps also show links to other games in a sidebar */ @@ -177,6 +173,9 @@ else if(isset($_REQUEST["me"])) $myname = DB_get_name_by_hash($me); $mystatus = DB_get_status_by_hash($me); + + /* get game id */ + $gameid = DB_get_gameid_by_hash($me); switch($mystatus) { @@ -273,28 +272,37 @@ else if(isset($_REQUEST["me"])) /* only set this after all poverty, etc. are handeled*/ DB_set_hand_status_by_hash($me,'play'); + + /* check if the game can start */ + $userids = DB_get_all_userid_by_gameid($gameid); + $done=1; + foreach($userids as $user) + if(DB_get_hand_status_by_userid($user)!='play') + $done=0; + + if($done) + DB_set_game_status_by_gameid($gameid,'play'); + break; case 'play': + case 'gameover': /* gameover and play, so that the tricks are visible for both */ display_news(); display_status(); - - /* get game id */ - $gameid = DB_get_gameid_by_hash($me); - + /* get trick ids */ - $result = mysql_query("SELECT hand_card.card_id as card,". - " user.fullname as name,". - " hand.position as position,". - " play.sequence as sequence, ". - " hand.hash as hash, ". - " trick.id ". + $result = mysql_query("SELECT Hand_Card.card_id as card,". + " User.fullname as name,". + " Hand.position as position,". + " Play.sequence as sequence, ". + " Hand.hash as hash, ". + " Trick.id ". "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 User ON user.id=hand.user_id ". - "WHERE trick.game_id='".$gameid."' ". - "ORDER BY trick.id,sequence ASC"); + "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 User ON User.id=Hand.user_id ". + "WHERE Trick.game_id='".$gameid."' ". + "ORDER BY Trick.id,sequence ASC"); $trickNR = 1; @@ -388,9 +396,10 @@ else if(isset($_REQUEST["me"])) $card = $_REQUEST["card"]; $handid = DB_get_handid_by_hash($me); - /* check if we have card */ + /* 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 hand_id='$handid' AND card_id=".DB_quote_smart($card)); + $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]; @@ -409,10 +418,45 @@ else if(isset($_REQUEST["me"])) display_card($card); echo "</div>\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<br />"; + /* 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 <br />"; + if($debug) + echo "DEBUG:<a href=\"index.php?me=".DB_get_hash_from_game_and_pos($gameid,$next). + "\"> next player </a> <br />\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! <br />\n"; + echo "Hello ".$myname.", it's your turn! <br />\n"; echo "Your cards are: <br />\n"; echo "<form action=\"index.php?me=$me\" method=\"post\">\n"; foreach($mycards as $card) @@ -442,19 +486,40 @@ else if(isset($_REQUEST["me"])) </form> <?php } - else + else if($mystatus=='play') { echo "Your cards are: <br />\n"; foreach($mycards as $card) display_card($card); } echo "</div>\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...<br />\n"; - echo "TODO: suggest a new game with the next person as dealer <br />\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...<br />\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 "<form action=\"index.php\" methog=\"post\">\n"; + echo " <input type=\"hidden\" name=\"PlayerA\" value=\"".($names[1])."\" />\n"; + echo " <input type=\"hidden\" name=\"PlayerB\" value=\"".($names[2])."\" />\n"; + echo " <input type=\"hidden\" name=\"PlayerC\" value=\"".($names[3])."\" />\n"; + echo " <input type=\"hidden\" name=\"PlayerD\" value=\"".($names[0])."\" />\n"; + echo " <input type=\"hidden\" name=\"followup\" value=\"".($gameid)."\" />\n"; + echo " <input type=\"submit\" value=\"keep playing\" />\n"; + echo "</form>\n"; + } break; default: echo "error in testing the status"; |