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

3**.2  类的声明**


定义一个骰子游戏类DiceGame,其声明如下:

class DiceGame

{

Private

// 数据成员:

int numOfWin;    // 胜利数次

int numOfLose;    // 失败数次

int numOfTie; // 平局数次

// 辅助函数

int RollDice(); // 模拟投掷一次骰子

void Help(); // 获得帮助

void Show(); // 显示统计结果

public:

// 方法声明:

DiceGame(); // 无参数的构造函数

virtual ~DiceGame(){} // 析构函数

void Game ();      // 模拟游戏

};

定义随机数Rand类:

// 随机数类Rand

class Rand

{

public:

//  方法声明

static void SetRandSeed() { srand((unsigned)time(NULL)); }

// 设置当前时间为随机数种子

static int GetRand(int n) { return rand() % n; }

// 生成0 ~ n-1之间的随机数

//static int GetRand() { return rand(); } // 生成0 ~ n-1之间的随机数

};

**.主要功能的实现步骤******

===============================

1.获得帮助

玩家输入选择select为1,通过条件语句if(select==1)判断是否满足条件,然后再调用类的成员函数Help(),则显示帮助信息。

void DiceGame::Help() // 获得帮助

{

cout << "    游戏者每次投掷两颗骰子,每个骰子是一个正方体,有" << endl;

cout << “6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时” << endl;

cout << “,将每个骰子朝上的点的数相加,在第一次投掷骰时, 如果” << endl;

cout << “所得到的和为7或11,那么游戏者为赢得胜利; 如果所得到” << endl;

cout << “的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6” << endl;

cout << “、8、9或10,那么为游戏者的点数;如要想赢得胜利,必” << endl;

cout << “须继续投掷骰子,直到取得自已的点数为止, 但是如果投” << endl;

cout << “掷出的和为7或投掷6次仍未赚到该点数,则游戏者为输了.” << endl << endl;

}

2. 开始游戏

玩家输入选择select为2,在while循环中通过if(select2)语句判断是否符合条件,再调用类的成员函数RollDice()模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和,把RollDice()的返回值赋值给sum,再通过开关语句switch(sum)判断玩家第一手的输赢。若为平局,则该点数为玩家的点数,玩家可选择是否继续游戏if(UserSaysYes()),若玩家选择y,则可以再次投掷骰子again=RollDice(),掷自己的点数if(myPointagain)则胜利;若玩家先投掷出点数7既 else if(again==7)或者平局次数达到6次if(numOfTie == 6) ,则判断玩家为输了。

void DiceGame::Game()  // 模拟游戏

{

int select = 1;

int sum, myPoint;

GameStatus status;  // 游戏状态

Rand::SetRandSeed();  // 设置当前时间为随机数种子

Help();  // 获得帮助

while (select != 3)

{

cout << endl << endl << “请选择:” << endl;

cout << “1. 游戏规则” << endl;

cout << “2. 开始游戏” << endl;

cout << “3. 退出游戏” << endl;

cin >> select;         // 输入选择

if (select != 1 && select != 2 && select != 3) //若输入不是 1,2,3 重新输入

{

cout << “请用1,2,3回答” << endl;

continue;//继续

}

if (1)

{

while (select == 1)         //输入1,帮助

{

Help();

break;

}

if (select == 2)               //输入2

{

sum = RollDice();        //模拟掷骰子

switch (sum)

{

case 7:              //掷得7或11胜利

case 11:

status = WIN;

numOfWin++;

break;

case 2:                //投掷得2、3、12,输了

case 3:

case 12:

status = LOSE;

numOfLose++;//统计

break;

default:                   //投得其他数值,处于平局

status = TIE;

myPoint = sum;

numOfTie++;

cout << “点数” << myPoint << endl;

}

while (1)

{

if (status == WIN)

{

cout << “恭喜你,赢得游戏!” << endl;

break;

}

if (status == LOSE)

{

cout << “很遗憾,你输了!” << endl;

break;

}

while (status == TIE)

{

cout << “你现在是平局,是否要继续游戏”;

if (UserSaysYes())

{

int again;

again = RollDice();   //处于平局再次掷骰子

if (myPoint == again)  //掷得自己的点数,赢得胜利

{

status = WIN;

numOfWin++;

break;

}

else if (again == 7)    //掷得7,输了

{

status = LOSE;

numOfLose++;

break;

}

else                 //平局

{

numOfTie++;

if (numOfTie == 6)  //平局6次,输了

{

status = LOSE;

cout << “你已平局6次,”;

break;

}

}

}

}

}

}

else if (select == 3)          //输入为3

{

if (UserSaysYes())      //退出游戏

break;

else

select = 1;             //返回游戏

}

}

}

Show(); // 显示统计结果

}

3. 退出游戏

玩家输入选择select为3,在while()驯悍中通过语句else if(select==3)判断,用语句if(UserSaysYes())确认玩家是否要退出游戏,若回答为”y”则 跳出循环break,最后程序会调用类的成员函数Show()显示玩家游戏的结果。

void DiceGame::Show() // 显示统计结果

{

cout << “选手游戏统计:” << endl;

cout << “获胜” << numOfWin << “次” << endl;

cout << “失败” << numOfLose << “次” << endl;

cout << “平局” << numOfTie << “次” << endl;

cout << "              <<<欢迎您下次再来玩>>>              " << endl;

cout << "                  <<<再见>>>                      " << endl;

cout << “--------------------------------------------------” << endl;

}

******五.**程序测试

==========================

1.骰子游戏开始界面

图 5.1

2.未按照规则输入1、2、3,给出提示

图 5.2

3.选择1,获得游戏帮助

图 5.3

4.选择2开始游戏,直接获得胜利。

图5.4

5.选择2开始游戏,当遇到平局时,提示是否继续游戏。

图5.5

6.输掉游戏。

图5.6

7.选择3,结束游戏并打印获胜、失败及平局的次数。

图5.7

六、程序设计总结

====================

对于本次课程设计,有很多的心得体会。以下省略。

代码部分:

=====

头文件dice_game.h代码如下:


typedef enum { WIN, LOSE, TIE } GameStatus;	// WIN:赢,LOSE:输,TIE:平局

// 骰子游戏类DiceGame声明

class DiceGame

{

private:

	// 数据成员:

	int numOfWin;				  // 胜利数次

   	int numOfLose;				  // 失败数次

	int numOfTie;					// 平局数次

// 辅助函数

	int RollDice();					// 模拟投掷一次骰子

	void Help();					// 获得帮助

	void Show();					// 显示统计结果

public:

	// 方法声明:

	DiceGame();						 // 无参数的构造函数

	 ~DiceGame() {}			 // 析构函数

	void Game();					 // 模拟游戏

};



// 骰子游戏类DiceGame的实现部分

DiceGame::DiceGame()					 // 初始化骰子游戏

{

	numOfWin = 0;						 // 胜利数次

	numOfLose = 0;					 // 失败数次

	numOfTie = 0;				  	    // 平局数次

	cout << "游戏开始" << endl;

}



int DiceGame::RollDice()           // 模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和

{

	int numOfDice1;	// 所投掷的第1颗骰子向上一面的点数

	int numOfDice2;				   // 所投掷的第2颗骰子向上一面的点数

	int sum;						// 所投掷的两颗骰子向上一面的点数之和

	



	numOfDice1 = 1 + Rand::GetRand(6);	// 模拟所投掷骰子1的点数

	numOfDice2 = 1 + Rand::GetRand(6);	// 模拟所投掷骰子2的点数

	sum = numOfDice1 + numOfDice2;     // 计算所投掷两颗骰子向上一面的点数之和

	cout << "第一个点数" << numOfDice1 << endl;

	cout << "第二个点数" << numOfDice2 << endl;

	cout << "总点数" << sum << endl;

	return sum;						// 返回所掷骰子向上一面点数之和

}



void DiceGame::Help()					// 获得帮助

{

	cout << "    游戏者每次投掷两颗骰子,每个骰子是一个正方体,有" << endl;

	cout << "6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时" << endl;

	cout << ",将每个骰子朝上的点的数相加,在第一次投掷骰时, 如果" << endl;

	cout << "所得到的和为7或11,那么游戏者为赢得胜利; 如果所得到" << endl;

	cout << "的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6" << endl;

	cout << "、8、9或10,那么为游戏者的点数;如要想赢得胜利,必" << endl;

	cout << "须继续投掷骰子,直到取得自已的点数为止, 但是如果投" << endl;

	cout << "掷出的和为7或投掷6次仍未赚到该点数,则游戏者为输了." << endl << endl;

}



void DiceGame::Show()					// 显示统计结果

{

	cout << "选手游戏统计:" << endl;

	cout << "获胜" << numOfWin << "次" << endl;

	cout << "失败" << numOfLose << "次" << endl;

	cout << "平局" << numOfTie << "次" << endl;

	cout << "              <<<欢迎您下次再来玩>>>              " << endl;

	cout << "                  <<<再见>>>                      " << endl;

	cout << "--------------------------------------------------" << endl;

}



void DiceGame::Game()				 // 模拟游戏

{



	int select = 1;

	int sum, myPoint;

	GameStatus status;				 // 游戏状态



	Rand::SetRandSeed();				 // 设置当前时间为随机数种子

	Help();							 // 获得帮助



	while (select != 3)

	{

		cout << endl << endl << "请选择:" << endl;

		cout << "1. 游戏规则" << endl;

		cout << "2. 开始游戏" << endl;

		cout << "3. 退出游戏" << endl;

		cin >> select;		        // 输入选择

		if (select != 1 && select != 2 && select != 3) //若输入不是 1,2,3 重新输入

		{

			cout << "请用1,2,3回答" << endl;

			continue;//继续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值