c語言課程設(shè)計報告俄羅斯方塊改進版_第1頁
c語言課程設(shè)計報告俄羅斯方塊改進版_第2頁
c語言課程設(shè)計報告俄羅斯方塊改進版_第3頁
c語言課程設(shè)計報告俄羅斯方塊改進版_第4頁
c語言課程設(shè)計報告俄羅斯方塊改進版_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計設(shè)計題目俄羅斯方塊改進學(xué)生姓名學(xué)號專業(yè)班級指導(dǎo)教師2016年4月20日目錄1. 課程設(shè)計目的.錯誤!未定義書簽。2. 功能分析錯誤!未定義書簽。3. 程序設(shè)計實現(xiàn)過程錯誤!未定義書簽。程序總體設(shè)計結(jié)構(gòu)錯誤!未定義書簽。界面設(shè)計.錯誤!未定義書簽。重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計.錯誤!未定義書簽。函數(shù)設(shè)計.錯誤!未定義書簽。4. 運行效果.錯誤!未定義書簽。5. 源代碼詳解.錯誤!未定義書簽。6. 參考文獻.錯誤!未定義書簽。俄羅斯方塊改進1 .課程設(shè)計問題據(jù)百度百科,俄羅斯方塊(Tetris)是一款由俄羅斯人阿列克謝帕基特諾夫于1984年6月發(fā)明的休閑游戲。游戲的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲

2、自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。要求支持鍵盤操作和7種不同類型方塊的旋轉(zhuǎn)變換,并且界面上顯示下一個方塊的提示以及當前的玩家的得分,隨著游戲的進行,等級越高,游戲難度越大,即方塊的下落速度越快,相應(yīng)的等級,等級越高,消去一行所得到的分數(shù)越高,為玩家提供了不同的選擇。2 .功能分析俄羅斯方塊游戲需要解決的問題包括:按任意鍵開始游戲,隨機產(chǎn)生方塊并自動下移用Esc鍵退出游戲。用t鍵變換方塊用鍵和一鍵左右移動方塊用I鍵使方塊加速下移用空格鍵使方塊暫停能正確判斷滿行并消行、計分、定級別設(shè)定游戲方塊為不同形狀重點:*游戲面包的數(shù)據(jù)結(jié)構(gòu):二維數(shù)組*7種形狀方塊的數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體保

3、存每種形狀方塊的坐標3 .程序設(shè)計實現(xiàn)過程程序總體設(shè)計結(jié)構(gòu)首先初始化進入圖形模式,進入歡迎界面,玩家按任意進入主菜單界面,按鍵進入游戲界面,鍵然后設(shè)置新的時鐘中斷。開始游戲后,進入該程序最核心的部分一一處理和實現(xiàn)進行過程中的各種事件和函數(shù)。在處理中判斷游戲是否結(jié)束,如果沒有結(jié)束,則重新開始游戲,否則結(jié)束游戲。詳解如下:(1)游戲方塊預(yù)覽功能。在游戲過程中,當在游戲底板中出現(xiàn)一個游戲方塊時,必須在游戲方塊預(yù)覽區(qū)域中出現(xiàn)下一個游戲方塊,這樣有利于游戲玩家控制游戲的策略。由于在此游戲中存在19種不同的游戲方塊,所以在游戲方塊預(yù)覽區(qū)域中需要顯示隨機生成的游戲方塊。(2)游戲方塊控制功能。通過各種條件的

4、判斷,實現(xiàn)對游戲方塊的左移、右移、快速下移、自由下落、旋轉(zhuǎn)功能,以及行滿消除行的功能。開始游戲游戲結(jié)束退出功能恢復(fù)原有的時鐘中斷關(guān)閉圖形模式返回菜單游戲執(zhí)行主流程圖(3)游戲顯示更新功能。在判斷鍵值時,有左移VK_LEFT右移VK_RIGHT下移VK_DOW般形旋轉(zhuǎn)VK_UP退出VK_ESCi值的判斷。當游戲方塊左右移動、下落、旋轉(zhuǎn)時,要清除先前的游戲方塊,用新坐標重繪游戲方塊。當消除滿行時,要重繪游戲底板的當前狀態(tài)。(4)游戲速度分數(shù)更新功能。在游戲玩家進行游戲過程中,需要按照一定的游戲規(guī)則給玩家計算游戲分數(shù)。比如,消除一行加10分。當游戲分數(shù)達到一定數(shù)量之后,需要給游戲者進行等級的上升,每

5、上升一個等級,游戲方塊的下落速度將加快,游戲的難度將增加。(5)游戲幫助功能。玩家進入游戲后,將有對本游戲如何操作的友情提示。主函數(shù):voidmain()InitializeGraph();SetTimer(newtimer);/*設(shè)置新的時鐘中斷*/while(1)StartGame();ProcessInGame();if(GameOver()break;bOver=FALSE;KillTimer();closegraph();界面設(shè)計分為左右兩個部分:* 左邊為游戲面板* 右邊有三部分:下一個形狀提示框、速度框和計分框重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計1)定義方塊形狀:定義如下的結(jié)構(gòu)體來表示每一個形

6、狀:structblockintarrXY8;intnColor;intnNext;/*保存某一形狀信息的結(jié)構(gòu)體*/StructSHAPEshapesMAX_BOX=口口口口口口口口口口口口口口口口0x88,0xc0,CYAN,1,0xe8,0x0,CYAN,2,0xc4,0x40,CYAN,3,0x2e,0x0,CYAN,0,口口口口口口口口口口口口口口0x44,0xc0,MAGENTA,5,0x8e,0x0,MAGENTA,6,0xc8,0x80,MAGENTA,7,0xe2,0x0,MAGENTA,4,口口口口口口口口0x8c,0x40,YELLOW,9,0x6c,0x0,YELLOW,

7、8,口口口口口口口口0x4c,0x80,BROWN,11,0xc6,0x0,BROWN,10,口口口口口口口口13,14,15,12,口口口口0x4e,0x0,0x8c,0x80,0xe4,0x0,WHITE,WHITE,WHITE,WHITE,0x4c,0x40,口口口口口口口口口口口口0x88,0x88,RED,17,0xf0,0x0,RED,16,口口口口0xcc, 0x0, BLUE, 18),2)定義游戲的主界面:寬10、高20的游戲板( 1) 數(shù)據(jù)結(jié)構(gòu):全局數(shù)組Gameboard1222,1表示已有的方塊,0表示這個位置空著。在10*20基礎(chǔ)上各自加2行、2列為了便于判斷形狀在移動

8、時是否到邊、到底。整個屏幕的坐標系原先為640*480。在此游戲中,將16個像素定義為一個方格的邊長,所以坐標系轉(zhuǎn)變成為了40*30(640/16=40,480/10=30)。( 2) 玩家進行游戲時,需要對游戲界面進行初始化工作。此代碼被main()函數(shù)調(diào)用。主要進行的工作如下: 循環(huán)調(diào)用line()函數(shù)繪制當前游戲板。 調(diào)用nScore()函數(shù)顯示初始的成績,初始成績?yōu)?。 調(diào)用npeed()函數(shù)顯示初始的速度(等級),初始速度1。*注:x,y為左上角坐標m,n對應(yīng)于Vertical_boxs,Horizontal_boxs分別表示縱橫方向上方塊的個數(shù)(以方塊為單位)*BOARD_LEFT

9、_X,BOARD_LEFT_Y*函數(shù)設(shè)計24 個函數(shù)組成。1、本程序有主函數(shù)和個函數(shù)組成:本程序總共由2、函數(shù)相互作用關(guān)系見下圖初始化模式進入歡迎界win()主菜單 menu()游戲介紹help ()初始化圖形模式Ini忡zeGraph(設(shè)置新的時鐘中斷SetTimer(* (void)是Interrupt ()(*IntProc) (void)事開始游戲恢復(fù)原來的時鐘 中斷KillTimer()InitializeGameboar d()關(guān)閉圖形模型HandleRight(int,int int *y)返回到主菜單menu ()處理在游戲中的 各種事件ProcessInGame(退出程序游戲

10、是否結(jié)束GameOver()*x,IsGameOver()DrawBlock(int, int,int,int)IsConflict(in t,int,int)KillLine(int)HandleUp(int *,int *x, int *y)HandleLeft(int ,int *x, int *y)HandleDown(int,int*x, int*y)DrawSquare (int,int)IsLineFull(i nt)KillLine(int)四、函數(shù)運用函數(shù)原型函數(shù)功能函數(shù)處理描述voidinterrupt新的時鐘中調(diào)用(*oldtimer)newtimer(void)斷處理函

11、數(shù)()函數(shù)語句柄,計時器自動加1voidSetTimer(void指向原來時interrupt(*IntProc)(v鐘中斷處理oid)過程入口的中斷處理函數(shù)(句柄)voidKillTimer()恢復(fù)原有的調(diào)用setvect()恢復(fù)時鐘中斷處原有的時鐘中斷處理過程理過程voidInitializeGraph()初始化圖形1、調(diào)用initgraph()模式切換到圖形模式2、初始化若發(fā)生錯誤,則返回錯誤密他void初始化游戲1、調(diào)用InitializeGameboard()面板以及下bar()rectangle()T狀提不等庫函數(shù)繪圖函數(shù)框、計分框和繪制游界面2、調(diào)難度框用outtextxy()函

12、數(shù)顯示文字voidDrawSquare(intx,在坐標(x,y)調(diào)用庫函數(shù)bar()繪inty)處畫方塊制方塊voidDrawBlock(int在坐標調(diào)用DrawSqueare()Blockindex,intsx,int(sx,sy)處函數(shù)繪制形狀sy,intcolor)繪制顏色為color的形狀intIsConflict(int判斷形狀是無沖突返回0,有沖Blockindex,intx,int否存在于坐突返回1y)標(x,y)處voidHandleLeft(int按下左方向調(diào)用IsConflic()函BlockIndex,int*x,int鍵時的處理數(shù)判斷形狀是否可*y)函數(shù)以左移,voi

13、dHandleRight(int按下右方向調(diào)用IsConflic()函BlockIndex,int*x,int鍵時的處理數(shù)判斷形狀是否可*y)函數(shù)以右移,voidHandleUp(int按下上方向調(diào)用IsConflic()函*BlockIndex,int*x,鍵(旋轉(zhuǎn)鍵)數(shù)判斷形狀是否可int*y)時的處理函以旋轉(zhuǎn),數(shù)intHandleDown(int按下向下方形狀在自由卜落返BlockIndex,int*x,int1可鍵或者自回0,無法卜.落了返*y)由卜落時的處理函數(shù)回1,并做相應(yīng)處理intIsLineFull(inty)判斷y行是否已被填滿填滿返回1,否則返回0voidKillLine(

14、inty)消去第y行函數(shù)用于處理刪除一滿行的情況。Y指明具體哪一行為滿行,并將消去的行置為背景色intKillLines(inty)消去第y行以及與第y行連續(xù)的上面被填滿的行返回消去的行數(shù)intIsGameOver()判斷游戲是否結(jié)束游戲結(jié)束返回1,否則返回0intGameOver()在界面上輸出游戲結(jié)束的信息,并根據(jù)用戶按鍵選擇決定是否退出游戲退出游又返回1,否則返回0voidStartGame()游戲開始時1、繪制界面需要調(diào)調(diào)用的函數(shù)用函數(shù)InitializeGameboard()2、接卜來初始化游戲面板的各個方塊和一些全局變量的初值。voidProcessInGame()核心函數(shù),主要用

15、于處理在游戲中的各種事件(如按下各種按鍵)調(diào)用HandleUpOHandleDown()、HandleLeft()、HandleRight()等事件處理函數(shù)Voidmain()主流程函數(shù)主函數(shù)入口,整個游戲的主控部分4.運行效果5.源代碼詳解#include<>#include<>#include<>#include<>參考文獻C程序設(shè)計第四版譚浩強著清華大學(xué)出版社出版«C語言程序設(shè)計劉國成科學(xué)出版社從問題到程序裘宗燕北京大學(xué)出版社計算機二級教程劉瑞挺南開大學(xué)出版社«C語言程序設(shè)計基礎(chǔ)教程陳朔鷹,兵器工業(yè)出版社5C語言程序設(shè)計姜仲秋南京大學(xué)出版社設(shè)計題目俄羅斯方塊的改進成績課程設(shè)計主要內(nèi)容設(shè)計首先對游戲UI進行的草圖的繪制,設(shè)計出游戲UI的大小和方位。通過合理的設(shè)置游戲UI界面,會給游戲體驗著帶來更加愉悅的游戲體驗,并留下7刻的印象。UI初步繪制完成之后就是結(jié)構(gòu)化程序比較重要的一了,那就是算法的合理選擇,一個程序的好壞不能單單對其UI的評價,而是算法是否合理,程序資源調(diào)配時否達到最優(yōu)化的程度等。本程序采用數(shù)組與UI界面相結(jié)合的方法進行游戲規(guī)則判斷。由于采用TC

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論