C++ 掷骰子课程设计(含源码)

一、题目要求:

 每个骰子有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;
}

四、结果演示:

有需要的课设题目或小程序设计,可以在评论区打出。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿木呀

创作不易,感谢鼓励,嘻嘻☺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值