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