`
_jia_shun
  • 浏览: 27220 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

C++大学基础教程_6_8枚举简介(博彩游戏实例)

 
阅读更多
/*
	博弈掷骰子的模拟啊哈哈哈哈哈哈哈哈哈哈哈哈

	掷双骰游戏:
	玩家掷两个骰子。每个骰子有六面,分别含有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;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics