C++編寫的21點小游戲代碼

wdey 9年前發布 | 9K 次閱讀 C/C++

#include<iostream>

include<string>

include<time.h>

using namespace std;

define NUM 1000

int j=2;//定義為全局變量 int randNum[NUM];//因為rand()函數有一定的缺陷,所以在程序中定義了randNum數組來存放隨機數 //即使使用了種子函數srand(),由于程序運行時間比較短,也不太好設置種子。因此

使用數組來存放隨機數

class Poker { private: int poker[53]; //撲克 int pokerValue[53]; //撲克代表的數值 string pokerName[53]; //撲克名

int money; //玩家錢數
int bet; //玩家的賭注

int pokerF[5]; //玩家手中的牌 F:Farmer L:Landlord int pokerL[5]; //莊家手中的牌 F:Farmer L:Landlord int pokerNumF; //玩家手中的牌數 int pokerNumL; //莊家手中的牌數 public: Poker(); //構造函數,對牌初始化 void initPoker(); //洗牌,在每輪游戲開始前進行 string getPokerF(); //用字符串的形式返回玩家的牌 string getPokerL(); //用字符串的形式返回莊家的牌 int getSumF(); //返回玩家牌的點數,用以判斷是否超過21點 int getSumL(); //返回莊家牌的點數 void farmerAsk(); //玩家要牌 void landlordAsk(); //莊家要牌 void inputBet(); //玩家輸入賭注 void newGame(); //開始新游戲 void landlordProcess(); //在玩家不要牌時進行處理

};

Poker::Poker() {

poker[0]=0; for(int i=1;i<=13;i++) //| { //| poker[i]=i; //|用構造函數對牌初始化 poker[i+13]=i; //| poker[i+26]=i; //| poker[i+39]=i; //| }//for結束

pokerValue[0]=0; for(i=1;i<=52;i++) { if(poker[i]<=10) pokerValue[i]=poker[i]; else pokerValue[i]=10; }//for結束

pokerName[0]=""; for(i=0;i<4;i++) { pokerName[1+13i]="A"; pokerName[2+13i]="2"; pokerName[3+13i]="3"; pokerName[4+13i]="4"; pokerName[5+13i]="5"; pokerName[6+13i]="6"; pokerName[7+13i]="7"; pokerName[8+13i]="8"; pokerName[9+13i]="9"; pokerName[10+13i]="10"; pokerName[11+13i]="J"; pokerName[12+13i]="Q"; pokerName[13+13*i]="K"; }//for結束

money=200; //玩家開始玩游戲時錢數是200 bet=0;

for(i=0;i<5;i++) { pokerF[i]=0; //|對pokerOfFarmer初始化 pokerL[i]=0; //|對pokerOfLandlord初始化 }

pokerNumF=0;//玩家手中的牌數初始化為0 pokerNumL=0;//莊家手中的牌數初始化為0

srand((int)time(0)); for(i=0;i<NUM;i++) { randNum[i]=rand()*51/32767+1;//產生隨機數數組 }

}//構造函數Poker()結束 void Poker::initPoker() { cout<<"新一局游戲開始,開始洗牌>>>>>"<<endl;

pokerF[0]=randNum[j++]; //產生1-52的隨機數 pokerF[1]=randNum[j++]; //產生1-52的隨機數 pokerL[0]=randNum[j++]; //產生1-52的隨機數 pokerL[1]=randNum[j++]; //產生1-52的隨機數

pokerNumF=2; pokerNumL=2;

cout<<"洗牌完成,你的牌為:"<<getPokerF()<<endl; }//void Poker::initPoker()結束

string Poker::getPokerF()//用字符串的形式返回玩家的牌 { int i; string result="";

for(i=0;i<pokerNumF;i++) result=result+pokerName[pokerF[i]]+" ";

return result; }//string Poker::getPokerF()結束

string Poker::getPokerL()//用字符串的形式返回莊家的牌 { int i; string result="";

for(i=0;i<pokerNumL;i++) result=result+pokerName[pokerL[i]]+" ";

return result; }//string Poker::getPokerL()結束

int Poker::getSumF() //返回玩家的總點數 { int result=0;

for(int i=0;i<pokerNumF;i++) result=result+pokerValue[pokerF[i]];

return result; }

int Poker::getSumL()//返回莊家的總點數 {

int result=0;

for(int i=0;i<pokerNumL;i++) result=result+pokerValue[pokerL[i]];

return result; }

void Poker::farmerAsk() { if(pokerNumF>=5) { cout<<"你的牌數已夠5張,不能再要牌了"<<endl; landlordProcess(); } else { pokerF[pokerNumF++]=randNum[j++]; //產生1-52的隨機數 cout<<"你的牌為:"<<getPokerF()<<endl; if(getSumF()>21) { cout<<"你撐死了,你輸了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已經輸光了,哈哈"<<endl; cout<<"游戲結束"<<endl; exit(0); } inputBet(); initPoker(); } else if(getSumF()==21) { landlordProcess(); } } }

void Poker::landlordAsk() { if(pokerNumL>=5) { if(getSumF()>getSumL()) { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"你贏了,你贏了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } else if(getSumF()==getSumL()) { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"平手"<<endl; inputBet(); initPoker(); } else if(getSumF()<getSumL()) { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"你輸了,你輸了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已經輸光了,哈哈"<<endl; cout<<"游戲結束"<<endl; exit(0); } inputBet(); initPoker(); } } else { pokerL[pokerNumL++]=randNum[j++]; //產生1-52的隨機數 if(getSumL()>21) { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"莊家撐死了,你贏了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } else landlordProcess(); } } void Poker::inputBet() { cout<<"你現在有"<<money<<"元,請輸入賭注:"; do { cin>>bet; if(bet>money) cout<<"笨蛋,你沒那么多錢,少來,重新輸入吧:"; }while(bet>money);

}

void Poker::newGame() { inputBet(); initPoker(); cout<<"你得到的牌為:"<<getPokerF()<<endl; }

void Poker::landlordProcess() { if(getSumL()>=17) { if(getSumL()>getSumF())
{ cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"莊家獲勝,你輸了"<<bet<<"元"<<endl; money=money-bet; if(money<=0) { cout<<"你已經輸光了,哈哈"<<endl; cout<<"游戲結束"<<endl; exit(0); } inputBet(); initPoker(); } else if(getSumF()==getSumL()) { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"本次游戲平手"<<endl; inputBet(); initPoker(); } else { cout<<"莊家的牌為"<<getPokerL()<<endl; cout<<"你贏了,你贏了"<<bet<<"元"<<endl; money=money+bet; inputBet(); initPoker(); } } else { landlordAsk(); } }

int main() { int choose=1; Poker poker; cout<<"** 歡迎玩二十一點游戲 **"<<endl<<endl; poker.inputBet(); poker.initPoker(); //洗牌

while(choose==1||choose==2||choose==3||choose==4) { cout<<"1.要牌 2.不要牌 3.重新開始 4.退出 >>請輸入數字選擇操作:"; cin>>choose; if(choose==1) poker.farmerAsk(); else if(choose==2) poker.landlordProcess(); else if(choose==3) poker.newGame(); else if(choose==4) exit(0); }

return 0; }//main函數結束</pre>

 本文由用戶 wdey 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!