在最流行的博彩游戏中有一种名为“掷双骰”的骰子游戏,这种游戏在世界各地的娱乐场所和大街小巷非常受欢迎。游戏的规则很简单:
玩家掷两个骰子。每个骰子有六面,分别含有1、2、3、4、5、和6个点。掷完骰子后,计算两个朝上的面的点数之和。如果首次投掷点数总和是7或11,那么玩家赢;如果首次投掷的点数之和是2、3或者12,那么玩家输;如果首次投掷的点数之和是4、5、6、8、9、或者10,那么这个和就成为玩家的“目标点数”。要想要赢的话玩家必须连续地掷骰子直到点数与这个目标点数相同为止,即“得到了点数”。但在得到点数前,如果掷到的是7,就会输掉。
定义rollDice函数用于掷骰子和计算、打印店数和。
枚举类型Status,玩家在第一次或者后面掷骰子可能赢,也可能输,定义一个枚举类型gameStatus来定义游戏运行时的三种状态“CONTINUE继续, WON玩家赢, LOST玩家输”。
程序代码:
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
//定义掷骰子函数返回两骰子点数之和
unsigned int rollDice();
int main()
{
//枚举类型CONTINUE继续, WON玩家赢, LOST玩家输(即庄家赢)
enum Status{ CONTINUE, WON, LOST };
//以系统当前时间毫秒数作为种子产生随机数
srand(static_cast<unsigned int>(time(0)));
unsigned int myPoint = 0;
Status gameStatus = CONTINUE;//初始化游戏状态
unsigned int sumOfDice = rollDice();
switch(sumOfDice)
{
case 7:
case 11:
gameStatus = WON;
break;
case 2:
case 3:
case 12:
gameStatus = LOST;
break;
default:
gameStatus = CONTINUE;
myPoint = sumOfDice;
cout<<"Point is"<<myPoint<<endl;
break;
}
while(CONTINUE ==gameStatus)
{
sumOfDice = rollDice();
if(sumOfDice == myPoint)
gameStatus = WON;
else if(sumOfDice == 7)
gameStatus = LOST;
}
if(WON == gameStatus)
cout<<"Player wins"<<endl;
else
cout<<"Playerloses"<<endl;
}
unsigned int rollDice()//实现掷骰子
{
unsigned int die1 = 1+ rand() % 6;//产生第一个骰子数
unsigned int die2 = 1+ rand() % 6;//产生第二个骰子数
unsigned int sum = die1 + die2;
cout<<"Player rolled "<<die1<<"+ "<<die2
<<" = "<<sum<<endl;
return sum;
}
运行结果: