C++編寫的21點小游戲代碼
#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>