九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

c語(yǔ)言俄羅斯方塊游戲程序設(shè)計(jì)報(bào)告.doc

  • 資源ID:9447875       資源大小:907KB        全文頁(yè)數(shù):33頁(yè)
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

c語(yǔ)言俄羅斯方塊游戲程序設(shè)計(jì)報(bào)告.doc

C語(yǔ)言課程設(shè)計(jì)報(bào)告主標(biāo)題: C語(yǔ)言課程設(shè)計(jì) 副標(biāo)題: 俄羅斯方塊游戲 -界面設(shè)計(jì)姓 名: 指導(dǎo)教師: 院 系: 專 業(yè): 班 級(jí): 小組成員: 提交日期 俄羅斯方塊程序設(shè)計(jì)報(bào)告一、 問(wèn)題描述: 要求支持鍵盤操作和7種不同類型方塊的旋轉(zhuǎn)變換,并且界面上顯示下一個(gè)方塊的提示以及當(dāng)前的玩家的得分,隨著游戲的進(jìn)行,等級(jí)越高,游戲難度越大,即方塊的下落速度越快,相應(yīng)的等級(jí),等級(jí)越高,消去一行所得到的分?jǐn)?shù)越高,為玩家提供了不同的選擇。二、 功能分析:俄羅斯方塊游戲需要解決的問(wèn)題包括:按任意鍵開(kāi)始游戲,隨機(jī)產(chǎn)生方塊并自動(dòng)下移用Esc鍵退出游戲。 用鍵變換方塊用鍵和 鍵左右移動(dòng)方塊用鍵使方塊加速下移用空格鍵使方塊直接下移能正確判斷滿行并消行、計(jì)分、定級(jí)別能正確計(jì)時(shí)設(shè)定游戲?yàn)椴煌?jí)別,級(jí)別越高難度越大重點(diǎn): *游戲面包的數(shù)據(jù)結(jié)構(gòu):二維數(shù)組 *7種形狀方塊的數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體保存每種形狀方塊的坐標(biāo)、顏色三、程序設(shè)計(jì):1、程序總體設(shè)計(jì)結(jié)構(gòu):首先初始化進(jìn)入圖形模式,進(jìn)入歡迎界面,玩家按任意進(jìn)入主菜單界面,按鍵進(jìn)入游戲界面,鍵然后設(shè)置新的時(shí)鐘中斷。開(kāi)始游戲后,進(jìn)入該程序最核心的部分處理和實(shí)現(xiàn)進(jìn)行過(guò)程中的各種事件和函數(shù)。在處理中判斷游戲是否結(jié)束,如果沒(méi)有結(jié)束,則重新開(kāi)始游戲,否則結(jié)束游戲。詳解如下:(1)、游戲方塊預(yù)覽功能。在游戲過(guò)程中,當(dāng)在游戲底板中出現(xiàn)一個(gè)游戲方塊時(shí),必須在游戲方塊預(yù)覽區(qū)域中出現(xiàn)下一個(gè)游戲方塊,這樣有利于游戲玩家控制游戲的策略。由于在此游戲中存在19種不同的游戲方塊,所以在游戲方塊預(yù)覽區(qū)域中需要顯示隨機(jī)生成的游戲方塊。(2)、游戲方塊控制功能。通過(guò)各種條件的判斷,實(shí)現(xiàn)對(duì)游戲方塊的左移、右移、快速下移、自由下落、旋轉(zhuǎn)功能,以及行滿消除行的功能。 俄羅斯方塊游戲 初始化圖形模式 (歡迎界面) 進(jìn)入菜單選項(xiàng)游戲說(shuō)明游戲幫助開(kāi)始新游戲退出游戲游戲排名 開(kāi)始游戲游戲顯示更新功能游戲速度分?jǐn)?shù)更新功能游戲結(jié)束退出功能游戲方塊控制功能游戲方塊預(yù)覽功能否游戲是否結(jié)束是恢復(fù)原有的時(shí)鐘中斷關(guān)閉圖形模式返回菜單 游戲執(zhí)行主流程圖(3)、游戲顯示更新功能。在判斷鍵值時(shí),有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、變形旋轉(zhuǎn)VK_UP、退出VK_ESC鍵值的判斷。當(dāng)游戲方塊左右移動(dòng)、下落、旋轉(zhuǎn)時(shí),要清除先前的游戲方塊,用新坐標(biāo)重繪游戲方塊。當(dāng)消除滿行時(shí),要重繪游戲底板的當(dāng)前狀態(tài)。 (4)、游戲速度分?jǐn)?shù)更新功能。在游戲玩家進(jìn)行游戲過(guò)程中,需要按照一定的游戲規(guī)則給玩家計(jì)算游戲分?jǐn)?shù)。比如,消除一行加10分。當(dāng)游戲分?jǐn)?shù)達(dá)到一定數(shù)量之后,需要給游戲者進(jìn)行等級(jí)的上升,每上升一個(gè)等級(jí),游戲方塊的下落速度將加快,游戲的難度將增加。(5)、游戲幫助功能。玩家進(jìn)入游戲后,將有對(duì)本游戲如何操作的友情提示。主函數(shù):void main() InitializeGraph(); SetTimer(newtimer); /*設(shè)置新的時(shí)鐘中斷*/ while(1) StartGame(); ProcessInGame(); if(GameOver() break; bOver = FALSE; KillTimer(); closegraph();2、界面設(shè)計(jì) 分為左右兩個(gè)部分: *左邊為游戲面板 *右邊有三部分:下一個(gè)形狀提示框、速度框和計(jì)分框3、重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1)定義方塊形狀:定義如下的結(jié)構(gòu)體來(lái)表示每一個(gè)形狀:struct block int arrXY8; int nColor; int nNext; /*保存某一形狀信息的結(jié)構(gòu)體*/ Struct SHAPE shapesMAX_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, 8, 口 口口 口口 口口 口 0x4c, 0x80, BROWN, 11, 0xc6, 0x0, BROWN, 10, 口 口 口 口口口 口口 口口口 口口 口 口 口 0x4e, 0x0, WHITE, 13, 0x8c, 0x80, WHITE, 14, 0xe4, 0x0, WHITE, 15, 0x4c, 0x40, WHITE, 12, 口 口 口 口口口口 口 0x88, 0x88, RED, 17, 0xf0, 0x0, RED, 16, 口口 口口 0xcc, 0x0, BLUE, 18), 2)、定義游戲的主界面:寬10、高20的游戲板 1、 數(shù)據(jù)結(jié)構(gòu):全局?jǐn)?shù)組Gameboard1222,1表示已有的方塊,0表示這個(gè)位置空著。在10*20基礎(chǔ)上各自加2行、2列為了便于判斷形狀在移動(dòng)時(shí)是否到邊、到底。整個(gè)屏幕的坐標(biāo)系原先為640*480。在此游戲中,將16個(gè)像素定義為一個(gè)方格的邊長(zhǎng),所以坐標(biāo)系轉(zhuǎn)變成為了40*30(640/16=40,480/10=30)。 2、 玩家進(jìn)行游戲時(shí),需要對(duì)游戲界面進(jìn)行初始化工作。此代碼被main()函數(shù)調(diào)用。主要進(jìn)行的工作如下: (1) 循環(huán)調(diào)用line()函數(shù)繪制當(dāng)前游戲板。 (2) 調(diào)用nScore()函數(shù)顯示初始的成績(jī),初始成績(jī)?yōu)?。 (3) 調(diào)用npeed()函數(shù)顯示初始的速度(等級(jí)),初始速度1。 * * 注:x,y為左上角坐標(biāo) * * m,n對(duì)應(yīng)于Vertical_boxs,Horizontal_boxs * * 分別表示縱橫方向上方塊的個(gè)數(shù)(以方塊為單位) * BOARD_LEFT_X ,BOARD_LEFT_Y *4、函數(shù)設(shè)計(jì) 1、本程序有主函數(shù)和個(gè)函數(shù)組成:本程序總共由24個(gè)函數(shù)組成。 2、函數(shù)相互作用關(guān)系見(jiàn)下圖KillLine(int)IsLineFull(int)DrawSquare(int,int)IsConflict(int,int,int)DrawBlock(int,int,int,int)KillLine(int)IsGameOver()HandleDown(int,int*x, int *y)HandleUp(int *,int *x, int *y)HandleRight(int,int *x, int *y)HandleLeft(int ,int *x, int *y)游戲介紹help ()初始化模式進(jìn) 入歡迎界 win()主菜單 menu()InitializeGameboard()開(kāi)始游戲StartGame () 處理在游戲中的各種事件ProcessInGame() 、初始化圖形模式InitializeGraph()設(shè)置新的時(shí)鐘中斷SetTimer(* (void)Interrupt() (*IntProc) (void)游戲是否結(jié)束GameOver()恢復(fù)原來(lái)的時(shí)鐘中斷 KillTimer()否 是 關(guān)閉圖形模型 返回到主菜單 menu() 退出程序4、 函數(shù)功能的描述:5、函數(shù)原型函數(shù)功能函數(shù)處理描述void interrupt newtimer(void)新的時(shí)鐘中斷處理函數(shù)調(diào)用(*oldtimer)()函數(shù)語(yǔ)句柄,計(jì)時(shí)器自動(dòng)加1 void SetTimer(void interrupt(*IntProc)(void)指向原來(lái)時(shí)鐘中斷處理過(guò)程入口的中斷處理函數(shù)(句柄)void KillTimer()恢復(fù)原有的時(shí)鐘中斷處理過(guò)程調(diào)用setvect()恢復(fù)原有的時(shí)鐘中斷處理過(guò)程void InitializeGraph()初始化圖形模式1、調(diào)用initgraph()切換到圖形模式2、初始化若發(fā)生錯(cuò)誤,則返回錯(cuò)誤密碼void InitializeGameboard()初始化游戲面板以及下一形狀提示框、計(jì)分框和難度框1、調(diào)用bar()rectangle()等庫(kù)函數(shù)繪圖函數(shù)繪制游戲界面2、調(diào)用outtextxy()函數(shù)顯示文字void DrawSquare(int x, int y)在坐標(biāo)(x,y)處畫方塊調(diào)用庫(kù)函數(shù)bar()繪制方塊void DrawBlock(int BlockIndex, int sx, int sy,int color)在坐標(biāo)(sx,sy)處繪制顏色為color的形狀調(diào)用DrawSqueare()函數(shù)繪制形狀int IsConflict(int BlockIndex, int x, int y)判斷形狀是否存在于坐標(biāo)(x,y)處無(wú)沖突返回0,有沖突返回1void HandleLeft(int BlockIndex,int *x, int *y)按下左方向鍵時(shí)的處理函數(shù)調(diào)用IsConflic()函數(shù)判斷形狀是否可以左移,void HandleRight(int BlockIndex,int *x, int *y)按下右方向鍵時(shí)的處理函數(shù)調(diào)用IsConflic()函數(shù)判斷形狀是否可以右移,void HandleUp(int *BlockIndex,int *x, int *y)按下上方向鍵(旋轉(zhuǎn)鍵)時(shí)的處理函數(shù)調(diào)用IsConflic()函數(shù)判斷形狀是否可以旋轉(zhuǎn),int HandleDown(int BlockIndex,int *x, int *y)按下向下方向鍵或者自由下落時(shí)的處理函數(shù)形狀在自由下落返回0,無(wú)法下落了返回1,并做相應(yīng)處理int IsLineFull(int y)判斷y行是否已被填滿填滿返回1,否則返回0void KillLine(int y)消去第y行函數(shù)用于處理刪除一滿行的情況。Y指明具體哪一行為滿行,并將消去的行置為背景色int KillLines(int y)消去第y行以及與第y行連續(xù)的上面被填滿的行返回消去的行數(shù)int IsGameOver()判斷游戲是否結(jié)束游戲結(jié)束返回1,否則返回0int GameOver()在界面上輸出游戲結(jié)束的信息,并根據(jù)用戶按鍵選擇決定是否退出游戲退出游戲返回1,否則返回0void StartGame()游戲開(kāi)始時(shí)調(diào)用的函數(shù)1、繪制界面需要調(diào)用函數(shù)InitializeGameboard()2、接下來(lái)初始化游戲面板的各個(gè)方塊和一些全局變量的初值。void ProcessInGame()核心函數(shù),主要用于處理在游戲中的各種事件(如按下各種按鍵)調(diào)用HandleUpO、HandleDown()、HandleLeft()、HandleRight()等事件處理函數(shù)Void main()主流程函數(shù)主函數(shù)入口,整個(gè)游戲的主控部分五、運(yùn)行效果 六、源代碼詳解#include<stdio.h>#include<stdlib.h>#include<dos.h>#include<graphics.h> /*系統(tǒng)提供的頭文件*/#define TIMER 0x1c /*定義時(shí)鐘中斷的中斷號(hào)*/#define VK_LEFT 0x4b00/*左移鍵*/#define VK_RIGHT 0x4d00/*右移鍵*/#define VK_DOWN 0x5000 /*加速鍵*/#define VK_UP 0x4800 /*變形鍵*/#define VK_SPACE 0x3920 /*變形鍵*/#define VK_END 0x4f00 /*暫停鍵*/#define VK_ESC 0x011b#define VK_ENTER 0x1c0d#define BSIZE 16 /*方塊的邊長(zhǎng)是16個(gè)象素*/#define MAX_SHAPE 19 /*總共有19種各形態(tài)的方塊*/#define BOARD_WIDTH 10 /*游戲面板的寬度,以方塊的寬度為單位*/#define BOARD_HEIGHT 20/*游戲面板的高度,以方塊的寬度為單位*/#define BGCOLOR BLACK /*背景色*/#define FORECOLOR WHITE /*前景色*/#define FALSE 0#define TRUE 1#define EMPTY 0#define FILLED 1#define BOARD_LEFT_X 10 /*游戲面板左上角的橫坐標(biāo)*/#define BOARD_LEFT_Y 5 /*游戲面板左上角的縱坐標(biāo)*/*定義全局變量*/extern int GameboardBOARD_WIDTH+2BOARD_HEIGHT+2;extern int nCurrent_block_index ; /*當(dāng)前下落的方塊的索引號(hào)*/extern int nNext_block_index ; /*下一個(gè)方塊的索引號(hào)*/extern int nSpeed, nScore; /*速度和得分*/extern int nSpeedUpScore; /*第一次要加速需達(dá)到的分?jǐn)?shù)*/extern int bAccel, bOver;extern int nOriginX, nOriginY;/*某一形狀的原點(diǎn)的絕對(duì)坐標(biāo)*/extern unsigned int TimerCounter; /* 計(jì)時(shí)變量,每秒鐘增加18 */struct block int arrXY8; int nColor; int nNext; /*保存某一形狀信息的結(jié)構(gòu)體*/typedef struct block BLOCK;extern BLOCK arrayBlock19;void interrupt newtimer(void);/*新的時(shí)鐘中斷處理函數(shù)*/void SetTimer(void interrupt(*IntProc)(void);/*設(shè)置新的時(shí)鐘中斷處理過(guò)程*/void KillTimer();/*恢復(fù)原有的時(shí)鐘中斷處理過(guò)程*/void InitializeGraph();/*初始化圖形模式*/void InitializeGameboard() ;/*初始化游戲面板*/void DrawSquare(int x, int y);/*在坐標(biāo)(x,y)處畫方塊*/void DrawBlock(int BlockIndex, int sx, int sy,int color);/*在(sx,sy)處繪制顏色為color的形狀*/int IsConflict(int BlockIndex, int x, int y);/*判斷形狀能否存在于坐標(biāo)(x,y)處*/void HandleLeft(int BlockIndex,int *x, int *y);/*左鍵處理函數(shù)*/void HandleRight(int BlockIndex,int *x, int *y);/*右鍵處理函數(shù)*/void HandleUp(int *BlockIndex,int *x, int *y);/*上鍵處理函數(shù)*/int HandleDown(int BlockIndex,int *x, int *y);/*下鍵處理函數(shù)*/int IsLineFull(int y);/*判斷y行是否填滿*/void KillLine(int y);/*消去y行*/int KillLines(int y);/*消去y行及上面被填滿的行*/int IsGameOver();/*結(jié)束游戲*/int GameOver();/*用戶自己決定是否結(jié)束游戲*/void StartGame();/*開(kāi)始游戲*/void ProcessInGame();/*處理游戲中各種事件*/* * 函數(shù)原型:void InitializeGraph() * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:初始化進(jìn)入圖形模式 * */void InitializeGraph() int gdriver = VGA, gmode=VGAHI, errorcode; /* 初始化圖形模式*/ initgraph(&gdriver, &gmode, "c:turboc2"); /* 讀取初始化結(jié)果 */ errorcode = graphresult(); if (errorcode != grOk) /* 錯(cuò)誤發(fā)生 */ printf("Graphics error: %sn", grapherrormsg(errorcode); printf("Press any key to halt:"); getch(); exit(1); /* 返回錯(cuò)誤碼 */ /* * 函數(shù)原型:void InitializeGameboard() * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:初始化游戲面板以及下一形狀提示框、計(jì)分框和難度框 * */void InitializeGameboard() /* 繪制游戲面板(即游戲區(qū)域)*/ setfillstyle(SOLID_FILL,BGCOLOR); bar(BSIZE*BOARD_LEFT_X,BSIZE*BOARD_LEFT_Y,BSIZE*(BOARD_LEFT_X+BOARD_WIDTH),BSIZE*(BOARD_LEFT_Y+BOARD_HEIGHT); setcolor(WHITE); rectangle(BSIZE*BOARD_LEFT_X,BSIZE*BOARD_LEFT_Y,BSIZE*(BOARD_LEFT_X+BOARD_WIDTH),BSIZE*(BOARD_LEFT_Y+BOARD_HEIGHT); /*繪制下一形狀提示框*/ setcolor(BLUE); settextjustify(CENTER_TEXT, BOTTOM_TEXT); outtextxy(BSIZE*(25+4), BSIZE*(5+1), "next"); setfillstyle(SOLID_FILL, BGCOLOR); bar(BSIZE*(24.5+2), BSIZE*6, BSIZE*(24.5+2+5), BSIZE*(6+5); setcolor(YELLOW); rectangle(BSIZE*(24.5+2), BSIZE*6, BSIZE*(24.5+2+5), BSIZE*(6+5); /*繪制速度框*/ setcolor(BLUE); settextjustify(CENTER_TEXT, BOTTOM_TEXT); outtextxy(BSIZE*(25+4), BSIZE*(12+1), "level"); setfillstyle(SOLID_FILL, BGCOLOR); bar(BSIZE*25,BSIZE*13, BSIZE*(25+8), BSIZE*(13+1); setcolor(YELLOW); rectangle(BSIZE*25,BSIZE*13, BSIZE*(25+8), BSIZE*(13+1); setcolor(RED); settextjustify(CENTER_TEXT, BOTTOM_TEXT); outtextxy(BSIZE*(25+4), BSIZE*(13+1), "0"); /*繪制計(jì)分框*/ setcolor(BLUE); settextjustify(CENTER_TEXT, BOTTOM_TEXT); outtextxy(BSIZE*(25+4), BSIZE*(19+1), "score"); setfillstyle(SOLID_FILL, BGCOLOR); bar(BSIZE*25,BSIZE*20, BSIZE*(25+8), BSIZE*(20+1); setcolor(YELLOW); rectangle(BSIZE*25,BSIZE*20, BSIZE*(25+8), BSIZE*(20+1); setcolor(RED); settextjustify(CENTER_TEXT, BOTTOM_TEXT); outtextxy(BSIZE*(25+4), BSIZE*(20+1), "0");int GameboardBOARD_WIDTH+2BOARD_HEIGHT+2;int nCurrent_block_index;/* 當(dāng)前下落的方塊的索引號(hào)*/int nNext_block_index ; /*下一個(gè)方塊的索引號(hào)*/int nSpeed, nScore; /*速度和得分*/int nSpeedUpScore = 1000; /*第一次要加速需達(dá)到的分?jǐn)?shù)*/int bAccel, bOver;int nOriginX=5, nOriginY=1;/*某一形狀的原點(diǎn)的絕對(duì)坐標(biāo)*/BLOCK arrayBlock19= /*x1,y1,x2,y2,x3,y3,x4,y4, color, next*/ 0,-2, 0,-1, 0, 0, 1, 0, CYAN, 1, /* */ -1, 0, 0, 0, 1,-1, 1, 0, CYAN, 2, /* # */ 0,-2, 1,-2, 1,-1, 1, 0, CYAN, 3, /* # */ -1,-1,-1, 0, 0,-1, 1,-1, CYAN, 0, /* # */ 0,-2, 0,-1, 0, 0, 1,-2,MAGENTA, 5, /* */ -1,-1,-1, 0, 0, 0, 1, 0,MAGENTA, 6, /* # */ 0, 0, 1,-2, 1,-1, 1, 0,MAGENTA, 7, /* # */ -1,-1, 0,-1, 1,-1, 1, 0,MAGENTA, 4, /* # */ -1, 0, 0,-1, 0, 0, 1, 0,YELLOW, 9, /* */ -1,-1, 0,-2, 0,-1, 0, 0,YELLOW, 10, /* */ -1,-1, 0,-1, 0, 0, 1,-1,YELLOW, 11, /* # */ 0,-2, 0,-1, 0, 0, 1,-1,YELLOW, 8, /* # */ -1, 0, 0,-1, 0, 0, 1,-1, BROWN, 13, /* # */ 0,-2, 0,-1, 1,-1, 1, 0, BROWN, 12, /* # */ -1,-1, 0,-1, 0, 0, 1, 0, WHITE, 15, /* # */ 0,-1, 0, 0, 1,-2, 1,-1, WHITE, 14, /* # */ 0,-3, 0,-2, 0,-1, 0, 0, RED, 17,/* # */ -1, 0, 0, 0, 1, 0, 2, 0, RED, 16,/* # */ /* # */ /* # */ 0,-1, 0, 0, 1,-1, 1, 0, BLUE, 18,/* # */ /* # */;/* * 函數(shù)原型:void StartGame () * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:游戲開(kāi)始時(shí)調(diào)用的函數(shù),其中繪制界面需調(diào)用函數(shù) * * InitializeGameboard(), 接下來(lái)需初始化游戲面板的 * * 各個(gè)方塊和一些全局變量的初值 * */void StartGame() int i,j; /*設(shè)置游戲面板中每個(gè)方塊的初始值*/ for(j=0;j<=BOARD_HEIGHT;j+) for(i=0;i<BOARD_WIDTH+2;i+) if(i=0 | i=BOARD_WIDTH+1) Gameboardij = FILLED; else Gameboardij = EMPTY; for(i=0;i<BOARD_WIDTH+2;i+) GameboardiBOARD_HEIGHT+1 = FILLED; InitializeGameboard(); /*設(shè)置游戲變量的初值*/ nNext_block_index = -1; /*游戲初始,沒(méi)有下一個(gè)形狀的索引號(hào)*/ nSpeed = 0; nScore = 0;/* * 函數(shù)原型:void ProcessInGame() * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:核心函數(shù),主要用于處理在游戲中的各種事件(如按下各種按鍵) * */void ProcessInGame() int key; bioskey(0); randomize(); while(1) if(nNext_block_index=-1) nCurrent_block_index = rand()%19; nNext_block_index = rand()%19; /*繪制下一個(gè)提示形狀*/ DrawBlock(nNext_block_index, 19,6,arrayBlocknNext_block_index.nColor ); else nCurrent_block_index = nNext_block_index; DrawBlock(nNext_block_index, 19,6,BGCOLOR ); /* 消除原來(lái)的提示形狀 */ nNext_block_index = rand()%19; DrawBlock(nNext_block_index, 19,6,arrayBlocknNext_block_index.nColor ); /*繪制下一個(gè)提示形狀 */ nOriginX=5, nOriginY=1; TimerCounter = 0; DrawBlock(nCurrent_block_index, nOriginX,nOriginY, arrayBlocknCurrent_block_index.nColor );/*在面板內(nèi)繪制當(dāng)前形狀*/ while(1) if (bioskey(1) key=bioskey(0); else key=0; bAccel = FALSE; switch(key) case VK_LEFT: /* 左移 */ HandleLeft(nCurrent_block_index,&nOriginX,&nOriginY ); break; case VK_RIGHT: /* 右移 */ HandleRight(nCurrent_block_index,&nOriginX,&nOriginY ); break; case VK_UP: /* 旋轉(zhuǎn) */ case VK_SPACE: HandleUp(&nCurrent_block_index, &nOriginX,&nOriginY); break; case VK_DOWN: /* 下落加速鍵 */ bAccel=TRUE; break; case VK_END: /* 暫停*/ bioskey(0); break; case VK_ESC: /* 退出游戲 */ bOver=TRUE; return; if(bAccel | TimerCounter>(20-nSpeed*2) if(HandleDown(nCurrent_block_index,&nOriginX,&nOriginY) break; if(bOver) return; /* * 函數(shù)原型:void main() * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:入口函數(shù),包含俄羅斯方塊程序的主流程 * */void main() InitializeGraph(); SetTimer(newtimer); /*設(shè)置新的時(shí)鐘中斷*/ while(1) StartGame(); ProcessInGame(); if(GameOver() break; bOver = FALSE; KillTimer(); closegraph();unsigned int TimerCounter=0; /* 計(jì)時(shí)變量,每秒鐘增加18 */* * 函數(shù)原型:void interrupt (*oldtimer)(void) * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:指向原來(lái)時(shí)鐘中斷處理過(guò)程入口的中斷處理函數(shù)指針(句柄) * */void interrupt (*oldtimer)(void);/* * 函數(shù)原型:void interrupt newtimer(void) * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:新的時(shí)鐘中斷處理函數(shù) * */void interrupt newtimer(void) (*oldtimer)(); TimerCounter+;/* * 函數(shù)原型:void SetTimer(void interrupt(*)(void) * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:設(shè)置新的時(shí)鐘中斷處理函數(shù) * */void SetTimer(void interrupt(*IntProc)(void) oldtimer=getvect(TIMER); disable(); setvect(TIMER,IntProc); enable();/* * 函數(shù)原型:void KillTimer() * * 傳入?yún)?shù):無(wú) * * 返 回 值:無(wú) * * 函數(shù)功能:恢復(fù)原先的時(shí)鐘中斷處理函數(shù) * */void KillTimer() disable(); setvect(TIMER,oldtimer); e

注意事項(xiàng)

本文(c語(yǔ)言俄羅斯方塊游戲程序設(shè)計(jì)報(bào)告.doc)為本站會(huì)員(jian****018)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!