《軟件工程導(dǎo)論》實驗報告-貪吃蛇源程序加報告_第1頁
《軟件工程導(dǎo)論》實驗報告-貪吃蛇源程序加報告_第2頁
《軟件工程導(dǎo)論》實驗報告-貪吃蛇源程序加報告_第3頁
《軟件工程導(dǎo)論》實驗報告-貪吃蛇源程序加報告_第4頁
《軟件工程導(dǎo)論》實驗報告-貪吃蛇源程序加報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、軟件工程導(dǎo)論實驗報告 學(xué)院:班級:姓名:學(xué)號: 實驗?zāi)康?初步了解結(jié)構(gòu)化分析、設(shè)計方法的原理、步驟以及各階段的文檔,練習(xí)撰寫簡要的需求文檔、設(shè)計文檔。 實驗內(nèi)容 貪吃蛇程序:貪吃蛇游戲是一個深受人們喜愛的游戲,一條蛇在密閉的圍墻內(nèi),在圍墻內(nèi)隨機出現(xiàn)一個食物,通過按鍵盤上的四個光標(biāo)鍵控制蛇向上下左右四個方向移動,蛇頭撞到食物則表示食物被蛇吃掉,這時蛇的身體長一節(jié),同時計1分,接著又出現(xiàn)食物,等待被蛇吃掉,如果蛇在移動過程中,撞到墻壁或身體交叉蛇頭撞到自己的身體,游戲結(jié)束。根據(jù)編寫貪吃蛇的游戲規(guī)則,我們利用c語言來進行編輯具體步驟,從而使游戲能夠運行,根據(jù)編寫貪吃蛇程序,掌握軟件工程思想及要領(lǐng),進

2、一步鞏固編程思想和掌握畫圖函數(shù)底層,依據(jù)項目可行性研究的結(jié)果,進行需求分析和設(shè)計,編寫簡要的需求規(guī)格說明書,繪制程序流程圖。 實驗原理和步驟 當(dāng)前的建模方法主要有傳統(tǒng)的結(jié)構(gòu)化分析、設(shè)計方法(SA/D)和面向?qū)ο蠓治?、設(shè)計方法(OOA/D)兩種。 分析階段: 結(jié)構(gòu)化分析(SA)是一種建模技術(shù) ,它通過一定方法幫助開發(fā)人員定義系統(tǒng)需要什么功能,系統(tǒng)需要存儲和使用哪些數(shù)據(jù),以及為完成這些功能,系統(tǒng)需要什么樣的輸入和輸出以及如何把這些功能結(jié)合在一起來完成任務(wù)。設(shè)計階段:分總體設(shè)計和詳細(xì)設(shè)計兩階段??傮w設(shè)計階段的任務(wù)主要是確定系統(tǒng)由哪些模塊組成,以及這些模塊之間的相互關(guān)系;詳細(xì)設(shè)計階段的任務(wù)主要是設(shè)計每

3、個模塊的處理過程。常用的結(jié)構(gòu)化設(shè)計(SD)方法有面向數(shù)據(jù)流分析(DFA)的設(shè)計方法和面向數(shù)據(jù)的設(shè)計方法。DFA設(shè)計技術(shù)實施的通用步驟:(1)復(fù)查并精化DFD;(2)確定DFD類型;(3)把DFD映射到系統(tǒng)模塊結(jié)構(gòu),設(shè)計出模塊結(jié)構(gòu)的上層;(4)基于DFD逐步分解高層模塊,設(shè)計出下層模塊初步結(jié)構(gòu);(5)根據(jù)模塊獨立性原理,精化模塊結(jié)構(gòu),得到更為合理的軟件結(jié)構(gòu);(6)模塊接口描述;(7)修改和補充數(shù)據(jù)詞典;(8)制定測試計劃。詳細(xì)設(shè)計階段的任務(wù)主要是確定每個模塊的處理過程,包括(1)確定每個模塊的算法。(2)確定每一個模塊的數(shù)據(jù)組織。(3)為每個模塊設(shè)計一組測試用例。(4)編寫詳細(xì)設(shè)計說明書。詳細(xì)設(shè)

4、計階段采用的方法是結(jié)構(gòu)化程序設(shè)計(SP),與SA,SD方法銜接。目標(biāo)是給出可以直接用以編碼的程序邏輯結(jié)構(gòu),強調(diào)清晰第一。設(shè)計思路:這個程序的關(guān)鍵點是表示蛇的圖形以及蛇的移動。用一個小矩形塊表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用兩節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反方向移動,也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當(dāng)前方向上前移,當(dāng)游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當(dāng)按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實現(xiàn)是從蛇頭的新位置開始畫出蛇,這時,由于沒有清屏的原因,原來蛇的位置和新蛇的位置差一個單位

5、,所以看起來蛇會多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)和消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義了兩個結(jié)構(gòu)體:食物和蛇。 需求規(guī)格說明書 主要功能陳述:這是一款適合各年齡階層小游戲,它可以使人們休息時的一種放松方式也可以是孩子們的娛樂游戲;另外對于一些對于有一定的C語言基礎(chǔ)的,可以一邊在玩的時候,感受在其中的編程思想并且自己進行嘗試。IPO圖: 輸入 處理 輸出分?jǐn)?shù)狀況界面相應(yīng)游戲中執(zhí)行相應(yīng)的操作游戲玩法操作游戲系統(tǒng)操作是否進入游戲輸入密碼1判斷密碼正確2判斷操作正確性3進行操作執(zhí)行判斷4分?jǐn)?shù)統(tǒng)計5游戲界面構(gòu)建6游戲刷屏數(shù)據(jù)字典:先進行蛇與食物的定義,再制定游戲中蛇的光

6、標(biāo)處理方法,初始化蛇的位置坐標(biāo),接著創(chuàng)建整個游戲的活動界面從而確定游戲的整體的框架。初始化游戲的計分系統(tǒng),設(shè)置初始化分?jǐn)?shù),再增加分?jǐn)?shù)統(tǒng)計系統(tǒng)確立分?jǐn)?shù)處理的方法。接著編寫游戲的規(guī)則,蛇的走動方法與吃到食物增長的處理以及游戲中碰壁或碰到自身的處理,最后進行對游戲失敗的處理以及游戲的清屏處理。 詳細(xì)設(shè)計說明書 模塊的文字描述:main()主函數(shù):這是程序的大體流程,首先定義使用到的常數(shù)、全局變量及函數(shù)原型說明,然后初始化圖形系統(tǒng),調(diào)用函數(shù)畫出開始畫面,調(diào)用函數(shù),即玩游戲的具體過程與分?jǐn)?shù)的增加,游戲結(jié)束后調(diào)用關(guān)閉圖形系統(tǒng)清理屏幕,結(jié)束程序畫界面函數(shù): 設(shè)計游戲的活動界面,就是一個密封的圍墻加上一個數(shù)據(jù)

7、處理界面,利用printf來構(gòu)建游戲的大體框架與各個部分的具體內(nèi)容游戲具體過程函數(shù): 這一部分是游戲的重要組成,調(diào)用這個函數(shù)是游戲的主要部分,重點是一次次反復(fù)表示蛇與食物的新位置并進行對前一次的反復(fù)清屏。采用的方法是每次移動的時候從最后一節(jié)開始到倒數(shù)第二節(jié),將前一節(jié)的坐標(biāo)賦值給后一節(jié)的坐標(biāo),移動后只要把最后一節(jié)用背景色去除即可。蛇的方向通過w a s d鍵進行控制數(shù)組的加減。如果沒有食物,隨機出現(xiàn)食物;如果有食物,則顯示食物,蛇移動身體,根據(jù)蛇的方向改變坐標(biāo)值,并判斷蛇是否撞到了墻或自己吃了自己,如果出現(xiàn)這兩種情況之一,則蛇死,調(diào)用游戲結(jié)束函數(shù)結(jié)束本次游戲或重新開始。如果蛇吃到了食物,蛇身體長

8、一節(jié),數(shù)組元素增加一個,身體節(jié)數(shù)、分?jǐn)?shù)都進行相應(yīng)的改變。如果有按鍵,則識別鍵值。如果按鍵為Esc鍵則結(jié)束游戲,程序運行結(jié)束;如果所按鍵為方向鍵,則根據(jù)該鍵改變代表蛇方向的變量的值,要考慮相反方向鍵無效。游戲結(jié)束函數(shù):游戲結(jié)束,顯示游戲結(jié)束信息。游 戲 控 制 模 塊HIPO圖:輸入密碼開始游戲暫停游戲繼續(xù)游戲退出游戲程序開始初始化輸入密碼判斷開始游戲判斷是否出現(xiàn)死亡否進行玩家決定是否繼續(xù)游戲退出游戲(調(diào)用結(jié)束程序)否是是貪吃蛇流程圖詳細(xì)設(shè)計說明書:注意事項1程序流程圖應(yīng)符合結(jié)構(gòu)化思想:單入口、單出口。 編碼的原理包括幾方面,首先編碼風(fēng)格要強調(diào)“清晰易讀”,不能過分個性化或過多的插入個人技巧,要

9、做到自己編的程序?qū)τ谀切幊痰娜硕寄軌蜉p易理解并能夠在不足的地方進行修改。編碼過程中要注意變量或函數(shù)的名字要賦予相應(yīng)的意義,做到每個代碼都有自己存在的意義與作用。編碼中的表達(dá)式和語句要一目了然,排版風(fēng)格、循環(huán)語句風(fēng)格要保持一致,使人在閱讀你的程序是能夠很快理解你要表達(dá)的意思與目的。在函數(shù)宏的定義,常數(shù)的定義,注釋方面要全面。注釋包括序言性注釋、函數(shù)模塊注釋和程序語句注釋。 具體步驟 首先制定相應(yīng)的程序框架,然后根據(jù)實驗一種相應(yīng)的模塊進行相應(yīng)的填充。當(dāng)整體程序基本成型后,再通過反復(fù)測試,找出其中的不足,進行不斷地完善。然后對程序中相應(yīng)的模塊與需要理解的地方進行合理的簡潔的注釋,使他人能夠跟快的

10、理解。對每個函數(shù)前寫模塊注釋,重要語句寫功能性注釋,變量或函數(shù)的名字要有意義,排 版,從而使程序變得美觀易懂。 程序源代碼 #include #include #include #include #include #include int snake_len=1;/蛇的長度int snake_loc502=31,12;/整條蛇的位置,最長為50int snake_head2=31,12;/蛇頭位置,初始值為11,12;int food2;/食物位置char snake_direction=s;int delay=200; /蛇每delay個時間走一步int eat_flag=0;/1表示吃了食

11、物,0表示未吃int liv_stat=0;/1表示死了,游戲該結(jié)束了;0表示還活著void gotoxy(int x, int y)/定位光標(biāo),x為行坐標(biāo),y為列坐標(biāo) COORD pos = x,y; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); void hidden()/隱藏光標(biāo) HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hO

12、ut,&cci); cci.bVisible=0;/賦1為顯示,賦0為隱藏 SetConsoleCursorInfo(hOut,&cci);void init()/初始化 int i; snake_len=1;/蛇的長度 snake_loc00=31;/整條蛇的位置 snake_loc01=12; snake_head0=31;/蛇頭位置,初始值為11,12; snake_head1=12; snake_direction=s; delay=200; eat_flag=0; liv_stat=0; for(i=1;i50;i+) snake_loci0=0;/整條蛇的位置 snake_loci

13、1=0; void create_window()/創(chuàng)建窗口 gotoxy(0,0); printf(*); printf(* * *); printf(* * *); printf(* * 分?jǐn)?shù):1 *); printf(* * 按鍵說明: *); printf(* * 上:w *); printf(* * 下:s *); printf(* * 左:a *); printf(* * 右:d *); printf(* * 暫停:空格 *); printf(* * 退出:Esc鍵 *); printf(* * *); printf(* * *); printf(* * *); printf(*

14、* *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(*);void update_score()/更新分?jǐn)?shù) gotoxy(73,3); printf(%2d,snake_len);void create_food()/產(chǎn)生食物的位置 time_t t; srand(time(&t); while(1) food0=rand()%62+1;/生成162之間的隨機數(shù),其中random函數(shù)

15、生成077之間的隨機數(shù) food1=rand()%22+1;/生成122之間的隨機數(shù),其中random函數(shù)生成017之間的隨機數(shù) if(food0!=snake_head0&food1!=snake_head1)break; gotoxy(food0,food1); printf(*);void direction() char keyhit=0,i; while(kbhit()!=0)keyhit=getch(); if( (keyhit=a) | (keyhit=d) | (keyhit=w) | (keyhit=s) & (abs(snake_direction/16-keyhit/16

16、)=1) )snake_direction=keyhit; else if(keyhit= ) gotoxy(30,24); system(pause); gotoxy(30,24); for(i=0;i19;i+)printf( ); else if(keyhit=27)exit(0);void state()/判定蛇死沒死 if(snake_head062|snake_head122)liv_stat=1;void eat()/判定蛇吃沒吃上,并對根據(jù)方向?qū)ι哳^位置進行更新 switch(snake_direction) case w: snake_head1-;break; case s

17、: snake_head1+;break; case a: snake_head0-;break; case d: snake_head0+;break; if(food0=snake_head0) & (food1=snake_head1) ) eat_flag=1; switch(snake_direction) case w: snake_head1-;break; case s: snake_head1+;break; case a: snake_head0-;break; case d: snake_head0+;break; void show_snake()/更新蛇在屏幕中的位置

18、 gotoxy(snake_head0,snake_head1); printf(*); gotoxy(snake_locsnake_len-10,snake_locsnake_len-11); printf( );void update_maxtrix()/更新存儲蛇位置的數(shù)組 int i; if(eat_flag!=1) for(i=snake_len-1;i0;i-) snake_loci0=snake_loci-10; snake_loci1=snake_loci-11; else snake_len+; if(snake_len3 & delay100)delay-=30; for(

19、i=snake_len-1;i1;i-) snake_loci0=snake_loci-20; snake_loci1=snake_loci-21; snake_loc10=food0; snake_loc11=food1; eat_flag=0; create_food(); update_score(); snake_loc00=snake_head0; snake_loc01=snake_head1;void main() int flag; long password=123456; int i=1; long pw; printf(請輸入密碼n); scanf(%ld,&pw); i

20、f(password!=pw) while(1) i+; printf(密碼錯誤n請重新輸入:); scanf(%ld,&pw); if(password=pw) printf(密碼正確,歡迎使用n); flag=1; break; if(i=3) printf(請稍后再試n); flag=0; break; else printf(密碼正確,歡迎使用); flag=1; LOOP: system(cls); init(); create_window(); hidden(); create_food(); while(1) int i; Sleep(delay); direction();

21、eat(); show_snake(); update_maxtrix(); state(); if(liv_stat=1) for(i=1;isnake_len;i+) gotoxy(snake_loci0,snake_loci1); printf( ); gotoxy(food0,food1); printf( ); gotoxy(30,12); printf(Game over!n); gotoxy(25,13); printf(繼續(xù)請按y,退出請按n); while(1) i=getch(); if(i=y)goto LOOP; else if(i=n)break; break; 注意事項1模塊的邏輯描述應(yīng)該清晰第一、使用標(biāo)準(zhǔn)的、規(guī)范的控制

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論