《《面向對象程序設計課程設計》報告解析》由會員分享,可在線閱讀,更多相關《《面向對象程序設計課程設計》報告解析(15頁珍藏版)》請在裝配圖網上搜索。
1、
福建農林大學計算機與信息學院
計算機類
課程設計報告
課程名稱:
面向對象程序設計(課程設計)
課題名稱:
猜數(shù)字游戲
姓 名:
學 號:
專 業(yè):
計算機科學與技術
年 級:
2012級
指導教師:
職 稱:
講師
2013年11月
面向對象程序設計(課程設計)成績評定表
評分項目
分值
得分
程序(系統(tǒng))
原創(chuàng)性
15
程序功能
25
代碼質量(健壯性和可擴展性)
20
核心代碼和功能模塊注釋
10
2、
設計報告
課題來源&任務描述
5
系統(tǒng)設計
10
代碼編寫與實現(xiàn)結果說明
10
團隊合作能力
分工協(xié)作&聯(lián)合研發(fā)
5
成績總計
指導老師簽字:
目 錄
1. 課題來源 1
2. 任務描述 1
2.1. 課題的總體結構 1
2.2. 核心功能模塊與類設計 2
2.3. 任務分工與工作量說明 3
3. 程序(系統(tǒng))詳細設計 3
4. 程序(系統(tǒng))實現(xiàn)與測試 5
5. 分析與討論 11
6. 結束語 12
- II -
1. 課題來源
該作品為原創(chuàng)。
課題靈感是能否做一個小游戲,尋
3、找了很多小游戲比如俄羅斯方塊等,發(fā)現(xiàn)其太復雜以目前的水平無法完成,于是就選擇了一個比較簡單的猜數(shù)字游戲,編寫益智類的游戲可以讓我們日常生活中自己使用來達到增加樂趣的作用。
猜數(shù)字游戲的原游戲規(guī)則:通常由兩個人玩,一方出數(shù)字,一方猜。出數(shù)字的人要想好一個沒有重復數(shù)字的4位數(shù),不能讓猜的人知道。猜的人就可以開始猜。每猜一個數(shù)字,出數(shù)者就要根據(jù)這個數(shù)字給出幾A幾B,其中A前面的數(shù)字表示位置正確的數(shù)的個數(shù),而B前的數(shù)字表示數(shù)字正確而位置不對的數(shù)的個數(shù)。
如正確答案為 5234,而猜的人猜 5346,則是 1A2B,其中有一個5的位置對了,記為1A,而3和4這兩個數(shù)字對了,而位置沒對,因此記為 2B
4、,合起來就是 1A2B。
接著猜的人再根據(jù)出題者的幾A幾B繼續(xù)猜,直到猜中(即 4A0B)為止。
原游戲規(guī)則是兩個人玩,于是我們想到了將規(guī)則改為人機對戰(zhàn),電腦出題玩家來猜。
2. 任務描述
猜數(shù)字游戲:產生隨機數(shù),統(tǒng)計完全猜中的數(shù)字的個數(shù)以及統(tǒng)計猜中但位置錯誤數(shù)字的個數(shù),并給出提示。最后計算積分。此程序體現(xiàn)了面向對象程序設計的繼承性和封裝性。
2.1. 課題的總體結構
contrast
-A:int
-B:int
-n1:int
-n2:int
-n3:int
-n4:int
+setNum():void
+count():void
+getA():int
5、
+getB():int
+setA(int a):void
score
-s1:int
-s2:int
-s3:int
+score():
+getS1():int
+getS2():int
+getS3():int
+setS1(int b1):void
+setS2(int b2):void
+setS3(int b3):void
類層次結構圖:
randNumber
-num2:int
-num3:int
-num4:int
-ran():int
+randNum():void
+getnum1():int
+getnum2():int
+
6、getnum3():int
+getnum4():int
程序有三個類,
其中randNumber類用來產生隨機數(shù),
contrast類用來做對比并得出猜數(shù)字的結果,
score類用來讀取文件內容并統(tǒng)計分數(shù),
主函數(shù)進行循環(huán)輸入猜數(shù)字,并將結果輸入文件。
讀取文件信息
程序的功能結構圖:
猜數(shù)字
隨機數(shù)的產生
輸入所猜測的數(shù)據(jù)
判斷正誤,給出提示
計算積分
更新文件信息
2.2. 核心功能模塊與類設計
采用表格的形式,按照類在課題中的作用,列出核心類的功能定義和主要函數(shù)接口。
randNumber類
實現(xiàn)答案所需的
7、隨機數(shù)的產生
randNum():void//制造隨機數(shù)
getnum1():int//獲取隨機數(shù)的第一位
getnum2():int//獲取隨機數(shù)的第二位
getnum3():int//獲取隨機數(shù)的第三位
getnum4():int//獲取隨機數(shù)的第四位
contrast類
核心類,實現(xiàn)猜數(shù)字游戲主要玩法的設計
setNum():void//用于設置用戶輸入的數(shù)據(jù)
count():void//統(tǒng)計幾A幾B
getA():int//獲取A的值
getB():int//獲取B的值
setA(int a):void//設置A的值
score類
用于顯示和統(tǒng)計分數(shù)
8、score()://從文件獲取排行榜數(shù)據(jù)并顯示
getS1():int
getS2():int
getS3():int//獲取排行榜積分
setS1(int b1):void
setS2(int b2):void
setS3(int b3):void//更改排行榜
2.3. 任務分工與工作量說明
成員名字
任務分工
工作量(%)
韓澤宇
(1) 程序的初期設計制作
(2) 對積分統(tǒng)計顯示錯誤的BUG進行修復,對循環(huán)的條件進行改變。
(3) 增加了文件保存功能,記錄最高分并保存至文件
(4) 程序BUG測試及調試
40%
陳智杰
(1)增加了變量對猜數(shù)字的
9、次數(shù)進行限制,使得游戲更有挑戰(zhàn)性
(2)增加了在猜對數(shù)字時的(Y/N)退出功能,并能在退出時統(tǒng)計分數(shù)
(3)程序BUG測試及調試
30%
鐘揚
(1)程序的外觀界面設計
(2)增加了對輸入數(shù)字的限制,限定輸入的數(shù)字每位必須各不相同,加強了程序健壯性
(3)增加了積分統(tǒng)計
(4)程序BUG測試及調試
30%
3. 程序(系統(tǒng))詳細設計
按照程序(系統(tǒng))的總體結構,詳細介紹程序中各個類和函數(shù)的設計思想和實現(xiàn)方法,并以圖的方式說明程序的流程圖。
randNumber類實現(xiàn)答案所需的隨機數(shù)的產生
contrast類為核心類,繼承至randNumber類,實現(xiàn)猜數(shù)字游戲主要
10、玩法的設計
開始
讀取并顯示排行榜記錄
產生隨機數(shù)字
輸入所猜的數(shù)字
與生成的隨機數(shù)完全相同?
輸出猜數(shù)字的提示(?A?B)
N
Y
猜數(shù)字的機會減少一次
輸出“你猜對了”
次數(shù)耗盡?
N
計算并打印積分
Y
Y
是否繼續(xù)?
N
游戲結束
統(tǒng)計總分,判斷是否上榜
更新排行榜
4. 程序(系統(tǒng))實現(xiàn)與測試
11、
(1) 給出典型的程序(系統(tǒng))執(zhí)行結果圖。
開始界面:
猜數(shù)字界面:
猜對時的顯示界面:
破紀錄時的顯示界面:
更新后的排行榜:
(2) 程序(系統(tǒng))實現(xiàn)的功能
隨機數(shù)字的產生:產生四個隨機數(shù)字分別代表四位數(shù)的四個位
數(shù)字正誤判斷:給出既猜對位置也猜對的數(shù)字的個數(shù)以及猜對但是位置不對的數(shù)字的位置。
積分計算:猜錯按0分算,一次就猜對100分,兩次猜對90分,三次80分……以此類推,最后一次猜對得20分。
記錄成績的功能:給出排行榜記錄前三名的成績,保存在score.txt文件中。
(3) 根據(jù)課題的特性,列出帶有詳細注釋的核心功能模塊或類
12、代碼;
源程序代碼:
隨機數(shù):
class randNumber{
int num1;
int num2;
int num3;
int num4;
int ran(){
srand( (unsigned)time( NULL ) );
for(int i=0;i<10;i++){
return (rand()%10);
}
}//返回0-9的一個隨機數(shù)
public:
void randNum(){
cout<<"正在產生隨機數(shù)..."<
13、1;
num2=-1;
num3=-1;
num4=-1;//清除上次的隨機數(shù)記錄,使得下次產生隨機數(shù)與上次不沖突
num1=ran();
do{
num2=ran();
}
while(num2==num1);
do{
num3=ran();
}
while(num3==num1||num3==num2);
do{
num4=ran();
}
while(num4==num1||num4==num2||num4==num3);
};//產生四個不同的隨機數(shù)
int getnum1()
14、{
return num1;
}
int getnum2(){
return num2;
}
int getnum3(){
return num3;
}
int getnum4(){
return num4;
}
};//獲取隨機數(shù)的方法
用于比較:
class contrast:public randNumber{
int A;
int B;//用于記錄結果(幾A幾B)
int n1;
int n2;
int n3;
int n4;//(用于記錄輸入的數(shù)字)
public:
void setNum(int
15、 a1,int a2,int a3,int a4){
n1=a1;
n2=a2;
n3=a3;
n4=a4;
}
void count(){
A=0;
B=0;//每一次都重置A、B
if(n1==getnum1()){A++;}
if(n2==getnum2()){A++;}
if(n3==getnum3()){A++;}
if(n4==getnum4()){A++;}//統(tǒng)計完全猜中的數(shù)字的個數(shù)(A)
if(n1==getnum2()||n1==getnum3()||n1==getnum4()){B++;}
16、
if(n2==getnum1()||n2==getnum3()||n2==getnum4()){B++;}
if(n3==getnum2()||n3==getnum1()||n3==getnum4()){B++;}
if(n4==getnum2()||n4==getnum3()||n4==getnum1()){B++;}//統(tǒng)計猜中但位置錯誤數(shù)字的個數(shù)(B)
}
int getA(){
return A;
}
int getB(){
return B;
}
void setA(int a){
A=a;
}
};
class s
17、core{
int s1;
int s2;
int s3;//用于記錄前三名積分
public:
int getS1(){
return s1;
}
int getS2(){
return s2;
}
int getS3(){
return s3;
}//用于獲取積分的方法
void setS1(int b1){
s1=b1;
}
void setS2(int b2){
s2=b2;
}
void setS3(int b3){
s3=b3;
}//用于最后修改積分排名
score(){
18、s1=0;
s2=0;
s3=0;
FILE *fp;
fp=fopen("score.txt","r");//打開文件
if(!fp){
cout<<"當前暫無積分排名"<
19、scanf(fp,"%d",&s3);
cout<<" 第三名:"<
20、<
21、cout<
22、
do{
cin>>yn;
if(yn=='N'||yn=='n'){number.setA(-1);}
}while(yn!='Y'&&yn!='y'&&yn!='N'&&yn!='n');//當輸入格式正確時退出循環(huán)
}
if(number.getA()!=4&&number.getA()!=-1){
cout<<"你還有"<
23、時選擇N退出循環(huán)
if(number.getA()!=4&&number.getA()!=-1){
cout<<"機會用完了,游戲結束"<
24、
if(s>score.getS3()&&sscore.getS2()&&sscore.getS1()){
score.setS3(score.getS2());
score.setS2(score.getS1());
score.setS
25、1(s);
}//當成績大于第一名時修改第一、二、三名成績
if (s>score.getS3()){
cout<<"你破記錄了!你的成績將寫入新記錄中"<
26、時會提示輸入數(shù)字錯誤并返回重新輸入。
比如輸入錯誤格式的數(shù)字后(數(shù)字中有兩個1,位數(shù)重復)
結果提示重新輸入正確格式的數(shù)字
5. 分析與討論
程序提供了一個猜數(shù)字的游戲,程序解決了產生隨機數(shù),判斷猜中數(shù)字的位數(shù)、計算積分,保存成績的問題。
但是在產生隨機數(shù)的方面處理不夠完善,隨機數(shù)產生耗時過長。
在進行此程序設計的過程中,發(fā)現(xiàn)我們還有很多方面不會,必須一邊查書一邊進行設計,其中文件讀取和寫入功能還用到了百度,下次進行設計時會拓展自己的知識。
6. 結束語
進行此課程設計,讓我們發(fā)現(xiàn)自己很多的不足,也在設計的過程中進行查詢,得到很多以前不會的知識,并且發(fā)現(xiàn)團隊合作的重要性,只有團隊更好地合作才能寫出更好,更精簡的代碼。
- 12 -