扔色字课程设计报告正文_第1页
扔色字课程设计报告正文_第2页
扔色字课程设计报告正文_第3页
扔色字课程设计报告正文_第4页
扔色字课程设计报告正文_第5页
已阅读5页,还剩23页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE26目录一、课题设计内容与主要功能 11.1主要内容 11.2主要功能 1二、课题分析 22.1实现方法 22.2类声明 32.3核心算法实现代码 4三、主要功能的实现步骤 8四.程序测试与结论 12五.总结与体会 16六.附件 186.1程序清单 186.2参考资料 266.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主要功能具有娱乐性。2.玩家所获点数有不可预测性。3.程序具有可选择性,可依自己意愿选择不同选项。4.由于另外加入了部分源程序,可使界面变色,界面富有色彩感。二、课题分析2.1实现方法选选择获得帮助开始游戏4、56、891023122711点数失败平局胜利Y/NY退出游戏1N开始32.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<<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;cout<<select<<endl;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<<"点数为【"<<myPoint<<"】"<<endl;}while(1){if(status==WIN){system("color1b");cout<<"恭喜!你赢了!"<<endl;break;}if(status==LOSE){system("color2a");cout<<"遗憾!你输了!"<<endl;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;elseselect=1;//返回游戏}}Show(); //显示统计结果getscore();}三、主要功能的实现步骤通过voidDiceGame::Game()模拟游戏,调用Cover()函数,显示读取程序,进入主界面后有三个选择项,其实是通过if,while等一些语句实现的。现将实现步骤分析如下:1.if(select!='1'&&select!='2'&&select!='3') { cout<<"请输入1,2,3中任意一数!"<<endl; cout<<select<<endl; 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<<"点数为【"<<myPoint<<"】"<<endl; } 此语句也是紧接上一条语句的,如果掷得7或11,则玩家胜利,若得到的点数为2,3,11中任意一个数时,由status=LOSE显示玩家失败;若获得的点数不是7,11,也不是2,3,12,则显示平局,经由myPoint=sum;numOfTie++;cout<<"点数为【"<<myPoint<<"】"<<endl;这三条语句得出点数。5.while(1) { } 此语句是执行循环,直到满足条件为止的一个句子。while(1),括号中的数字可以写除了0以外的任何数字。当得到输了或者赢了游戏后,便退出此循环。6.if(status==WIN) { system("color1b"); cout<<"恭喜!你赢了!"<<endl; break; } } 如果游戏状态为赢,则输出“恭喜!你赢了!”,并通过system("color1b");显示特定的字体颜色。7.if(status==LOSE) {system("color2a"); cout<<"遗憾!你输了!"<<endl; 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<<""<<endl;}intDiceGame::RollDice()//模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和{ intnumOfDice1;//所投掷的第1颗骰子向上一面的点数 intnumOfDice2;//所投掷的第2颗骰子向上一面的点数 intsum; //所投掷的两颗骰子向上一面的点数之和 numOfDice1=1+Rand::GetRand(6); //模拟所投掷骰子1的点数 numOfDice2=1+Rand::GetRand(6); //模拟所投掷骰子2的点数 sum=numOfDice1+numOfDice2; //计算所投掷两颗骰子向上一面的点数之和 cout<<"选手掷骰子:"<<numOfDice1<<"+"<<numOfDice2<<"="<<sum<<endl; returnsum;//返回所掷骰子向上一面点数之和}voidDiceGame::getscore(){ inta=3*numOfWin-1*numOfLose+1*numOfTie; cout<<endl<<endl<<"您的点数是:"; cout<<(3*numOfWin+0*numOfLose-1*numOfTie)<<endl; cout<<""<<endl<<endl<<endl; cout<<"谢谢您使用本软件"<<endl<<endl<<endl;cout<<"谢谢您使用本软件"<<endl<<endl<<endl;}voidDiceGame::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,那么游戏者为输了."<<endl<<endl;} voidDiceGame::Show() //显示统计结果{ cout<<"选手游戏统计:"<<endl; cout<<"获胜"<<numOfWin<<"次"<<endl; cout<<"失败"<<numOfLose<<"次"<<endl; cout<<"平局"<<numOfTie<<"次"<<endl;}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<<endl;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<<endl;for(j=0;j<(75-strlen(line))/2;j++)//行坐标定位cout<<"";cout<<line;//输出线条cout<<endl;for(j=0;j<(65-strlen(bar))/2;j++)cout<<"";cout<<(i+7)*5<<"%Loading";cout.write(bar,k);cout<<endl;for(j=0;j<10;j++)cout<<endl;for(j=0;j<24;j++)cout<<"";cout<<"感谢各位老师对此次课程设计的精心指导"<<endl;for(j=0;j<24;j++)cout<<"";for(j=0;j<=18;j++)cout<<"─";cout<<endl;for(j=0;j<10000000;j++);//延时效果k++;if(k>4)k=0;}}voidDiceGame::Game()//模拟游戏{ Cover(); charselect=1; intsum,myPoint; GameStatusstatus;//游戏状态 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; cout<<select<<endl; 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<<"点数为【"<<myPoint<<"】"<<endl; } while(1) { if(status==WIN) { system("color1b"); cout<<"恭喜!你赢了!"<<endl; break; } if(status==LOSE) {system("color2a"); cout<<"遗憾!你输了!"<<endl; 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();}#endif【utility.h】ifndef__UTILITY_H__ //如果没有定义__UTILITY_H__#define__UTILITY_H__ //那么定义__UTILITY_H__//实用程序工具包#ifdef_MSC_VER //表示是VisualC++#if_MSC_VER==1200 //表示VisualC++6.0//标准库头文件#include<string.h> //标准串和操作#include<iostream.h> //标准流操作#include<limits.h> //极限#include<math.h> //数据函数#include<fstream.h> //文件输入输出#include<ctype.h> //字符处理#include<time.h> //日期和时间函数#include<stdlib.h> //标准库#include<stdio.h> //标准输入输出#include<iomanip.h> //输入输出流格式设置 #include<stdarg.h> //支持变长函数参数 #include<assert.h> //支持断言#else //其它版本的VisualC++//ANSIC++标准库头文件#include<string> //标准串和操作#include<iostream> //标准流操作#include<limits> //极限#include<cmath> //数据函数#include<fstream> //文件输入输出#include<cctype> //字符处理#include<ctime> //日期和时间函数#include<cstdlib> //标准库#include<cstdio> //标准输入输出#include<iomanip> //输入输出流格式设置 #include<cstdarg> //支持变长函数参数 #include<cassert> //支持断言usingnamespacestd; //标准库包含在命名空间std中#endif //_MSC_VER==1200#else //非VisualC++//ANSIC++标准库头文件#include<string> //标准串操作#include<iostream> //标准流操作#include<limits> //极限#include<cmath> //数据函数#include<fstream> //文件输入输出#include<cctype> //字符处理#include<ctime> //日期和时间函数#include<cstdlib> //标准库#include<cstdio> //标准输入输出#include<iomanip> //输入输出流格式设置 #include<cstdarg> //支持变长函数参数 #include<cassert> //支持断言usingnamespacestd; //标准库包含在命名空间std中#endif //_MSC_VER//实用函数charGetChar(istream&inStream=cin);//从输入流inStream中跳过空格及制表符获取一字符boolUserSaysYes(); //当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false//函数模板template<classElemType>voidSwap(ElemType&e1,ElemType&e2); //交换e1,e2之值template<classElemType>voidDisplay(ElemTypeelem[],intn); //显示数组elem的各数据元素值//实用类classTimer; //计时器类TimerclassError;//通用异常类classRand;//随机数类RandcharGetChar(istream&in)//从输入流in中跳过空格及制表符获取一字符{ charch;//临时变量 while((ch=in.peek())!=EOF //文件结束符(peek()函数从输入流中接受1 //字符,流的当前位置不变) &&((ch=in.get())=='' //空格(get()函数从输入流中接受1字符,流 //的当前位置向后移1个位置) ||ch=='\t')); //制表符 returnch; //返回字符}boolUserSaysYes()//当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false{ charch;//用户回答字符 boolinitialResponse=true;//初始回答do { //循环直到用户输入恰当的回答为止 if(initialResponse)cout<<"(y,n)?";//初始回答 elsecout<<"用y或n回答:";//非初始回答 while((ch=GetChar())=='\n'); //跳过空格,制表符及换行符获取一字符 initialResponse=false; //非初始回答 }while(ch!='y'&&ch!='Y'&&ch!='n'&&ch!='N'); while(GetChar()!='\n');//跳过当前行后面的字符 if(ch=='y'||ch=='Y')returntrue; //肯定回答返回true elsereturnfalse;//否定回答返回false}template<classElemType>voidSwap(ElemType&e1,ElemType&e2) //交换e1,e2之值{ ElemTypetemp;//临时变量 temp=e1;e1=e2;e2=temp;//循环赋值实现交换e1,e2}template<classElemType>voidShow(ElemTypeelem[],intn)//显示数组elem的各数据元素值{ for(inti=0;i<n;i++) { //显示数组elem cout<<elem[i]<<""; //显示elem[i] } cout<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论