扔色字课程设计报告正文.docx

上传人:b****6 文档编号:5806951 上传时间:2023-01-01 格式:DOCX 页数:30 大小:206.90KB
下载 相关 举报
扔色字课程设计报告正文.docx_第1页
第1页 / 共30页
扔色字课程设计报告正文.docx_第2页
第2页 / 共30页
扔色字课程设计报告正文.docx_第3页
第3页 / 共30页
扔色字课程设计报告正文.docx_第4页
第4页 / 共30页
扔色字课程设计报告正文.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

扔色字课程设计报告正文.docx

《扔色字课程设计报告正文.docx》由会员分享,可在线阅读,更多相关《扔色字课程设计报告正文.docx(30页珍藏版)》请在冰豆网上搜索。

扔色字课程设计报告正文.docx

扔色字课程设计报告正文

目录

一、课题设计内容与主要功能1

1.1主要内容1

1.2主要功能1

二、课题分析2

2.1实现方法2

2.2类声明3

2.3核心算法实现代码4

三、主要功能的实现步骤8

四.程序测试与结论12

五.总结与体会16

六.附件18

6.1程序清单18

6.2参考资料26

6.3致谢26

 

一、课题设计内容与主要功能

1.1主要内容

设计一个游戏,其内容为:

游戏者每次投掷两颗骰子,每颗骰子是一个正方体,有6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时,将每颗骰子朝上的点的数相加,在第一次投掷骰时,如果所得到的和为7或11,那么游戏者为赢得胜利;如果所得到的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6、8、9或10,那么为游戏者的点数;如要想赢得胜利,必须继续投掷骰子,直到取得自已的点数为止,但是如果投掷出的和为7,那么游戏者输了。

1.2主要功能

1.具有娱乐性。

2.玩家所获点数有不可预测性。

3.程序具有可选择性,可依自己意愿选择不同选项。

4.由于另外加入了部分源程序,可使界面变色,界面富有色彩感。

 

二、课题分析

2.1实现方法

2.2类声明

1.骰子游戏类DiceGame声明如下:

classDiceGame

{

private:

//数据成员:

intnumOfWin;//胜利数次

intnumOfLose;//失败数次

intnumOfTie;//平局数次

//辅助函数

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

voidHelp();//获得帮助

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

public:

//方法声明:

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

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

voidGame();//模拟游戏

};

该类是实现游戏功能的重要类,其中定义了三个私有整形成员来分别表示平局、胜利以及失败的次数,辅助函数有RollDice、Help及Show,还有主要函数Game。

2.随机数类Rand声明如下:

classRand

{

public:

//方法声明

staticvoidSetRandSeed(){srand((unsigned)time(NULL));}

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

staticintGetRand(intn){returnrand()%n;}

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

staticintGetRand(){returnrand();}//生成0~n-1之间的随机数

};

该类能随机生成数字供游戏中骰子使用。

它设置了当前时间为时间种子。

2.3核心算法实现代码

1.main.cpp:

#include"utility.h"//实用程序软件包

#include"dice_game.h"//骰子游戏

intmain(void)//主函数main(void)

{

DiceGameobjGame;//骰子游戏对象

objGame.Game();//运行游戏

system("PAUSE");//调用库函数system()

return0;//返回值0,返回操作系统

}

2.骰子游戏实现的核心部分代码

voidDiceGame:

:

Game()//模拟游戏

{

Cover();

charselect=1;

intsum,myPoint;

GameStatusstatus;//游戏状态

Rand:

:

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

Help();//获得帮助

while(select!

=3)

{

cout<

cout<<"--->1.获得帮助"<

cout<<"--->2.开始游戏"<

cout<<"--->3.退出游戏"<

cin>>select;//输入选择

if(select!

='1'&&select!

='2'&&select!

='3')//输入不是1,2,3重新输入

{

cout<<"请输入1,2,3中任意一数!

"<

cout<

continue;

}

if(select=='1')//输入1

{

Help();

}

elseif(select=='2')//输入2

{

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

if(sum==7||sum==11)//掷得7或11胜利

{

status=WIN;

numOfWin++;

}

elseif(sum==2||sum==3||sum==12)//输了

{

status=LOSE;

numOfLose++;

}

else//处于平局

{

status=TIE;

myPoint=sum;

numOfTie++;

cout<<"点数为【"<

}

while

(1)

{

if(status==WIN)

{

system("color1b");

cout<<"恭喜!

你赢了!

"<

break;

}

if(status==LOSE)

{

system("color2a");

cout<<"遗憾!

你输了!

"<

break;

}

if(status==TIE)

{

cout<<"平局!

是否继续投掷骰子?

";

boolGetanswer=UserSaysYes();//得到用户的指示

while(Getanswer)

{

intrepeat;

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

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

{

status=WIN;

numOfWin++;//所有胜局数

break;

}

elseif(repeat==7)//掷得7,输了

{

status=LOSE;

numOfLose++;//所有败局数

break;

}

else//平局

{

numOfTie++;//所有平局数

break;

}

}

if(!

Getanswer)

break;

}

}

}

elseif(select=='3')//输入为3

{

cout<<"是否退出?

";

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

break;

else

select=1;//返回游戏

}

}

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

getscore();

}

 

三、主要功能的实现步骤

通过voidDiceGame:

:

Game()模拟游戏,调用Cover()函数,显示读取程序,进入主界面后有三个选择项,其实是通过if,while等一些语句实现的。

现将实现步骤分析如下:

1.if(select!

='1'&&select!

='2'&&select!

='3')

{

cout<<"请输入1,2,3中任意一数!

"<

cout<

continue;

}

通过上面的语句,不难分析出,若输入不是1,2,3中的任意一个数,则会显示"请输入1,2,3中任意一数!

"字样,这样就防止了输入除此三个述以外的其它数或者字符可能会带来的错误。

2.if(select=='1')

{

Help();

}

此语句可以分析出,若输入为1,则会出现帮助的字样。

3.elseif(select=='2'){

sum=RollDice();

此语句紧接2所示语句,如果选择的是2,则开始模拟掷骰子游戏。

4.if(sum==7||sum==11)//

{

status=WIN;

numOfWin++;

}

elseif(sum==2||sum==3||sum==12)

{

status=LOSE;

numOfLose++;

}

else

{

status=TIE;

myPoint=sum;

numOfTie++;

cout<<"点数为【"<

}

此语句也是紧接上一条语句的,如果掷得7或11,则玩家胜利,若得到的点数为2,3,11中任意一个数时,由status=LOSE显示玩家失败;若获得的点数不是7,11,也不是2,3,12,则显示平局,经由myPoint=sum;numOfTie++;cout<<"点数为【"<

这三条语句得出点数。

5.while

(1)

{

}

此语句是执行循环,直到满足条件为止的一个句子。

while

(1),括号中的数字可以写除了0以外的任何数字。

当得到输了或者赢了游戏后,便退出此循环。

6.if(status==WIN)

{

system("color1b");

cout<<"恭喜!

你赢了!

"<

break;

}

}

如果游戏状态为赢,则输出“恭喜!

你赢了!

”,并通过system("color1b");显示特定的字体颜色。

7.if(status==LOSE)

{system("color2a");

cout<<"遗憾!

你输了!

"<

break;

}

如果游戏状态为失败,则输出“遗憾!

你输了”,并通过system("color2a");显示特定的字体颜色。

(注:

此处2a与第6点中的1b有别,因此游戏失败和胜利的结果给出的颜色不同)

8.if(status==TIE)

{

cout<<"平局!

是否继续投掷骰子?

";

boolGetanswer=UserSaysYes();

}

如果游戏状态时平局,则输出“平局!

是否继续投掷骰子?

”,通过布尔boolGetanswer=UserSaysYes();来实现等待用户的指示。

9.while(Getanswer)

{

intrepeat;

repeat=RollDice();

if(myPoint==repeat)

{

status=WIN;

numOfWin++;break;

}}

如果得到了在来一次的指令,则会再次执行掷骰子,若掷得自己的点数,则赢得胜利,并输出所有胜局数。

10.elseif(repeat==7)

{

status=LOSE;

numOfLose++;

break;

}

此语句紧接上一条语句,若重新投掷得到的点数为7,则玩家输掉了游戏,并且显示所有失败游戏的局数。

11.else//平局

{

numOfTie++;

break;

}

若重新投掷的点数不是上述两条语句中所描述的点数,则显示平局,且会给出所有平局的局数。

12.if(!

Getanswer)

break;

若没有的到用户指令,则退出。

13.elseif(select=='3')

{

cout<<"是否退出?

";

if(UserSaysYes())

break;

else

select=1;

}

若在主界面出来后,选择的是第3项,则会出现“是否退出”的提示,如果用户选择y,则退出,否则重新回到三个选项的界面,继续选择要选择的选项。

14.Show();

getscore();

显示统计结果

 

四.程序测试与结论

程序运行后的主界面如下:

 

选择选项1,即获得帮助,运行截图如下:

选择选项2,即开始游戏,赢了游戏时,其运行截图如下:

 

若游戏为平局,选择y时,截图如下:

如游戏为平局,选择n时,截图如下:

 

选择选项3,即退出游戏,运行截图如下:

若不选择1,2或3,运行截图如下:

结论:

经测试,本程序可以正常运行,要求的各种功能已经基本完善。

且由于改变了背景颜色、文字布局以及字体颜色,在玩家输赢不同情况下显示不同颜色的文字颜色和背景,使得运行后的界面更加美观。

五.总结与体会

通过大一C++学习,感觉自己学到了很多东西。

但由于进大二后没有使用过C++进行编程,很多地方已经记不起来了,为了完成此次课程设计,我重新翻阅了大一的教材,并对课后的部分习题进行了分析,将曾经学过的知识点一点一点地重新收回来,经过自己的努力,我在较短时间内将课本看完了。

并花了相当长的时间完成了此次任务的设计。

说实话,我在这个过程中付出了很大的精力,由于以前没有进行过此类程序的设计,开始起来比较吃力,感觉很难!

经此次课程设计,我深刻地了解到,无论是学习一门语言,要经常看,经常编写和操作,逐步深入了解其内涵,以加强一门语言的学习。

C++作为一门面向对象的语言,可能比较复杂一点,这就更要我们有持之以恒,不断编程以达熟练。

通过一个星期的课程设计,我有如下几点体会:

1.要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。

2.平时扎实的基础也很关键,如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。

为了解决此类问题,最好就是多向同学,老师请教,不要怕难为情。

尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是小菜一碟,而且每个老师都是乐意为同学解决困难的。

3.在编写程序时,要抓住问题的要害,要善于将语言文字转变为程序。

这虽然是要有丰富的经验才能做的好的,但也是有些小窍门的。

程序设计过程有若是要解决实际问题,从解决实际问题的角度,我们可以这样来看:

首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程算法。

可得最后结论。

4.C++语言是一门面向对象的语言,不同于C语言,要考虑程序数据的行为。

类就是添加的新内容,同时使C++的程序变得更加优化,类所需的构造函数和折构函数,数据成员和成员函数。

每个程序做前都要考虑可行性和正确性。

每个大程序可能会出项种种小错误,会让人非常烦燥,所以要冷静查找,要有恒心,作为编程的人员要具有那些素质。

在做课程设计中就要这种的素质,通过老师和我的努力终于学会了很多不懂的类之类的内容。

通过本次课程设计,使我又一次了解到了C++的更多内容,而且也使我及时的复习了以前的内容,也为以后此类设计弥补了经验。

 

六.附件

6.1程序清单

【main.cpp】

#include"utility.h"//实用程序软件包

#include"dice_game.h"//骰子游戏

intmain(void)//主函数main(void)

{

DiceGameobjGame;//骰子游戏对象

objGame.Game();//运行游戏

system("PAUSE");//调用库函数system()

return0;//返回值0,返回操作系统

}

【dice_game.h】

#ifndef__DICE_GAME_H__//如果没有定义__DICE_GAME_H__

#define__DICE_GAME_H__//那么定义__DICE_GAME_H__

typedefenum{WIN,LOSE,TIE}GameStatus;//WIN:

赢,LOSE:

输,TIE:

平局

//骰子游戏类DiceGame声明

classDiceGame

{

private:

//数据成员:

intnumOfWin;//胜利数次

intnumOfLose;//失败数次

intnumOfTie;//平局数次

//辅助函数

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

voidHelp();//获得帮助

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

voidCover();//定义颜色

public:

//方法声明:

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

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

voidGame();//模拟游戏

voidgetscore();//获得的积分

};

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

DiceGame:

:

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

{

numOfWin=0;//胜利数次

numOfLose=0;//失败数次

numOfTie=0;//平局数次

cout<<""<

}

intDiceGame:

:

RollDice()

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

{

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

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

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

numOfDice1=1+Rand:

:

GetRand(6);//模拟所投掷骰子1的点数

numOfDice2=1+Rand:

:

GetRand(6);//模拟所投掷骰子2的点数

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

cout<<"选手掷骰子:

"<

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

}

voidDiceGame:

:

getscore()

{

inta=3*numOfWin-1*numOfLose+1*numOfTie;

cout<

";

cout<<(3*numOfWin+0*numOfLose-1*numOfTie)<

cout<<""<

cout<<"---谢谢您使用本软件---"<

cout<<"---谢谢您使用本软件---"<

}

voidDiceGame:

:

Help()//获得帮助

{

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

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

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

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

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

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

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

cout<<"掷出的和为7,那么游戏者为输了."<

}

voidDiceGame:

:

Show()//显示统计结果

{

cout<<"选手游戏统计:

"<

cout<<"获胜"<

cout<<"失败"<

cout<<"平局"<

}

voidDiceGame:

:

Cover()

{system("color1e");

charline[]={"程序读取中 请耐心等待..."};

charbar[]={"...."};

inti,j,k=0,x=0,y=0;

for(i=0;i<=strlen(line)/2;)

{

system("cls");

for(j=0;j<9;j++)//改变行坐标

cout<

for(j=0;j<(75-strlen(line))/2;j++)//改变列坐标

cout<<"";

for(j=1;j<=i;j++)//进度显示器

cout<<">>";

for(x=strlen(line)/2;x>i;x--)

cout<<"";

if(k==4)

i++;

cout<

for(j=0;j<(75-strlen(line))/2;j++)//行坐标定位

cout<<"";

cout<

cout<

for(j=0;j<(65-strlen(bar))/2;j++)

cout<<"";

cout<<(i+7)*5<<"%Loading";

cout.write(bar,k);

cout<

for(j=0;j<10;j++)

cout<

for(j=0;j<24;j++)

cout<<"";

cout<<"感谢各位老师对此次课程设计的精心指导"<

for(j=0;j<24;j++)

cout<<"";

for(j=0;j<=18;j++)

cout<<"─";

cout<

for(j=0;j<10000000;j++);//延时效果

k++;

if(k>4)

k=0;

}

}

vo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1