/*
博弈掷骰子的模拟啊哈哈哈哈哈哈哈哈哈哈哈哈
掷双骰游戏:
玩家掷两个骰子。每个骰子有六面,分别含有1、2、3、4、5和6个点。
掷完骰子后,就计算两个朝上的点数之和。如果首次投掷的点数综合等于7或者11的话
玩家胜利;如果首次投掷的点数之和是2、3或12的话,那么玩家输;
如果首次投掷的点数之和是4、5、6、8、9或10,那么这个和就成为玩家的
“点数”,想要继续赢的话,玩家必须连续掷骰子知道这个点数同这个目标点数相同为止。
即得到了“点数”,但是如果在得到点数之前,掷到的是7,那么就会输掉这盘游戏
*/
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <ctime>
using std::time;
#include <cstdlib>
using std::rand;
using std::srand;
int rollDice();//掷骰子,计算骰子的和,并且输出结果
int main()
{
//,枚举类型,存储玩家当前所处的状态
enum Status{ CONTINUE , WON , LOST };
int myPoint;//玩家的“点数”
Status gameStatus ;//创建一个游戏中的枚举对象
//为了获取随机数字时不用每次都输入种子,获取自己的时钟来得到种子值
srand(time(0));
int sumOfDice = rollDice();//第一次掷骰子得到的值
switch(sumOfDice)
{
case 7:
case 11:
gameStatus = WON; //玩家第一次掷骰子就获胜的情况 ,赋值语句!!!
break;
case 2:
case 3:
case 12:
gameStatus = LOST;
break;
default:
myPoint = sumOfDice;
gameStatus = CONTINUE;
cout << "Point is " << myPoint << endl;
break;
}
//while循环继续进行掷骰子游戏,并且进一步判断玩家是输还是赢
while(gameStatus == CONTINUE) //如果gameStatus仍然是CONTINUE,则循环继续,,,,
{
sumOfDice = rollDice();
if(sumOfDice == myPoint) //玩家赢得时候
gameStatus = WON;
if(sumOfDice == 7)//玩家输的时候
gameStatus = LOST;
}
if(gameStatus == WON) //不是赋值语句啊,少个等号你看看!!!
cout << "Player wins " << endl;
else
cout << "Player loses" << endl;
system("pause >> cout ");
return 0;
}
int rollDice()
{
//掷骰子所得的两个点数
int die1 = 1 + rand()%6 ;
int die2 = 1 + rand()%6 ;
int sum = die1 + die2;//骰子点数和
cout << "Player rolled " << die1 << " + " << die2 << " = " << sum <<endl;
return sum;
}
//计算这个游戏获胜的概率??
#include <iostream>
#include <ctime>
#include <cstdlib>
#define NUMBER 10000000
using namespace std;
int rollDice();//掷骰子计算骰子的和
int main()
{
enum Status{ CONTINUE , WON , LOST };//玩家当前所处的状态
int myPoint ;//玩家的“点数”,用于保存第一次玩家得到的点数!!第一次啊第一次
int winFrequency = 0;//玩家赢的次数
int loseFrequency = 0;//玩家输的次数
Status gameStatus ;
int sumOfDice;//玩家每次掷骰子得到的两面骰子总和
srand(time(0));//如果把这条语句写进for循环语句,则会出现永远为0的情况
//进行NUMBER次游戏,得到输赢次数,进而计算频率
for(int i=0;i<NUMBER;i++)
{
sumOfDice = rollDice();
switch(sumOfDice)
{
case 2:
case 3:
case 12:
gameStatus = LOST;
break;
case 7:
case 11:
gameStatus = WON;
break;
default:
gameStatus = CONTINUE;
myPoint = sumOfDice;
break;
}//end switch
//在第一次没赢没输的情况下游戏一直进行下去循环直到分出输赢
while(gameStatus == CONTINUE)
{
sumOfDice = rollDice();
if(sumOfDice == myPoint)
gameStatus = WON;
if(sumOfDice == 7)
gameStatus = LOST;
}//end while
//计算输赢次数
if(gameStatus == WON)
winFrequency++;
else
loseFrequency++;
}//end for
cout << "玩家在" << NUMBER << "次游戏中获胜的次数为:" << winFrequency
<< " , 输掉的次数为:" << loseFrequency << endl;
cout << "这个游戏的获胜概率大约为:" << static_cast<double>(winFrequency)/NUMBER
<< endl;
system("pause >> cout");
return 0;
}
int rollDice()
{
int face1 = 1 + rand()%6;
int face2 = 1 + rand()%6;
int sum = face1 + face2;
return sum;
}