per page, with , order by , clip by
Results of 0 - 1 of about 0 (0.001 sec.)
cgicc: cardgame.cpp Source File
@digest: bbb9922bbf6923001e7517a3f2920903
@id: 22690
@lang: en
@mdate: 2008-01-19T21:53:42Z
@size: 150646
@type: text/html
content-type: text/html; charset=iso-8859-1
#keywords: readedgame (492819), playerslist (480700), unorderedpioche (415276), vplayer (270779), pcard (246956), cardslist (214919), playedcards (134148), datasplayer (129194), itvectordata (123973), pgame (107262), isplaying (93040), actualcard (88422), piochecards (87487), mygame (86781), theplayer (85919), datasgame (78217), actualword (71599), pplayer (69825), playercounterelement (69558), carlist (60967), identifiant (54481), wordcounter (50877), vnbcards (42959), vret (38319), vcardscounter (36904), dgame (36340), vnbcardsqueue1 (36340), vnbcardsqueue2 (36340), vcardscounterq2 (36340), itvectordata2 (36340), aleatoire (20377), infile (19998)
Main Page Namespaces Classes Files Related Pages File List File Members cardgame.cpp Go to the documentation of this file. 00001 /* -*-mode:c++; c-file-style: "gnu";-*- */ 00002 /* 00003 * $Id: cardgame_8cpp-source.html,v 1.2 2008/01/19 21:53:42 sebdiaz Exp $ 00004 * 00005 * Copyright (C) 2007 Sebastien DIAZ <sebastien.diaz@gmail.com> 00006 * Part of the GNU cgicc library, http://www.gnu.org/software/cgicc 00007 * 00008 * This library is free software; you can redistribute it and/or 00009 * modify it under the terms of the GNU Lesser General Public 00010 * License as published by the Free Software Foundation; either 00011 * version 3 of the License, or (at your option) any later version. 00012 * 00013 * This library is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 * Lesser General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public 00019 * License along with this library; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 00021 */ 00022 00030 #include <iostream> 00031 #include <vector> 00032 #include <iterator> 00033 #include <string> 00034 #include <cstdlib> 00035 #include <ctime> 00036 #include <sstream> 00037 #include <fstream> 00038 #include <queue> 00039 00040 #include " cgicc/CgiDefs.h " 00041 #include " cgicc/Cgicc.h " 00042 #include " cgicc/HTTPHTMLHeader.h " 00043 #include " cgicc/HTMLClasses.h " 00044 #include " cgicc/HTTPCookie.h " 00045 #define COOKIE_NAME "ELPIELOJUEGO" 00046 #define COOKIE_FILE_NAME "sessions.tmp" 00047 #define GAME_FILE_NAME "games.tmp" 00048 #define MAX_GAME 10 00049 00050 using namespace std; 00051 using namespace cgicc; 00052 00053 00054 00061 struct datasplayer 00062 { 00067 vector <string > * cardsList ; 00068 00072 string identifiant ; 00073 00077 bool isPlaying ; 00078 00082 int points ; 00083 00087 string actualCard ; 00088 }; 00089 00090 00096 struct datasgame 00097 { 00102 vector <datasplayer *> * playersList ; 00103 00107 vector<string> * playedCards ; 00108 00112 vector<string> * piocheCards ; 00113 00114 }; 00115 00120 namespace CardGameTools 00121 { 00134 string convertStructToString ( datasplayer *pPlayer) 00135 { 00136 00137 std::vector<string>::iterator itVectorData; 00138 stringstream buffer; 00139 buffer <<pPlayer-> identifiant << "::" ; 00140 for (itVectorData = pPlayer-> cardsList ->begin(); itVectorData != pPlayer-> cardsList ->end(); itVectorData++) 00141 { 00142 00143 buffer << *itVectorData; 00144 if (itVectorData != pPlayer-> cardsList ->end()) 00145 { 00146 buffer << "||" ; 00147 00148 } 00149 } 00150 00151 //Global Separator 00152 00153 return buffer.str(); 00154 } 00155 00168 datasplayer * convertStringToStuct ( string pPlayer) 00169 { 00170 datasplayer *datas= new datasplayer ; 00171 char *carList=( char *)pPlayer.c_str(); 00172 int wordCounter=0; 00173 string word; 00174 stringstream actualWord; 00175 for ( unsigned int i=0;i<pPlayer.size();i++) 00176 { 00177 if (i+1<pPlayer.size()) 00178 if (carList[i]== ':' &&carList[i+1]== ':' ) 00179 { 00180 word=actualWord.str(); 00181 //first , the player name 00182 if (wordCounter==0) 00183 { 00184 //first is no data word 00185 } 00186 else 00187 if (wordCounter==1) 00188 { 00189 datas-> identifiant =word; 00190 } else 00191 { 00192 datas-> cardsList ->push_back(word); 00193 } 00194 wordCounter++; 00195 actualWord.clear(); 00196 i++; 00197 } else { 00198 actualWord <<carList[i]; 00199 } 00200 } 00201 00202 00203 return datas; 00204 } 00205 00214 string getNUMCookie (std::vector< HTTPCookie > pCookieVector) 00215 { 00216 00217 if (pCookieVector.size()== 0) 00218 { 00219 00220 return "" ; 00221 } 00222 std::vector<HTTPCookie>::iterator itVectorData; 00223 for (itVectorData = pCookieVector.begin(); itVectorData != pCookieVector.end(); itVectorData++) 00224 { 00225 00226 HTTPCookie theCookie = *(itVectorData); 00227 00228 if (theCookie.getName ().compare( COOKIE_NAME )==0) 00229 { 00230 return theCookie.getValue (); 00231 } 00232 } 00233 00234 00235 return "" ; 00236 } 00237 00245 string getValue (string pName) 00246 { 00247 00248 ifstream inFile; 00249 inFile.open( COOKIE_FILE_NAME ); 00250 if (!inFile) { 00251 ofstream outFile( COOKIE_FILE_NAME , ios::out); 00252 outFile.put( '\n' ); 00253 outFile.close(); 00254 inFile.open(COOKIE_FILE_NAME); 00255 } 00256 00257 // Lecture ligne a ligne 00258 while (inFile&&!inFile.eof ()) 00259 { 00260 char ligne[32000]; 00261 std::string s; 00262 00263 inFile.getline (ligne, sizeof (ligne)); 00264 s = ligne; 00265 00266 if (s.find (pName)!= string::npos) 00267 { 00268 00269 s.replace(0,pName.size(), "" ); 00270 inFile.close(); 00271 return s; 00272 } 00273 } 00274 inFile.close(); 00275 return "" ; 00276 00277 } 00278 00286 string getFileGame (string pName) 00287 { 00288 00289 ifstream inFile; 00290 inFile.open( GAME_FILE_NAME ); 00291 if (!inFile) { 00292 ofstream outFile( GAME_FILE_NAME , ios::out); 00293 outFile.put( '\n' ); 00294 outFile.close(); 00295 inFile.open(GAME_FILE_NAME); 00296 } 00297 // Lecture ligne a ligne 00298 while (inFile&&!inFile.eof ()) 00299 { 00300 char ligne[32000]; 00301 std::string s; 00302 00303 inFile.getline (ligne, sizeof (ligne)); 00304 s = ligne; 00305 00306 if (s.find (pName)!= string::npos) 00307 { 00308 00309 inFile.close(); 00310 return s; 00311 } 00312 } 00313 inFile.close(); 00314 return "" ; 00315 00316 } 00317 00324 datasgame * getGame (string pName) 00325 { 00326 00327 datasgame *dgame= new datasgame ; 00328 dgame-> playersList = new vector<datasplayer*>; 00329 00330 00331 string vGame= getFileGame (pName); 00332 if (vGame.compare( "" )==0) 00333 { 00334 return NULL; 00335 } 00336 00337 00338 00339 char *carList=( char *)vGame.c_str(); 00340 int wordCounter=0; 00341 string word; 00342 stringstream actualWord; 00343 int vNBPLayers=0; 00344 int playerCounter=0; 00345 int playerCounterElement=0; 00346 int vNBCards=0; 00347 int vCardsCounter=0; 00348 vector <string > *cardsList= new vector<string>; 00349 string identifiant; 00350 string actualCard; 00351 bool isPlaying= false ; 00352 int points; 00353 00354 int vNBCardsQueue1=0; 00355 int vCardsCounterQ1=0; 00356 int vNBCardsQueue2=0; 00357 int vCardsCounterQ2=0; 00358 bool vCountedCardsQ1; 00359 bool vCountedCardsQ2; 00360 vCountedCardsQ1= false ; 00361 vCountedCardsQ2= false ; 00362 vector <string > *queue1= new vector<string>; 00363 dgame-> playedCards =queue1; 00364 00365 vector <string > *queue2= new vector<string>; 00366 dgame-> piocheCards =queue2; 00367 00368 for ( unsigned int i=0;i<vGame.size();i++) 00369 { 00370 if (i+1<vGame.size()) 00371 if (carList[i]== ':' &&carList[i+1]== ':' ) 00372 { 00373 00374 word=actualWord.str(); 00375 00376 00377 00378 //first , NB Players Value 00379 if (wordCounter==0) 00380 { 00381 00382 vNBPLayers=atoi(word.c_str()); 00383 } else 00384 { 00385 //Add of a player 00386 if (playerCounter<vNBPLayers) 00387 { 00388 00389 //In first the name 00390 if (playerCounterElement==0) 00391 { 00392 00393 identifiant=word; 00394 } 00395 if (playerCounterElement==1) 00396 { 00397 00398 isPlaying=(word.compare( "1" )==0)? true : false ; 00399 } 00400 if (playerCounterElement==2) 00401 { 00402 00403 points=atoi(word.c_str()); 00404 } 00405 if (playerCounterElement==3) 00406 { 00407 00408 actualCard=word; 00409 } 00410 if (playerCounterElement==4) 00411 { 00412 00413 vNBCards=atoi(word.c_str()); 00414 } 00415 if (playerCounterElement>=5&&vCardsCounter<vNBCards) 00416 { 00417 00418 cardsList->push_back(word); 00419 vCardsCounter++; 00420 } 00421 if (vCardsCounter==vNBCards&&playerCounterElement>=5) 00422 { 00423 00424 datasplayer *vPlay= new datasplayer ; 00425 00426 vPlay-> identifiant =identifiant; 00427 vPlay-> points =points; 00428 vPlay-> isPlaying =isPlaying; 00429 vPlay-> cardsList =cardsList; 00430 vPlay-> actualCard =actualCard; 00431 dgame-> playersList ->push_back(vPlay ); 00432 playerCounter++; 00433 vCardsCounter=0; 00434 playerCounterElement=0; 00435 00436 cardsList= new vector <string >; 00437 00438 00439 } else {playerCounterElement++; } 00440 00441 00442 } 00443 else 00444 { //Saved queue 00445 00446 if (vNBCardsQueue1==0&&!vCountedCardsQ1) 00447 { 00448 vNBCardsQueue1=atoi(word.c_str()); 00449 vCountedCardsQ1= true ; 00450 00451 00452 } else 00453 { 00454 00455 if (vCardsCounterQ1<vNBCardsQueue1) 00456 { 00457 00458 queue1->push_back(word); 00459 00460 vCardsCounterQ1++; 00461 } else 00462 if (!vCountedCardsQ2&&vNBCardsQueue2==0&&vCardsCounterQ1==vNBCardsQueue1) 00463 { 00464 00465 vNBCardsQueue2=atoi(word.c_str()); 00466 vCountedCardsQ2= true ; 00467 //dgame->playedCards=queue1; 00468 00469 00470 } else 00471 if (vCardsCounterQ2<vNBCardsQueue2) 00472 { 00473 00474 queue2->push_back(word); 00475 00476 vCardsCounterQ2++; 00477 } 00478 if (vCardsCounterQ2==vNBCardsQueue2&&vCardsCounterQ2!=0) 00479 { 00480 00481 //dgame->piocheCards=queue2; 00482 00483 } 00484 00485 } 00486 } 00487 } 00488 00489 00490 wordCounter++; 00491 actualWord.str( "" ); 00492 actualWord.clear(); 00493 actualWord.flush(); 00494 00495 00496 i++; 00497 } else { 00498 00499 actualWord <<carList[i]; 00500 } 00501 } 00502 return dgame; 00503 00504 } 00505 00512 void writeValue (string pName,string pValue) 00513 { 00514 00515 ofstream outFile( COOKIE_FILE_NAME , ios::out|ios::app); 00516 00517 outFile << pName<< "::" <<pValue<< "\n" ; 00518 00519 outFile.close(); 00520 00521 } 00522 00529 void writeFileGame (string pName,string pValue) 00530 { 00531 00532 ifstream inFile; 00533 00534 //Find Index of the game 00535 inFile.open( GAME_FILE_NAME ,ios::in); 00536 if (!inFile) { 00537 00538 ofstream outFile( GAME_FILE_NAME , ios::out|ios::app); 00539 00540 00541 outFile << "\n" ; 00542 00543 outFile.close(); 00544 inFile.open(GAME_FILE_NAME,ios::in); 00545 } 00546 //read of the file 00547 if (inFile) { 00548 stringstream buffer; 00549 bool haveWrited; 00550 haveWrited= false ; 00551 while (inFile&&!inFile.eof ()) 00552 { 00553 char ligne[32000]; 00554 std::string s; 00555 inFile.getline (ligne, sizeof (ligne)); 00556 s = ligne; 00557 00558 if (s.find (pName)!= string::npos) 00559 { 00560 00561 buffer << pValue; 00562 00563 haveWrited= true ; 00564 00565 } 00566 else 00567 { 00568 buffer << s ; 00569 } 00570 00571 } 00572 inFile.close(); 00573 ofstream outFile( GAME_FILE_NAME , ios::out|ios::trunc); 00574 00575 00576 outFile << buffer.str(); 00577 if (!haveWrited) 00578 { 00579 outFile << pValue<< "\n" ; 00580 } 00581 00582 outFile.close(); 00583 00584 00585 } 00586 00587 00588 00589 } 00590 00591 00598 void writeGame ( datasplayer *pPlayer, datasgame *pGame) 00599 { 00600 00601 stringstream buffer; 00602 00603 datasplayer * itVectorData; 00604 buffer <<pGame-> playersList ->size()<< "::" ; 00605 for ( unsigned int i=0;i<pGame-> playersList ->size(); i++) 00606 { 00607 00608 itVectorData=pGame-> playersList ->at(i); 00609 00610 00611 std::vector<string>::iterator itVectorData2; 00612 buffer <<itVectorData-> identifiant << "::" <<((itVectorData-> isPlaying )? "1" : "0" )<< "::" <<itVectorData-> points << "::" <<itVectorData-> actualCard << "::" ; 00613 //NBCards 00614 buffer <<itVectorData-> cardsList ->size()<< "::" ; 00615 for (itVectorData2 = itVectorData-> cardsList ->begin(); itVectorData2 != itVectorData-> cardsList ->end(); itVectorData2++) 00616 { 00617 buffer <<*itVectorData2<< "::" ; 00618 00619 } 00620 00621 } 00622 00623 //NBCards played 00624 buffer <<pGame-> playedCards ->size()<< "::" ; 00625 for ( unsigned int i=0;i<pGame-> playedCards ->size();i++) 00626 { 00627 buffer <<pGame-> playedCards ->at(i)<< "::" ; 00628 00629 } 00630 00631 00632 00633 //NBCards in queue 00634 00635 buffer <<pGame-> piocheCards ->size()<< "::" ; 00636 00637 for ( unsigned int i=0;i<pGame-> piocheCards ->size();i++) 00638 { 00639 buffer <<pGame-> piocheCards ->at(i)<< "::" ; 00640 00641 00642 } 00643 00644 00645 00646 writeFileGame (pPlayer-> identifiant ,buffer.str()); 00647 00648 } 00649 00655 string generateUnicCookie () 00656 { 00657 00658 srand ( time(NULL) ); 00659 int nb_aleatoire; 00660 nb_aleatoire=(rand()%100)+1; 00661 00662 00663 stringstream buffer; 00664 buffer << nb_aleatoire<< "_" <<time(NULL); 00665 00666 string vNum=buffer.str() ; 00667 00668 return vNum; 00669 } 00670 00676 int countGame () 00677 { 00678 00679 ifstream inFile; 00680 inFile.open( GAME_FILE_NAME ); 00681 if (!inFile) { 00682 return 0; 00683 } 00684 int vNBLigne=0; 00685 00686 // Lecture ligne a ligne 00687 while (inFile&&!inFile.eof ()) 00688 { 00689 00690 string tempo; 00691 inFile >> tempo; 00692 00693 vNBLigne++; 00694 } 00695 00696 inFile.close(); 00697 00698 00699 return vNBLigne; 00700 00701 } 00702 00708 vector<string> * loadAndMixCards () 00709 { 00710 vector<string> UnorderedPioche; 00711 UnorderedPioche.push_back( "TA" ); 00712 UnorderedPioche.push_back( "TZ" ); 00713 UnorderedPioche.push_back( "T2" ); 00714 UnorderedPioche.push_back( "T3" ); 00715 UnorderedPioche.push_back( "T4" ); 00716 UnorderedPioche.push_back( "T5" ); 00717 UnorderedPioche.push_back( "T6" ); 00718 UnorderedPioche.push_back( "T7" ); 00719 UnorderedPioche.push_back( "T8" ); 00720 UnorderedPioche.push_back( "T9" ); 00721 UnorderedPioche.push_back( "TD" ); 00722 UnorderedPioche.push_back( "TR" ); 00723 UnorderedPioche.push_back( "TB" ); 00724 UnorderedPioche.push_back( "CA" ); 00725 UnorderedPioche.push_back( "CZ" ); 00726 UnorderedPioche.push_back( "C2" ); 00727 UnorderedPioche.push_back( "C3" ); 00728 UnorderedPioche.push_back( "C4" ); 00729 UnorderedPioche.push_back( "C5" ); 00730 UnorderedPioche.push_back( "C6" ); 00731 UnorderedPioche.push_back( "C7" ); 00732 UnorderedPioche.push_back( "C8" ); 00733 UnorderedPioche.push_back( "C9" ); 00734 UnorderedPioche.push_back( "CD" ); 00735 UnorderedPioche.push_back( "CR" ); 00736 UnorderedPioche.push_back( "CB" ); 00737 UnorderedPioche.push_back( "PA" ); 00738 UnorderedPioche.push_back( "PZ" ); 00739 UnorderedPioche.push_back( "P2" ); 00740 UnorderedPioche.push_back( "P3" ); 00741 UnorderedPioche.push_back( "P4" ); 00742 UnorderedPioche.push_back( "P5" ); 00743 UnorderedPioche.push_back( "P6" ); 00744 UnorderedPioche.push_back( "P7" ); 00745 UnorderedPioche.push_back( "P8" ); 00746 UnorderedPioche.push_back( "P9" ); 00747 UnorderedPioche.push_back( "PD" ); 00748 UnorderedPioche.push_back( "PR" ); 00749 UnorderedPioche.push_back( "PB" ); 00750 UnorderedPioche.push_back( "HA" ); 00751 UnorderedPioche.push_back( "HZ" ); 00752 UnorderedPioche.push_back( "H2" ); 00753 UnorderedPioche.push_back( "H3" ); 00754 UnorderedPioche.push_back( "H4" ); 00755 UnorderedPioche.push_back( "H5" ); 00756 UnorderedPioche.push_back( "H6" ); 00757 UnorderedPioche.push_back( "H7" ); 00758 UnorderedPioche.push_back( "H8" ); 00759 UnorderedPioche.push_back( "H9" ); 00760 UnorderedPioche.push_back( "HD" ); 00761 UnorderedPioche.push_back( "HR" ); 00762 UnorderedPioche.push_back( "HB" ); 00763 srand ( time(NULL) ); 00764 int nb_aleatoire; 00765 00766 vector<string> *vRet= new vector<string>; 00767 while (UnorderedPioche.size()>0) 00768 { 00769 00770 nb_aleatoire=(rand()%UnorderedPioche.size()); 00771 vRet->push_back(UnorderedPioche[nb_aleatoire]); 00772 UnorderedPioche.erase((UnorderedPioche.begin())+nb_aleatoire); 00773 } 00774 return vRet; 00775 00776 } 00777 00784 int calculateCard (string pCard) 00785 { 00786 00787 if (pCard.compare( "TA" )==0) return 10; 00788 if (pCard.compare( "TZ" )==0) return 14; 00789 if (pCard.compare( "T2" )==0) return 2; 00790 if (pCard.compare( "T3" )==0) return 3; 00791 if (pCard.compare( "T4" )==0) return 4; 00792 if (pCard.compare( "T5" )==0) return 5; 00793 if (pCard.compare( "T6" )==0) return 6; 00794 if (pCard.compare( "T7" )==0) return 7; 00795 if (pCard.compare( "T8" )==0) return 8; 00796 if (pCard.compare( "T9" )==0) return 9; 00797 if (pCard.compare( "TD" )==0) return 12; 00798 if (pCard.compare( "TR" )==0) return 13; 00799 if (pCard.compare( "TB" )==0) return 11; 00800 if (pCard.compare( "CA" )==0) return 10; 00801 if (pCard.compare( "CZ" )==0) return 14; 00802 if (pCard.compare( "C2" )==0) return 2; 00803 if (pCard.compare( "C3" )==0) return 3; 00804 if (pCard.compare( "C4" )==0) return 4; 00805 if (pCard.compare( "C5" )==0) return 5; 00806 if (pCard.compare( "C6" )==0) return 6; 00807 if (pCard.compare( "C7" )==0) return 7; 00808 if (pCard.compare( "C8" )==0) return 8; 00809 if (pCard.compare( "C9" )==0) return 9; 00810 if (pCard.compare( "CD" )==0) return 12; 00811 if (pCard.compare( "CR" )==0) return 13; 00812 if (pCard.compare( "CB" )==0) return 11; 00813 if (pCard.compare( "PA" )==0) return 10; 00814 if (pCard.compare( "PZ" )==0) return 14; 00815 if (pCard.compare( "P2" )==0) return 2; 00816 if (pCard.compare( "P3" )==0) return 3; 00817 if (pCard.compare( "P4" )==0) return 4; 00818 if (pCard.compare( "P5" )==0) return 5; 00819 if (pCard.compare( "P6" )==0) return 6; 00820 if (pCard.compare( "P7" )==0) return 7; 00821 if (pCard.compare( "P8" )==0) return 8; 00822 if (pCard.compare( "P9" )==0) return 9; 00823 if (pCard.compare( "PD" )==0) return 12; 00824 if (pCard.compare( "PR" )==0) return 13; 00825 if (pCard.compare( "PB" )==0) return 11; 00826 if (pCard.compare( "HA" )==0) return 10; 00827 if (pCard.compare( "HZ" )==0) return 14; 00828 if (pCard.compare( "H2" )==0) return 2; 00829 if (pCard.compare( "H3" )==0) return 3; 00830 if (pCard.compare( "H4" )==0) return 4; 00831 if (pCard.compare( "H5" )==0) return 5; 00832 if (pCard.compare( "H6" )==0) return 6; 00833 if (pCard.compare( "H7" )==0) return 7; 00834 if (pCard.compare( "H8" )==0) return 8; 00835 if (pCard.compare( "H9" )==0) return 9; 00836 if (pCard.compare( "HD" )==0) return 12; 00837 if (pCard.compare( "HR" )==0) return 13; 00838 if (pCard.compare( "HB" )==0) return 11; 00839 return 0; 00840 00841 } 00842 00851 datasgame * createGame ( datasplayer *vPlayer) 00852 { 00853 00854 datasplayer *p1= new datasplayer ; 00855 datasplayer *p2= new datasplayer ; 00856 datasplayer *p3= new datasplayer ; 00857 datasplayer *p4= new datasplayer ; 00858 p1-> identifiant =vPlayer-> identifiant ; 00859 p1-> actualCard = "" ; 00860 p1-> isPlaying = true ; 00861 p1-> points =0; 00862 p2-> identifiant = "FREE1" ; 00863 p2-> actualCard = "" ; 00864 p2-> isPlaying = false ; 00865 p2-> points =0; 00866 p3-> identifiant = "FREE2" ; 00867 p3-> actualCard = "" ; 00868 p3-> isPlaying = false ; 00869 p3-> points =0; 00870 p4-> identifiant = "FREE3" ; 00871 p4-> actualCard = "" ; 00872 p4-> isPlaying = false ; 00873 p4-> points =0; 00874 00875 datasgame *myGame= new datasgame ; 00876 myGame-> playersList = new vector <datasplayer *>; 00877 myGame-> playersList ->push_back(p1); 00878 myGame-> playersList ->push_back(p2); 00879 myGame-> playersList ->push_back(p3); 00880 myGame-> playersList ->push_back(p4); 00881 myGame-> playedCards = new vector<string>; 00882 00883 myGame-> piocheCards = loadAndMixCards (); 00884 00885 int vNbCards=myGame-> piocheCards ->size(); 00886 //distribution des cartes 00887 for ( unsigned int i=0;i<myGame-> playersList ->size();i++) 00888 { 00889 00890 myGame-> playersList ->at(i)->cardsList= new vector<string>; 00891 for ( unsigned int j=0;j<vNbCards/myGame-> playersList ->size();j++) 00892 { 00893 00894 myGame-> playersList ->at(i)->cardsList->push_back(myGame-> piocheCards ->front()); 00895 myGame-> piocheCards ->erase(myGame-> piocheCards ->begin()); 00896 } 00897 00898 } 00899 00900 00901 writeGame (p1,myGame); 00902 return myGame; 00903 } 00904 00910 void drawCards (vector <string> *cardList) 00911 { 00912 00913 00914 for ( unsigned int i=0;i<cardList->size();i++) 00915 { 00916 cout << "<div style=\"position:absolute;top:50;left:" <<i*150+150<< "\" >" ; 00917 cout << "<img border=\"0\" width=\"100\" src=\"images/" <<cardList->at(i)<< ".png\" alt=\"Carte [" <<i<< "]=" <<cardList->at(i)<< "\" />" <<endl; 00918 cout << "</div>" ; 00919 } 00920 cout << "<br />" ; 00921 } 00922 00931 void writeWinner ( datasplayer *vPlayer, datasgame *pGame) 00932 { 00933 unsigned int winner=0; 00934 int scoreOfTheWinner=0; 00935 unsigned int playerId=0; 00936 for ( unsigned int i=0;i<pGame-> playersList ->size();i++) 00937 { 00938 if (vPlayer-> identifiant .compare(pGame-> playersList ->at(i)->identifiant)==0) 00939 { 00940 playerId=i; 00941 } 00942 if (scoreOfTheWinner<pGame->playersList->at(i)->points) 00943 { 00944 winner=i; 00945 scoreOfTheWinner=pGame-> playersList ->at(i)->points; 00946 } 00947 } 00948 00949 cout << "<div style=\"position:absolute;top:50;left:" <<150<< "\" >" ; 00950 if (playerId==winner) 00951 { 00952 cout << "<h2>YOU WIN !</h2>" <<endl; 00953 cout << "<b>Your score is : " <<scoreOfTheWinner<< "</b>" <<endl; 00954 } else 00955 { 00956 cout << "<h2>YOU LOSS !</h2>" <<endl; 00957 cout << "<b>The winner is : " <<pGame-> playersList ->at(winner)->identifiant<< "</b>" <<endl; 00958 cout << "<b>The score is : " <<scoreOfTheWinner<< "</b>" <<endl; 00959 } 00960 cout << "</div>" ; 00961 00962 cout << "<br />" ; 00963 } 00964 00971 void drawInfos ( datasplayer *vPlayer) 00972 { 00973 cout << "<div style=\"position:absolute;width:140;top:50;left:" <<0<< "\" >" ; 00974 cout << "The latest Played Cards " ; 00975 cout << "</div>" ; 00976 cout << "<div style=\"width:140;position:absolute;top:180;left:" <<0<< "\" >" ; 00977 cout << "Actual Cards in the Game<br>You are the player :" <<vPlayer-> identifiant ; 00978 cout << "</div>" ; 00979 cout << "<div style=\"width:140;position:absolute;top:375;left:" <<0<< "\" >" ; 00980 cout << "Your Cards, you can choose one card." ; 00981 cout << "</div>" ; 00982 } 00983 00991 void drawPlayers ( datasgame *pGame) 00992 { 00993 00994 bool vFirst= false ; 00995 for ( unsigned int i=0;i<pGame-> playersList ->size();i++) 00996 { 00997 bool afficheFirst= false ; 00998 if (vFirst== false &&pGame-> playersList ->at(i)->actualCard.compare( "" )!=0) 00999 { 01000 vFirst= true ; 01001 afficheFirst= true ; 01002 } 01003 cout << "<div style=\"outline-color:" <<((afficheFirst== false )? "black" : "red" )<< ";outline-style:solid;outline-width:" <<((afficheFirst== false )? "1" : "2" )<< "px;position:absolute;top:180;left:" <<i*200+150<< "\" >" ; 01004 cout << "Name :" <<pGame-> playersList ->at(i)->identifiant<< "<br>" ; 01005 cout << "Score :" <<pGame-> playersList ->at(i)->points<< "<br>" ; 01006 01007 cout << "<img border=\"0\" width=\"100\" src=\"images/" <<pGame-> playersList ->at(i)->actualCard<< ".png\" alt=\" \" />" <<endl; 01008 if (afficheFirst== true ) 01009 { 01010 cout << "<br>The color to play" ; 01011 } 01012 cout << "</div>" ; 01013 } 01014 cout << "<br />" ; 01015 } 01016 01024 void drawCardInPlay ( datasgame *pGame) 01025 { 01026 01027 01028 for ( unsigned int i=0;i<pGame-> playedCards ->size();i++) 01029 { 01030 cout << "<div style=\"position:absolute;top:100;left:" <<i*110<< "\" >" ; 01031 cout << "<img border=\"0\" width=\"100\" src=\"images/" <<pGame-> playedCards ->at(i)<< ".png\" alt=\"Carte [" <<i<< "]=" <<pGame-> playedCards ->at(i)<< "\" />" <<endl; 01032 cout << "</div>" ; 01033 } 01034 cout << "<br />" ; 01035 } 01036 01044 void drawPlayerCards ( datasplayer *vPlayer) 01045 { 01046 sort (vPlayer-> cardsList ->begin(),vPlayer-> cardsList ->end()); 01047 cout << "<form name=\"cards\">" ; 01048 cout << "<input type=\"hidden\" name=\"actionner\" value=\"\">" ; 01049 cout << "<input type=\"hidden\" name=\"card\" value=\"\">" ; 01050 //affiche les cartes du joueurs 01051 for ( unsigned int i=0;i<vPlayer-> cardsList ->size();i++) 01052 { 01053 cout << "<div style=\"position:absolute;top:375;left:" <<i*20+150<< "\" >" ; 01054 if (vPlayer-> isPlaying == true ) 01055 { 01056 cout << "<a href=\"javascript:document.forms.cards.actionner.value='playcard';document.forms.cards.card.value='" <<vPlayer-> cardsList ->at(i)<< "';document.forms.cards.submit();\">" ; 01057 } 01058 cout << "<img border=\"0\" width=\"100\" src=\"images/" <<vPlayer-> cardsList ->at(i)<< ".png\" alt=\"Carte [" <<i<< "]=" <<vPlayer-> cardsList ->at(i)<< "\" />" <<endl; 01059 if (vPlayer-> isPlaying ) 01060 { 01061 cout << "</a>" ; 01062 } 01063 cout << "</div>" ; 01064 } 01065 cout << "</form>" ; 01066 } 01067 01080 void playACard ( datasplayer *vPlayer, datasgame *readedGame,string *card) 01081 { 01082 01083 01084 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01085 { 01086 01087 01088 if (readedGame-> playersList ->at(i)->identifiant.compare(vPlayer-> identifiant )==0) 01089 { 01090 01091 //vPlayer-> 01092 01093 for ( unsigned int j=0;j<readedGame-> playersList ->at(i)->cardsList->size();j++) 01094 { 01095 01096 01097 if (readedGame-> playersList ->at(i)->cardsList->at(j).compare(*card)==0) 01098 { 01099 if (readedGame-> piocheCards ==NULL) 01100 { 01101 readedGame-> piocheCards = new vector<string>; 01102 } 01103 //string carde=*card; 01104 //readedGame->piocheCards->push(carde); 01105 readedGame-> playedCards ->push_back(*card); 01106 readedGame-> playersList ->at(i)->actualCard=*card; 01107 readedGame-> playersList ->at(i)->cardsList->erase(readedGame-> playersList ->at(i)->cardsList->begin()+j); 01108 01109 break ; 01110 01111 } 01112 } 01113 01114 break ; 01115 } 01116 } 01117 01118 } 01119 01129 void turnPlayers ( datasplayer *vPlayer, datasgame *readedGame) 01130 { 01131 unsigned int IdTurn=0; 01132 vPlayer-> isPlaying = false ; 01133 //Find the player 01134 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01135 { 01136 01137 if (readedGame-> playersList ->at(i)->identifiant.compare(vPlayer-> identifiant )==0) 01138 { 01139 readedGame-> playersList ->at(i)->isPlaying= false ; 01140 IdTurn=i; 01141 break ; 01142 } 01143 } 01144 IdTurn++; 01145 if (IdTurn==readedGame-> playersList ->size()) 01146 { 01147 IdTurn=0; 01148 } 01149 01150 readedGame-> playersList ->at(IdTurn)->isPlaying= true ; 01151 01152 } 01153 01164 bool testCard ( datasplayer *vPlayer, datasgame *readedGame,string *card) 01165 { 01166 01167 //If first Card in the Bloxk 01168 if (readedGame-> playedCards ->size()==0) 01169 { 01170 return true ; 01171 } 01172 //take the color of the first Card 01173 string color=readedGame-> playedCards ->front().substr(0,1); 01174 //Test if it's the same color 01175 if (color.compare(card->substr(0,1))==0) 01176 { 01177 return true ; 01178 } 01179 01180 //Test if the player has a good colored card in his game 01181 vPlayer-> isPlaying = false ; 01182 //Find the player 01183 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01184 { 01185 01186 if (readedGame-> playersList ->at(i)->identifiant.compare(vPlayer-> identifiant )==0) 01187 { 01188 01189 for ( unsigned int j=0;j<readedGame-> playersList ->at(i)->cardsList->size();j++) 01190 { 01191 if (color.compare(readedGame-> playersList ->at(i)->cardsList->at(j).substr(0,1))==0) 01192 return false ; 01193 } 01194 return true ; 01195 01196 } 01197 } 01198 01199 return true ; 01200 01201 } 01202 01215 void IAPlay ( datasgame *readedGame, int pId) 01216 { 01217 01218 if (readedGame-> playersList ->at(pId)->cardsList->size()==0) 01219 { 01220 return ; 01221 } 01222 //If first Card in the Block 01223 if (readedGame-> playedCards ->size()==0) 01224 { 01225 playACard (readedGame-> playersList ->at(pId),readedGame,&readedGame-> playersList ->at(pId)->cardsList->front()); 01226 turnPlayers (readedGame-> playersList ->at(pId),readedGame); 01227 return ; 01228 } 01229 //If not take the color of the first Card 01230 string color=readedGame-> playedCards ->front().substr(0,1); 01231 01232 sort(readedGame-> playersList ->at(pId)->cardsList->begin(),readedGame-> playersList ->at(pId)->cardsList->end()); 01233 01234 //color Finded 01235 bool vColorOk= false ; 01236 int vId=0; 01237 for ( unsigned int i=0;i<readedGame-> playersList ->at(pId)->cardsList->size();i++) 01238 { 01239 unsigned int actualColor=color.compare(readedGame-> playersList ->at(pId)->cardsList->at(i).substr(0,1)); 01240 01241 01242 //If the next color is not the same the card is the max 01243 if (actualColor==0&&vColorOk== true ) 01244 { 01245 01246 vId=i; 01247 } 01248 if (actualColor!=0&&vColorOk== true ) 01249 { 01250 01251 break ; 01252 } 01253 01254 //If Color Finded 01255 if (actualColor==0&&vColorOk== false ) 01256 { 01257 01258 vColorOk= true ; 01259 vId=i; 01260 } 01261 } 01262 01263 playACard (readedGame-> playersList ->at(pId),readedGame,&readedGame-> playersList ->at(pId)->cardsList->at(vId)); 01264 turnPlayers (readedGame-> playersList ->at(pId),readedGame); 01265 } 01266 01275 void gameRules ( datasplayer *vPlayer, string *action, string * card) 01276 { 01277 01278 //search the player in a game 01279 01280 datasgame *readedGame= getGame (vPlayer-> identifiant ); 01281 01282 if (readedGame==NULL) 01283 { 01284 01285 //It' isn't in game 01286 //Count the number of games 01287 if ( countGame ()> MAX_GAME ) 01288 { 01289 cout << "THE PLAY TABLES ARE FULL!" <<endl; 01290 return ; 01291 } 01292 //Create a new Game for Four Player 01293 readedGame= createGame (vPlayer); 01294 01295 } 01296 01297 unsigned int thePlayer=0; 01298 //Find the player 01299 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01300 { 01301 01302 if (readedGame-> playersList ->at(i)->identifiant.compare(vPlayer-> identifiant )==0) 01303 { 01304 //vPlayer-> 01305 vPlayer-> cardsList =readedGame-> playersList ->at(i)->cardsList; 01306 vPlayer-> isPlaying =readedGame-> playersList ->at(i)->isPlaying; 01307 vPlayer-> points =readedGame-> playersList ->at(i)->points; 01308 thePlayer=i; 01309 break ; 01310 01311 } 01312 } 01313 01314 01315 //Gestion des actions de l'utilisateur 01316 int vResComp=action->compare( "playcard" ); 01317 01318 if ( vResComp==0 && vPlayer-> isPlaying == true ) 01319 { 01320 if ( testCard (vPlayer,readedGame,card)== true ) 01321 { 01322 playACard (vPlayer,readedGame,card); 01323 turnPlayers (vPlayer,readedGame); 01324 writeGame (vPlayer,readedGame); 01325 } 01326 else 01327 { 01328 cout << "<div style=\"position:absolute;top:50;left:" <<150<< "\" >" ; 01329 cout << "<b>You can not Play this card!</b><br>\n" ; 01330 cout << "</div>" ; 01331 } 01332 01333 } 01334 01335 //Tant que l'utilisateur n'a pas encore le droit de jouer on fait tourner l'IA 01336 unsigned int vNbTurns=0; 01337 while (vNbTurns<=readedGame->playersList->size()+1&&readedGame-> playersList ->at(thePlayer)->isPlaying== false ) 01338 { 01339 vNbTurns++; 01340 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01341 { 01342 if (readedGame-> playersList ->size()<=readedGame-> playedCards ->size()) 01343 { 01344 01345 break ; 01346 } 01347 if (i==thePlayer) 01348 { 01349 if (readedGame-> playersList ->at(thePlayer)->isPlaying== true ) 01350 { 01351 01352 break ; 01353 } 01354 } 01355 else 01356 { 01357 if (readedGame-> playersList ->at(i)->isPlaying== true ) 01358 { 01359 01360 IAPlay (readedGame,i); 01361 01362 } 01363 } 01364 } 01365 01366 } 01367 01368 vector <string> *lastPlayedCard= new vector<string>; 01369 //A end is finish?? 01370 if (readedGame-> playersList ->size()<=readedGame-> playedCards ->size()) 01371 { 01372 //Find the winner 01373 //The Winner is 01374 int vWiner=0; 01375 int theMax=0; 01376 int total=0; 01377 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01378 { 01379 string plCard=readedGame-> playersList ->at(i)->actualCard; 01380 readedGame-> playersList ->at(i)->isPlaying= false ; 01381 int cardValue= calculateCard (plCard); 01382 readedGame-> playersList ->at(i)->actualCard= "" ; 01383 int compCard=plCard.substr(0,1).compare(readedGame-> playedCards ->front().substr(0,1)); 01384 01385 01386 if (theMax<cardValue&&compCard==0) 01387 { 01388 theMax=cardValue; 01389 vWiner=i; 01390 01391 } 01392 01393 if (compCard==0) 01394 { 01395 total+=cardValue; 01396 } 01397 } 01398 01399 readedGame-> playersList ->at(vWiner)->isPlaying= true ; 01400 readedGame-> playersList ->at(vWiner)->points+=total; 01401 01402 //clear and add In Pioche 01403 01404 while (!readedGame-> playedCards ->empty()) 01405 { 01406 readedGame-> piocheCards ->push_back(readedGame-> playedCards ->front()); 01407 lastPlayedCard->push_back(readedGame-> playedCards ->front()); 01408 readedGame-> playedCards ->erase(readedGame-> playedCards ->begin()); 01409 } 01410 } 01411 if (readedGame-> playersList ->at(thePlayer)->isPlaying== true ) 01412 { 01413 vPlayer-> isPlaying = true ; 01414 } 01415 if (readedGame-> playersList ->at(thePlayer)->cardsList->size()!=0) 01416 { 01417 //Tant que l'utilisateur n'a pas encore le droit de jouer on fait tourner l'IA 01418 vNbTurns=0; 01419 01420 while (readedGame-> playersList ->at(thePlayer)->isPlaying== false ) 01421 { 01422 vNbTurns++; 01423 for ( unsigned int i=0;i<readedGame-> playersList ->size();i++) 01424 { 01425 if (i==thePlayer) 01426 { 01427 if (readedGame-> playersList ->at(thePlayer)->isPlaying== true ) 01428 01429 break ; 01430 } 01431 else 01432 { 01433 if (readedGame-> playersList ->at(i)->isPlaying== true ) 01434 { 01435 IAPlay (readedGame,i); 01436 } 01437 } 01438 } 01439 01440 } 01441 } 01442 if (readedGame-> playersList ->at(thePlayer)->isPlaying== true ) 01443 { 01444 vPlayer-> isPlaying = true ; 01445 } 01446 try { 01447 writeGame (vPlayer,readedGame); 01448 if (readedGame-> playersList ->at(thePlayer)->cardsList->size()!=0) 01449 { 01450 drawCards (lastPlayedCard); 01451 } 01452 else 01453 { 01454 writeWinner (vPlayer,readedGame); 01455 } 01456 drawPlayers (readedGame); 01457 //drawCardInPlay(readedGame); 01458 drawPlayerCards (vPlayer); 01459 drawInfos (vPlayer); 01460 } 01461 catch (std::exception &error) 01462 { 01463 cout << "Erreur:" <<error.what()<< "<br>\n" ; 01464 } 01465 01466 } 01467 } 01468 01469 using namespace CardGameTools; 01470 01478 int 01479 main ( int argc, 01480 char **argv) 01481 { 01482 try { 01483 Cgicc cgi; 01484 01485 // Get the name and value of the cookie to set 01486 const_form_iterator name = cgi. getElement ( "name" ); 01487 01488 const_form_iterator value = cgi. getElement ( "value" ); 01489 01490 const_form_iterator actionIn = cgi. getElement ( "actionner" ); 01491 const_form_iterator playedCard = cgi. getElement ( "card" ); 01492 string action; 01493 string card; 01494 01495 01496 if (actionIn!= cgi. getElements ().end() &&actionIn->getValue().empty() == false ) 01497 { 01498 action=actionIn->getValue(); 01499 01500 } 01501 if (playedCard!= cgi. getElements ().end() &&playedCard->getValue().empty() == false ) 01502 { 01503 card=playedCard->getValue(); 01504 01505 } 01506 string staticSession= "" ; 01507 01508 //get a static session 01509 if (argc>1) 01510 { 01511 01512 staticSession =argv[1]; 01513 01514 } 01515 01516 01517 // Send HTTP header 01518 01519 string vRet= getNUMCookie (cgi. getEnvironment (). getCookieList ()); 01520 01521 01522 if (vRet.compare( "" )==0&&staticSession.compare( "" )!=0) 01523 { 01524 01525 vRet=staticSession; 01526 } 01527 01528 if (vRet.compare( "" )==0&& getValue (vRet).compare( "" )==0) 01529 { 01530 01531 vRet= generateUnicCookie (); 01532 01533 cout << HTTPHTMLHeader () 01534 .setCookie( HTTPCookie ( COOKIE_NAME , vRet)); 01535 } 01536 else 01537 cout << HTTPHTMLHeader (); // Set up the HTML document 01538 01539 cout << html() << head(title( "Cgicc CardGame example" )) << endl; 01540 cout << body() << endl; 01541 01542 cout << "<H1>Card Game</H1>" ; 01543 cout << "<div style=\"position:absolute;top:5;left:" <<250<< "\"><form name=\"start\"><input type=\"hidden\" name=\"actionner\" value=\"start\"><a href=\"javascript:document.forms.start.submit();\">Start a new Game</a></form></div>" ; 01544 //if the are a cookie in the stock we parse data 01545 datasplayer *vPlayer; 01546 if ( getValue (vRet).compare( "" )!=0) 01547 { 01548 01549 vPlayer= convertStringToStuct ( getValue (vRet)); 01550 01551 } else 01552 { 01553 01554 vPlayer= new datasplayer ; 01555 srand ( time(NULL) ); 01556 01557 01558 stringstream buffer; 01559 buffer << "P" <<(rand()%1000)+1<< "_" <<(rand()%1000)+1; 01560 vPlayer-> identifiant =buffer.str(); 01561 01562 //We write a new empty value 01563 01564 writeValue (vRet, convertStructToString (vPlayer)); 01565 01566 } 01567 if (action.compare( "start" )==0) 01568 { 01569 writeFileGame (vPlayer-> identifiant , "" ); 01570 } 01571 01572 gameRules (vPlayer,&action,&card); 01573 01574 // Close the HTML document 01575 cout << body() << html(); 01576 01577 } 01578 catch (exception& e) { 01579 // handle any errors - omitted for brevity 01580 } 01581 } 01582 01583 GNU cgicc - A C++ class library for writing CGI applications Copyright © 1996 - 2004 Stephen F. Booth Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front Cover Texts, and with no Back-Cover Texts. Documentation generated Sat Jan 19 21:15:58 2008 for cgicc by doxygen 1.5.1 ...
http://www.gnu.org/savannah-checkouts/gnu/cgicc/doc/cardgame_8cpp-source.html - [detail] - [similar]
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 213370 documents and 1081692 words.