/* 博弈掷骰子的模拟啊哈哈哈哈哈哈哈哈哈哈哈哈 掷双骰游戏: 玩家掷两个骰子。每个骰子有六面,分别含有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; }