




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE《C++語言程序設(shè)計(jì)》課程設(shè)計(jì)(論文)題目:擲骰子院(系):軟件學(xué)院專業(yè)班級(jí):軟件工程113班課程設(shè)計(jì)(論文)任務(wù)及評(píng)語院(系):軟件學(xué)院教研室:軟件教研室學(xué)號(hào)學(xué)生姓名專業(yè)班級(jí)軟件工程113班課程設(shè)計(jì)(論文)題目擲骰子課程設(shè)計(jì)(論文)任務(wù)程序設(shè)計(jì)的任務(wù)與要求:掌握面向?qū)ο蟪绦蛟O(shè)計(jì)語言C++的基本語法掌握C++面向?qū)ο笤O(shè)計(jì)的思想掌握VC++6.0與DEVC++開發(fā)工具的使用(4).運(yùn)用標(biāo)準(zhǔn)C++規(guī)范設(shè)計(jì)應(yīng)用程序設(shè)計(jì)過程中,要嚴(yán)格遵守設(shè)計(jì)的時(shí)間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,規(guī)范完整地撰寫出設(shè)計(jì)報(bào)告。指導(dǎo)教師評(píng)語及成績(jī)成績(jī):指導(dǎo)教師簽字:年月日PAGE1目錄第1章課程設(shè)計(jì)目的與要求 11.1設(shè)計(jì)目的 11.2實(shí)驗(yàn)環(huán)境 11.3預(yù)備知識(shí) 11.4設(shè)計(jì)要求 1第2章課程設(shè)計(jì)內(nèi)容 22.1課題描述 22.2系統(tǒng)設(shè)計(jì) 22.2.1功能分析 22.2.2面向?qū)ο笤O(shè)計(jì) 22.2.3類成員描述 42.3程序?qū)崿F(xiàn) 52.3.1源碼分析 52.3.2運(yùn)行結(jié)果 11第3章課程設(shè)計(jì)總結(jié) 15參考文獻(xiàn) 16第1章課程設(shè)計(jì)目的與要求1.1設(shè)計(jì)目的將理論教學(xué)中涉及到的知識(shí)點(diǎn)貫穿起來,對(duì)不同的數(shù)據(jù)類型、程序控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)作一比較和總結(jié),結(jié)合設(shè)計(jì)題目進(jìn)行綜合性應(yīng)用,對(duì)所學(xué)知識(shí)達(dá)到融會(huì)貫通的程度。通過課程設(shè)計(jì),學(xué)生在下述各方面的能力應(yīng)該得到鍛煉:(1)進(jìn)一步鞏固、加深學(xué)生所學(xué)專業(yè)課程《C++語言教程》的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)學(xué)生綜合分析問題,解決問題的能力。(2)全面考核學(xué)生所掌握的基本理論知識(shí)及其實(shí)際業(yè)務(wù)能力,從而達(dá)到提高學(xué)生素質(zhì)的最終目的。(3)利用所學(xué)知識(shí),開發(fā)小型應(yīng)用系統(tǒng),掌握運(yùn)用C++語言編寫調(diào)試應(yīng)用系統(tǒng)程序,訓(xùn)練獨(dú)立開發(fā)應(yīng)用系統(tǒng),進(jìn)行數(shù)據(jù)處理的綜合能力。(4)對(duì)于給定的設(shè)計(jì)題目,如何進(jìn)行分析,理清思路,并給出相應(yīng)的數(shù)學(xué)模型。(5)掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。(6)熟練掌握C++語言的基本語法,靈活運(yùn)用各種數(shù)據(jù)類型。(7)進(jìn)一步掌握在集成環(huán)境下如何調(diào)試程序和修改程序。1.2實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows操作系統(tǒng)的微機(jī)系統(tǒng)。C++語言應(yīng)用程序開發(fā)軟件使用:VC++系統(tǒng),或其他C++語言應(yīng)用程序開發(fā)軟件。1.3預(yù)備知識(shí)熟悉C++語言程序設(shè)計(jì)的基本知識(shí)及VC++編輯器的使用方法。1.4設(shè)計(jì)要求1.仔細(xì)分析設(shè)計(jì)題目,畫出程序流程圖,編寫程序源代碼。2.積極上機(jī)調(diào)試源程序,增強(qiáng)編程技巧與調(diào)程能力。3.認(rèn)真書寫課程設(shè)計(jì)預(yù)習(xí)報(bào)告,課程設(shè)計(jì)說明書。4.遵守課程設(shè)計(jì)要求和機(jī)房管理制度,服從指導(dǎo)教師的安排,確保課程設(shè)計(jì)的順利完成課程設(shè)計(jì)內(nèi)容。第2章課程設(shè)計(jì)內(nèi)容2.1課題描述編寫程序?qū)崿F(xiàn)投擲雙骰子游戲,游戲規(guī)則為:游戲者每次投擲兩顆骰子,每顆骰子是一個(gè)正方體,有6面上面分別標(biāo)有1、2、3、4、5、6個(gè)圓點(diǎn),當(dāng)骰子停止時(shí),將每顆骰子朝上的點(diǎn)的數(shù)相加,在第一次投擲骰時(shí),如果所得到的和為7或11,那么游戲者為贏得勝利;如果所得到的和為2、3或12,那么游戲者為輸?shù)袅?如果和為4、5、6、8、9或10,那么為游戲者的點(diǎn)數(shù);如要想贏得勝利,必須繼續(xù)投擲骰子,直到取得自已的點(diǎn)數(shù)為止,但是如果投擲出的和為7或者連續(xù)投擲了6次仍未賺得點(diǎn)數(shù),那么游戲者為輸了。2.2系統(tǒng)設(shè)計(jì)2.2.1功能分析該游戲的主要功能為:實(shí)現(xiàn)隨機(jī)投擲兩個(gè)骰子把其所得點(diǎn)數(shù)相加,然后根據(jù)點(diǎn)數(shù)和判斷玩家的輸、贏或平局。在游戲中有1.獲得幫助2.玩一手游戲3.退出游戲三個(gè)提示,分別為玩家提供幫助指示、選擇進(jìn)入新的游戲、退出當(dāng)前的游戲并為該局游戲顯示游戲結(jié)果。2.2.2面向?qū)ο笤O(shè)計(jì)1.類的設(shè)計(jì)這種小型的游戲的開發(fā)方法可以采用結(jié)構(gòu)化方法分析與設(shè)計(jì)。首先,分析軟件的邏輯模型,也就是這個(gè)軟件需要“做什么”。然后,再建立軟件的物理模型,既要“怎么做”的工程。該個(gè)程序由main()函數(shù)、實(shí)用的程序軟件包utility.h文件及骰子游戲dice_game.h文件組成,在main()函數(shù)中,先建立類DiceGame的對(duì)象objGame并調(diào)用類DiceGame的構(gòu)造函數(shù),為類的數(shù)據(jù)成員賦初值并開始游戲,再用對(duì)象objGame訪問類的成員函數(shù)Game(),進(jìn)入游戲,通過選項(xiàng)玩家選擇進(jìn)入游戲或退出游戲。在函數(shù)Game()中,先調(diào)用Help()函數(shù)顯示游戲規(guī)則,并調(diào)用utility.h文件Rand類中SetRandSeed()函數(shù)設(shè)定當(dāng)前時(shí)間為隨機(jī)數(shù)種子,進(jìn)入while循環(huán)中,顯示游戲選項(xiàng),玩家可選擇1.獲得幫助然后調(diào)用成員函數(shù)Help()顯示提示;2.玩一手游戲然后調(diào)用成員函數(shù)RollDice(),把隨機(jī)的兩個(gè)骰子的點(diǎn)數(shù)賦值給整形數(shù)sum,通過switch()語句判斷玩家輸、贏或者平局。若玩家第一盤為平局狀態(tài)為TIE,則該局骰子和為玩家的點(diǎn)數(shù)把sum賦值給myPoint,玩家可通過調(diào)用utility.h文件中的UserSaysYes()函數(shù)選擇繼續(xù)投骰子,直到賺到該點(diǎn)數(shù)時(shí)獲勝狀態(tài)為WIN,但是用if語句判斷如果投擲出的和為7或者連續(xù)投擲出六次平局,則游戲者該局為輸了LOSE。最后用while循環(huán)中的if語句為每一次輸贏和平局計(jì)數(shù)并顯示玩家的輸贏的語句。3.退出游戲然后調(diào)用utility.h文件中的UserSaysYes()函數(shù)讓玩家確定是否退出,退出后通過調(diào)用成員函數(shù)Show()顯示游戲結(jié)果,游戲結(jié)束!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退出游戲按任意鍵退出顯示結(jié)果圖2.3程序流程圖2.2.2類成員描述DiceGame類:描述控制骰子游戲。數(shù)據(jù)成員:numOfWin的類型為int,表示勝利數(shù)次。numOfLose的類型為int,表示失敗數(shù)次。numOfTie的類型為int,表示平局?jǐn)?shù)次。成員函數(shù):函數(shù)RollDice():模擬投擲一次骰子的函數(shù),返回值類型為int函數(shù)Help():獲得幫助,返回值類型為void函數(shù)Show():顯示統(tǒng)計(jì)結(jié)果,返回值類型void2.3程序?qū)崿F(xiàn)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<<"選手?jǐn)S骰子:"<<numOfDice1<<"+"<<numOfDice2<<"="<<sum<<endl;returnsum;}voidDiceGame::Help(){ cout<<"游戲者每次投擲兩顆骰子,每個(gè)骰子是一個(gè)正方體,有"<<endl; cout<<"6面上面分別標(biāo)有1、2、3、4、5、6個(gè)圓點(diǎn),當(dāng)骰子停止時(shí)"<<endl; cout<<"將每個(gè)骰子朝上的點(diǎn)的數(shù)相加,在第一次投擲骰時(shí),如果"<<endl;cout<<"所得到的和為7或11,那么游戲者為贏得勝利;如果所得到"<<endl;cout<<"的和為2、3或12,那么游戲者為輸?shù)袅?如果和為4、5、6"<<endl;cout<<"、8、9或10,那么為游戲者的點(diǎn)數(shù);如要想贏得勝利,必"<<endl;cout<<"須繼續(xù)投擲骰子,直到取得自已的點(diǎn)數(shù)為止,但是如果投"<<endl;cout<<"擲出的和為7或投擲6次仍未賺到該點(diǎn)數(shù),則游戲者為輸了."<<endl<<endl;}voidDiceGame::Show(){cout<<"選手游戲統(tǒng)計(jì):"<<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<<"請(qǐng)選擇:"<<endl;cout<<"1.獲得幫助"<<endl;cout<<"2.玩一手游戲"<<endl;cout<<"3.退出游戲"<<endl;cin>>select;if(select!=1&&select!=2&&select!=3){cout<<"請(qǐng)用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<<"點(diǎn)數(shù)"<<myPoint<<endl;}while(1){ if(status==WIN){ cout<<"恭喜你,贏得游戲!"<<endl; break;}if(status==LOSE){ cout<<"很遺憾,你輸了!"<<endl; break;}while(status==TIE){ cout<<"你現(xiàn)在是平局,是否要繼續(xù)游戲"; 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次,輸了{(lán) 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運(yùn)行結(jié)果1.初始界面圖2.4游戲初始界面2.若玩家輸入有誤,則需提醒玩家輸入正確的選項(xiàng)進(jìn)入游戲圖2.5提示正確進(jìn)入游戲界面3.若玩家中途忘記游戲規(guī)則,則課選擇選項(xiàng)1,進(jìn)入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)經(jīng)濟(jì)統(tǒng)計(jì)分析與研究方案集錦
- 客戶服務(wù)投訴處理表
- 防滲渠道施工方案
- 家裝施工方案范本
- 水電工法展示樣板施工方案
- 挖掘機(jī)打管樁施工方案
- 工廠環(huán)氧地坪工程施工方案
- 初一下人教版數(shù)學(xué)試卷
- 香港動(dòng)力源國(guó)際有限公司股東全部權(quán)益價(jià)值資產(chǎn)評(píng)估報(bào)告
- 寧波復(fù)式屋頂花園施工方案
- 2023年廣東廣州市中考語文真題及答案
- GB/T 7939.3-2023液壓傳動(dòng)連接試驗(yàn)方法第3部分:軟管總成
- 世界各國(guó)區(qū)號(hào)大全
- 認(rèn)識(shí)醫(yī)生和護(hù)士PPT完整版
- 第四章 新聞職業(yè)道德失范:虛假新聞1
- 護(hù)士延續(xù)注冊(cè)體檢表通用
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)勘測(cè)可研規(guī)劃設(shè)計(jì)與預(yù)算編制技術(shù)方案
- 【炒股必看】股票基礎(chǔ)學(xué)習(xí)-實(shí)戰(zhàn)篇、股票入門、股票基礎(chǔ)知識(shí)、股市入門、炒股、股市、股市入門基礎(chǔ)知識(shí)
- 穿堤涵閘工程施工方案
- 某污水處理廠設(shè)計(jì)倒置a2o工藝
- 貫入法砌筑砂漿抗壓強(qiáng)度報(bào)告
評(píng)論
0/150
提交評(píng)論