问题的提出:赌博游戏世界无所不在,其中“掷双骰”游戏家喻户晓其游戏规则如下:每次掷两个骰子,每个骰子的6面上分别标有1、2、3、4、5、6,两个骰子停止滚动后,计算其向上的点数之和。假如首次掷出后点数之和为7和11,那么玩家赢(庄家输)。假如首次掷出后点数之和为2、3或12,那么玩家输(庄家赢)。假如首次掷出后点数之和为4、5、6、8、9和10,那么这些数字会立即成为玩家的“目标点”(即下次如遇到此点数为赢)。要想赢,必须不断地掷两个骰子,直到点数与目标点数相等为止,但在这之前,假如不幸地掷出7点,那么玩家马上就输,试编程模拟此游戏。
分析:这题是一个简单的逻辑问题,需要了解c++中随机数是怎么生成的(见前一篇博客),然后理解整个游戏的游戏规则,就可以编写程序了。
代码:
// test15_.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"*********************GAME START*******************"<<endl;
srand((unsigned)time(NULL));
int a,b,flag=0;
int sum;
int goal;
a=rand()%6+1;
b=rand()%6+1;
sum=a+b;
cout<<a<<" + "<<b<<" = "<<sum<<endl;
//The first round
switch (sum)
{
case 2:
case 3:
case 12:
flag=1;
cout<<"The player won the game!"<<endl;
break;
case 7:
case 11:
flag=1;
cout<<"The banker won the game!"<<endl;
break;
default:
flag=0;
goal=sum;
cout<<"The target is "<<goal<<endl;
break;
}
while (flag==0)
{
a=rand()%6+1;
b=rand()%6+1;
sum=a+b;
if (sum==7)
{
flag=1;
cout<<a<<" + "<<b<<" = "<<sum<<endl;
cout<<"The banker won the game!"<<endl;
}
else if(sum==goal)
{
flag=1;
cout<<a<<" + "<<b<<" = "<<sum<<endl;
cout<<"The player won the game!"<<endl;
}
else
{
flag=0;
cout<<a<<" + "<<b<<" = "<<sum<<endl;
continue;
}
}
cout<<"*********************GAME OVER********************"<<endl;
system("pause");
return 0;
}
结果: