《C++语言程序设计》课程设计(论文)-掷骰子_第1页
《C++语言程序设计》课程设计(论文)-掷骰子_第2页
《C++语言程序设计》课程设计(论文)-掷骰子_第3页
《C++语言程序设计》课程设计(论文)-掷骰子_第4页
《C++语言程序设计》课程设计(论文)-掷骰子_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

PAGE《C++语言程序设计》课程设计(论文)题目:掷骰子院(系):软件学院专业班级:软件工程113班课程设计(论文)任务及评语院(系):软件学院教研室:软件教研室学号学生姓名专业班级软件工程113班课程设计(论文)题目掷骰子课程设计(论文)任务程序设计的任务与要求:掌握面向对象程序设计语言C++的基本语法掌握C++面向对象设计的思想掌握VC++6.0与DEVC++开发工具的使用(4).运用标准C++规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。指导教师评语及成绩成绩:指导教师签字:年月日PAGE1目录第1章课程设计目的与要求 11.1设计目的 11.2实验环境 11.3预备知识 11.4设计要求 1第2章课程设计内容 22.1课题描述 22.2系统设计 22.2.1功能分析 22.2.2面向对象设计 22.2.3类成员描述 42.3程序实现 52.3.1源码分析 52.3.2运行结果 11第3章课程设计总结 15参考文献 16第1章课程设计目的与要求1.1设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows操作系统的微机系统。C++语言应用程序开发软件使用:VC++系统,或其他C++语言应用程序开发软件。1.3预备知识熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章课程设计内容2.1课题描述编写程序实现投掷双骰子游戏,游戏规则为:游戏者每次投掷两颗骰子,每颗骰子是一个正方体,有6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时,将每颗骰子朝上的点的数相加,在第一次投掷骰时,如果所得到的和为7或11,那么游戏者为赢得胜利;如果所得到的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6、8、9或10,那么为游戏者的点数;如要想赢得胜利,必须继续投掷骰子,直到取得自已的点数为止,但是如果投掷出的和为7或者连续投掷了6次仍未赚得点数,那么游戏者为输了。2.2系统设计2.2.1功能分析该游戏的主要功能为:实现随机投掷两个骰子把其所得点数相加,然后根据点数和判断玩家的输、赢或平局。在游戏中有1.获得帮助2.玩一手游戏3.退出游戏三个提示,分别为玩家提供帮助指示、选择进入新的游戏、退出当前的游戏并为该局游戏显示游戏结果。2.2.2面向对象设计1.类的设计这种小型的游戏的开发方法可以采用结构化方法分析与设计。首先,分析软件的逻辑模型,也就是这个软件需要“做什么”。然后,再建立软件的物理模型,既要“怎么做”的工程。该个程序由main()函数、实用的程序软件包utility.h文件及骰子游戏dice_game.h文件组成,在main()函数中,先建立类DiceGame的对象objGame并调用类DiceGame的构造函数,为类的数据成员赋初值并开始游戏,再用对象objGame访问类的成员函数Game(),进入游戏,通过选项玩家选择进入游戏或退出游戏。在函数Game()中,先调用Help()函数显示游戏规则,并调用utility.h文件Rand类中SetRandSeed()函数设定当前时间为随机数种子,进入while循环中,显示游戏选项,玩家可选择1.获得帮助然后调用成员函数Help()显示提示;2.玩一手游戏然后调用成员函数RollDice(),把随机的两个骰子的点数赋值给整形数sum,通过switch()语句判断玩家输、赢或者平局。若玩家第一盘为平局状态为TIE,则该局骰子和为玩家的点数把sum赋值给myPoint,玩家可通过调用utility.h文件中的UserSaysYes()函数选择继续投骰子,直到赚到该点数时获胜状态为WIN,但是用if语句判断如果投掷出的和为7或者连续投掷出六次平局,则游戏者该局为输了LOSE。最后用while循环中的if语句为每一次输赢和平局计数并显示玩家的输赢的语句。3.退出游戏然后调用utility.h文件中的UserSaysYes()函数让玩家确定是否退出,退出后通过调用成员函数Show()显示游戏结果,游戏结束!2.UML类图DiceGame-m_numOfWin:int-m_numOfLose:int-m_numOfTie:int+RollDice():int+Help():void+Show():void+DiceGame():void+Game():void+virtual~DiceGame():void图2.1DiceGame类Player#m_count:void+Player():void+Integral():void+Initial():void+Game():void+~Player():void+Display():void图2.2Player类3.程序流程图开始开始输入1231帮助2游戏开始3退出游戏按任意键退出显示结果图2.3程序流程图2.2.2类成员描述DiceGame类:描述控制骰子游戏。数据成员:numOfWin的类型为int,表示胜利数次。numOfLose的类型为int,表示失败数次。numOfTie的类型为int,表示平局数次。成员函数:函数RollDice():模拟投掷一次骰子的函数,返回值类型为int函数Help():获得帮助,返回值类型为void函数Show():显示统计结果,返回值类型void2.3程序实现2.3.1源码分析Main()文件:#include"utility.h"#include"dice_game.h"intmain(void){DiceGameobjGame;objGame.Game();system("PAUSE");return0;}dice_game.h文件:#ifndef__DICE_GAME_H__#define__DICE_GAME_H__typedefenum{WIN,LOSE,TIE}GameStatus;classDiceGame{private:intnumOfWin;intnumOfLose;intnumOfTie; intRollDice(); voidHelp(); voidShow();public: DiceGame();virtual~DiceGame(){}voidGame(); };DiceGame::DiceGame(){numOfWin=0;numOfLose=0;numOfTie=0;cout<<"游戏开始"<<endl;}intDiceGame::RollDice(){ intnumOfDice1;intnumOfDice2;intsum;numOfDice1=1+Rand::GetRand(6); numOfDice2=1+Rand::GetRand(6); sum=numOfDice1+numOfDice2;cout<<"选手掷骰子:"<<numOfDice1<<"+"<<numOfDice2<<"="<<sum<<endl;returnsum;}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或投掷6次仍未赚到该点数,则游戏者为输了."<<endl<<endl;}voidDiceGame::Show(){cout<<"选手游戏统计:"<<endl;cout<<"获胜"<<numOfWin<<"次"<<endl;cout<<"失败"<<numOfLose<<"次"<<endl;cout<<"平局"<<numOfTie<<"次"<<endl;}voidDiceGame::Game(){intselect=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){cout<<"请用1,2,3回答"<<endl;continue;}if(1){while(select==1){ Help();break;}if(select==2) { sum=RollDice(); switch(sum){case7:case11:status=WIN; numOfWin++; break; case2:case3:case12: 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()){ intagain; again=RollDice(); if(myPoint==again) { status=WIN; numOfWin++;break;} elseif(again==7) { status=LOSE; numOfLose++; break;} else { numOfTie++; if(numOfTie==6)//平局6次,输了{ status=LOSE; cout<<"你已平局6次,"; break;}}}}}}elseif(select==3){if(UserSaysYes()) break; else select=1;}}}Show();}#endifUtility.h文件:#ifndef__UTILITY_H__ #define__UTILITY_H__#ifdef_MSC_VER #if_MSC_VER==1200 #include<string.h> #include<iostream.h> #include<limits.h> #include<math.h> #include<fstream.h> #include<ctype.h> #include<time.h> usingnamespacestd; #endif //_MSC_VER==1200#else #include<string> #include<iostream> #include<limits> #include<cmath> #include<fstream>#include<cctype> #include<ctime> usingnamespacestd; #endif //_MSC_VERcharGetChar(istream&inStream=cin);boolUserSaysYes();template<classElemType>voidSwap(ElemType&e1,ElemType&e2);template<classElemType>voidDisplay(ElemTypeelem[],intn);classTimer;classError; classRand; charGetChar(istream&in){charch; while((ch=in.peek())!=EOF&&((ch=in.get())==''||ch=='\t')); returnch; }boolUserSaysYes(){ 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;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) {for(inti=0;i<n;i++){cout<<elem[i]<<"";elem[i] }cout<<endl; }classTimer{private:clock_tstartTime;public:Timer(){startTime=clock();}doubleElapsedTime()const {clock_tendTime=clock();return(double)(endTime-startTime)/(double)CLK_TCK;}voidReset(){startTime=clock();} };#defineMAX_ERROR_MESSAGE_LEN100classError{private:charmessage[MAX_ERROR_MESSAGE_LEN];public: Error(charmes[]="一般性异常!"){strcpy(message,mes);} voidShow()const{cout<<message<<endl;} };classRand{public:staticvoidSetRandSeed(){srand((unsigned)time(NULL));} staticintGetRand(intn){returnrand()%n;}staticintGetRand(){returnrand();}};#endif2.3.2运行结果1.初始界面图2.4游戏初始界面2.若玩家输入有误,则需提醒玩家输入正确的选项进入游戏图2.5提示正确进入游戏界面3.若玩家中途忘记游戏规则,则课选择选项1,进入

温馨提示

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

评论

0/150

提交评论