投骰子的随机游戏
程序员文章站
2022-07-07 10:38:57
...
每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。 每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。 由rolldice函数负责模拟投骰子、计算和数并输出和数。
#include <iostream>
#include <cstdlib>
using namespace std;
//投骰子、计算和数、输出和数
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;
}
enum GameStatus { WIN, LOSE, PLAYING };
int main() {
int sum, myPoint;
GameStatus status;
unsigned seed;
cout << "Please enter an unsigned integer: ";
cin >> seed;//输入随机数种子
srand(seed);//将种子传递给rand()
sum = rollDice(); //第一轮投骰子、计算和数
switch (sum) {
case 7: //如果和数为7或11则为胜,状态为WIN
case 11:
status = WIN;
break;
case 2: //和数为2、3或12则为负,状态为LOSE
case 3:
case 12:
status = LOSE;
break;
default: //其它情况,游戏尚无结果,状态为PLAYING,记下点数,为下一轮做准备
status = PLAYING;
myPoint = sum;
cout << "point is " << myPoint << endl;
break;
}
while (status == PLAYING) { //只要状态仍为PLAYING,就继续进行下一轮
sum = rollDice();
if (sum == myPoint) //某轮的和数等于点数则取胜
status = WIN;
else if (sum == 7) //出现和数为7则为负
status = LOSE;
}
//当状态不为PLAYING时上面的循环结束,以下程序段输出游戏结果
if (status == WIN)
cout << "player wins" << endl;
else
cout << "player loses" << endl;
return 0;
}