一、题目要求:
每个骰子有6个面,点数为1、2、3、4、5、6。每轮掷2次骰子,如果和数为7或11则为胜,和数为2、3、12则为负。如果和数为其他值,则将此值作为游戏点数,继续掷骰子,直到两子之和为该值,即获得胜利。如果在之前两子之和为7或投掷次数超过6,则结果为负。
(先看一下原理,如果需要的游戏规则和上面不同,可以自行改写,博主有在源码中标注位置)
二、流程图:
先上图理解一下原理
(需要源码请到主页下载)
三、代码部分(工程文件在主页,可下载)
1. dice.h 骰子游戏头文件(包含了骰子游戏会用到的所有变量和函数)
#pragma once
#include <iostream>
using namespace std;
typedef enum {WIN,LOSE,PLAYING} GameStatus;
//用一个头文件封装骰子游戏的各类数据和玩法
class Dice
{
//游戏数据
private:
int numOfWin; //胜利次数
int numOfLose; //失败次数
int numOfPlaying; //平局次数
int numOfRollDice; //单次投掷次数
int numOfGame; //游戏次数
int selection; //主菜单选项
int myPoint; //点数
//游戏功能函数
int MainMenu(); //显示主菜单
int RollDice(); //模拟掷骰子一次
void GameRules(); //显示游戏规则
void Show(); //显示游戏结果
public:
Dice(); //构造函数
//~Dice() {}; //析构函数
void Game(); //进行一次骰子游戏
};
Dice::Dice() {
numOfWin = 0;
numOfLose = 0;
numOfPlaying = 0;
numOfRollDice = 0;
numOfGame = 0;
cout << "————————————欢迎来到掷骰子游戏!————————————" << endl;
}
int Dice::RollDice()
{
//定义三个整数分别表示点数之和、点数1、点数2
int sum;
int Dice1;
int Dice2;
numOfRollDice++;
Dice1 = 1 + rand() % 6;
Dice2 = 1 + rand() % 6;
sum = Dice1 + Dice2;
cout << endl << "********************" << endl;
cout << "-----点数1:" << Dice1 << "-----" << endl;
cout << "-----点数2:" << Dice2<< "-----" << endl;
cout << "-----总点数:" << sum << "-----" << endl;
cout << "********************" << endl;
return sum;
}
//打印游戏规则
void Dice::GameRules() {
cout << "游戏规则: " << endl;
cout << " 每个骰子有6个面,点数为1、2、3、4、5、6。每轮掷2次骰子," << endl;
cout << "如果和数为7或11则为胜,和数为2、3、12则为负。如果和数为其他" << endl;
cout << "值,则将此值作为游戏点数,继续掷骰子,直到两子之和为该值,即" << endl;
cout << "获得胜利。如果在之前两子之和为7,则结果为负。" << endl;
}
//显示主菜单
int Dice::MainMenu() {
while (true) {
myPoint = 0;
cout << endl << "请输入你的选择(1、开始游戏;2、游戏规则;3、退出游戏):" << endl;
cin >> selection;
if (selection != 1 && selection != 2 && selection != 3) //若输入不是 1,2,3 重新输入
{
cout << "请用1,2,3回答" << endl;
continue;//继续
}
break;
}
return selection;
}
void Dice::Game() {
int Mode = 1;
int sum;
GameStatus status;
srand(time(0)); //更新随机数种子
selection = MainMenu();
//只要选择不是3,就循环执行掷骰子游戏
while (selection != 3) {
//选择为1,开始掷骰子
if (selection == 1)
{
sum = RollDice();
//两种模式,第一种是两子之和为7或11获胜
if (Mode == 1) {
switch (sum)
{
case 7: //掷得7或11胜利
case 11:
status = WIN;
numOfWin++;
cout << endl << "恭喜你,该次掷骰子结果为胜!" << endl << endl;
numOfRollDice = 0;
break;
case 2: //投掷得2、3、12,输了
case 3:
case 12:
status = LOSE;
numOfLose++;//统计
cout << endl << "很遗憾,该次掷骰子结果为负!" << endl << endl;
numOfRollDice = 0;
break;
default: //投得其他数值,处于平局
status = PLAYING;
myPoint = sum;
Mode = 2;
numOfPlaying++;
cout << endl << "别气馁,该次掷骰子结果为平局!";
cout << "(点数更新:" << myPoint <<")" << endl << endl;
break;
}
}
//第二种模式,掷骰子的两子之和为更新的点数则为胜,超过六次或和为7则负
else if (Mode == 2) {
if (sum == myPoint) {
numOfWin++;
cout << "恭喜你,该次掷骰子结果为胜!" << endl << endl;
numOfRollDice = 0;
Mode = 1;
}
//如果两子之和为7,则该局为负
else if (sum == 7)
{
numOfLose++;
cout << endl << "很遗憾,该次掷骰子结果为负!" << endl << endl;
numOfRollDice = 0;
Mode = 1;
}
}
while (true) {
//投掷超过六次,则结果为负(如果你想更改最大投掷次数或去掉这个规则,可以修改数字或注释这一段)
if (numOfRollDice > 6) {
numOfLose++;
cout << "您已投掷超过六次,该局结果为负!" << endl << endl;
selection = MainMenu();
numOfRollDice = 0;
Mode = 1;
break;
}
cout << "是否再次掷骰子?(1继续,2返回)";
int GoOn;
cin >> GoOn;
cout << endl;
if (GoOn == 1) {
selection = 1;
break;
}
else if (GoOn == 2) {
selection = MainMenu();
break;
}
}
continue;
}
else if (selection == 2)
{
GameRules();
selection = MainMenu();
}
}
Show();
}
void Dice::Show()
{
cout << endl << "游戏次数:" << numOfRollDice << endl;
cout << "胜利次数:" << numOfWin << endl;
cout << "失败次数:" << numOfLose << endl;
cout << "平局次数:" << numOfPlaying << endl;
cout << "————————————————游戏结束,再见!——————————————" << endl;
}
2.Game.cpp(该游戏的主要执行文件)
#include <iostream>
#include "dice.h"
using namespace std;
int main() {
Dice diceGame;
diceGame.Game();
system("pause");
return 0;
}
四、结果演示:
有需要的课设题目或小程序设计,可以在评论区打出。