21点扑克牌游戏:
程序说明:该程序是模拟21点扑克牌游戏,玩家最多可以要5张牌,但是如果牌的点数之和超过21点,则自动出局,在不超过21点的情况下,玩家与庄家比牌的大小,大者为赢家
程序片段分析:
【1】头文件处:
#include<iostream> #include<cstdlib> #include<ctime> using namespace std;
cstdlib这个头文件里面,等价与stdlib,因为要生成随机数,需要调用函数rand和srand,
【2】之后定义了一个类class
class CCard { private: int naPip[5];//一共5张牌 int nNumber;//发了多少张牌 int nDollar;//有多少钱 int nGamble;//赌注 int nWin;//赢的局数 int nLose;//输的局数 int nDraw;//平局数 public: CCard();//构造函数初始化 void FirstPlayTwo();//最初两张牌 int GetNumber();//返回牌数 int GetPip();//返回点数 void DisplayPip();//显示全部牌面 void DisplayPip(int);//除了第一张,依次全部牌面点数(针对计算机的牌显示) void TurnPlay();//出一张牌 void Win();//赢了计算赌注 void Lose();//输了 void Draw();//平局 int SetGamble(int);//设置赌注 int GetMoney();//返回钱数 void DisplayInfo();//打印必要信息 int GetCurrentCard();//返回当前牌点数 };
这里有几个地方需要注意:第一私有数据里面包括了数组,第二,出现了这种东西
void DisplayPip();//显示全部牌面
void DisplayPip(int);//除了第一张,依次全部牌面点数(针对计算机的牌显示)
这是C++里面的重载,好象是
【3】比较重要的函数就是生成随机数;
首先初始化随机数种子用srand() 如何生成随机数,这里有解释http://www.6969g.com
【4】其次要注意的是这个声明 void Judge(CCard &cpu,CCard &player)//判断输赢
void Judge(CCard &cpu,CCard &player)//判断输赢
这里采用的是这个用途:变量的引用,例如
int a; int &b = a;//声明b是a的引用
&是引用声明符,并不代表地址,不要理解为:把a的值赋值给b的地址,声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值,b和a占内存中的同一个存储单元
【5】flag的引用也比较经典:在函数void Judge(CCard &cpu,CCard &player)//判断输赢中和主函数中都有应用:
while(chChoice == 'Y'||chChoice =='y') { do { cout<<"您现在有赌本:$"<<player.GetMoney(); cout<<"\n请下注(赌注不能超过赌本)"; cin>>nMoney; blLogic = player.SetGamble(nMoney); if(blLogic) cout<<"您的赌本不够,请重新下注!\n"; } while(blLogic); PlayTurn(cpu,player); cout<<"是否继续21点游戏(Y/N)?\n"; cin>>chChoice; }