




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/包含頭文件#include#include#include#include#include#include Tetris.h/int score=0;/int lever=1;/char scores10;/char levers10;/*enum cmdround, /旋轉(zhuǎn)方塊left, /左移方塊right, /右移方塊down, /下一方塊bottom, /方塊沉底quit /離開(kāi)游戲;/定義繪制方塊的狀態(tài)的枚舉類(lèi)型enum drawshow, /顯示方塊hide /抹掉方塊;/定義俄羅斯方塊的結(jié)構(gòu)體struct blockint dir4; /方塊的四個(gè)旋轉(zhuǎn)的狀態(tài)int color;
2、 /方塊的顏色*/static T_TrsBlockStyle gz_tBlockStyleTab7 = /* 口 口 口口口口 口 口口口口 口 口 口口 口*/0x0F00, 0x4444, 0x0F00, 0x4444, RED,/* 口口 口口 口口 口口 口口 口口 口口 口口 */0x0660, 0x0660, 0x0660, 0x0660, BLUE,/* 口 口 口 口口 口口口 口口 口口口 口 口 口 */0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA,/* 口 口 口口口 口口 口 口口 口 口 口口口 口 */0x2260, 0x0E20
3、, 0x0644, 0x0470, YELLOW,/* 口 口 口口 口口 口口 口口 口口 口 口口 口 */0x0C60, 0x2640, 0x0C60, 0x2640, CYAN,/* 口 口 口口 口口 口口 口口 口口 口 口口 口 */0x0360, 0x4620, 0x0360, 0x4620, GREEN,/* 口 口 口口口口 口口 口口口 口口 口 口 口 */0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN;/*/定義俄羅斯方塊的信息的結(jié)構(gòu)體struct blockinfoint id; /7中方塊中的哪一種byte dir:2; /1種方塊中四
4、個(gè)方向中的哪個(gè)char x,y; /方塊的坐標(biāo)(不是屏幕中的而是自己設(shè)置的游戲區(qū)域中的)curblock,nextblock;*/ 定義游戲區(qū)/unsigned char areawidthhigh = 0;/函數(shù)聲明bool TRS_AppCreate(void * ppUser,void * pFunc);static void TRS_Init(void *pUser);static void TRS_DrawBackground(void *pUser);static void TRS_GameOver(void *pUser);static void TRS_Quit(void *p
5、User);static void TRS_ScoreShow(void *pUser);static void TRS_NewGame(void *pUser);static AEEEvent TRS_GetMsg(PCTetrisApp pMe);static bool TRS_TetrisHandle(void *pUser, DWORD evt, WORD w,DWORD dw);static void TRS_Newblock(void *pUser);static void TRS_DrawBlock(void *pUser,T_TrsBlockInfo tCurBlck,EDra
6、wStyle eStyle);static bool TRS_Checkblock(void *pUser, T_TrsBlockInfo tCurBlck);static void TRS_HRound(void *pUser);static void TRS_HLeft(void *pUser);static void TRS_HRight(void *pUser);static void TRS_HDown(void *pUser);static void TRS_HBottom(void *pUser);/*-函數(shù)名稱:main功能說(shuō)明:主函數(shù)參數(shù)說(shuō)明:作 者:時(shí) 間:-*/void
7、main()PCTetrisApp pMe;AEEEvent eMsg;/init();TRS_AppCreate(void *)&pMe,NULL);/*while(true) scoreshow();c=getcmd();discmd(c);if (c = quit)HWND wnd = GetHWnd();if (MessageBox(wnd, _T(您要退出游戲嗎?), _T(提醒), MB_OKCANCEL | MB_ICONQUESTION) = IDOK)Quit();*/bool TRS_AppCreate(void * ppUser,void * pFunc); PCTetr
8、isApp pMe;new(pMe);*ppUser = pMe;pMe-m_iScore=0;pMe-m_iLever=0;memset(pMe-m_iScores,0,sizeof(int)*10);memset(pMe-m_iLevers,0,sizeof(int)*10);for(iLoop = 0;iLoop GSCRN_WIDTH_CL;iLoop+)for(jLoop=0;jLoop m_uiAreaiLoopjLoop=0;pMe-m_dwOldTime = 0;pMe-m_dwNewTime = 0; return true;static bool TRS_TetrisHan
9、dle(void *pUser, DWORD evt, WORD w,DWORD dw)switch(evt)case EVT_ROUND :TRS_HRound(pUser); break;case EVT_LEFT :TRS_HLeft(pUser); break;case EVT_RIGHT :TRS_HRight(pUser); break;case EVT_DOWN :TRS_HDown(pUser); break;case EVT_BOTTOM:TRS_HBottom(pUser); break;case EVT_QUIT :HWND wnd = GetHWnd();if (Mes
10、sageBox(wnd, _T(您要退出游戲嗎?), _T(提醒), MB_OKCANCEL | MB_ICONQUESTION) = IDOK)TRS_Quit(pUser);break;default:return false;return true;/初始化函數(shù)static void TRS_Init(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;initgraph(SCREEN_HIGHT,SCREEN_WIDTH); /初始化屏幕大小srand(unsigned)time(NULL); /以當(dāng)前時(shí)間作為隨機(jī)種子TRS_NewGame(
11、);static void TRS_DrawBackground(void *pUser);PCTetrisApp pMe =(PCTetrisApp)pUser;setfont(TRS_GUIDE_FONT_SIZE,0,TRS_GUIDE_FONT_TYPE); /定義字體宋體,字高16,字寬比例自動(dòng)適應(yīng)outtextxy(TRS_OPERATION_TITLE_X,TRS_OPERATION_TITLE_Y,操作提示:);outtextxy(TRS_MLEFT_X,TRS_MLEFT_Y,a:左移);outtextxy(TRS_MRIGHT_X,TRS_MRIGHT_Y,d:右移);ou
12、ttextxy(TRS_MDOWN_X,TRS_MDOWN_Y,s:下移);outtextxy(TRS_ROTATION_X,TRS_ROTATION_Y,w:變形);outtextxy(TRS_MBOTTOM_X,TRS_MBOTTOM_Y,空格:沉底);outtextxy(TRS_EXIT_X,TRS_EXIT_Y,ESC:退出);setfont(50,0,黑體);outtextxy(460,160,Tetris);setfont(22,0,宋體);outtextxy(20,20,得分:);outtextxy(20,80,等級(jí):);setorigin(220,20); /設(shè)置坐標(biāo)原點(diǎn)set
13、fillstyle(WHITE); /設(shè)置填充顏色為白色/畫(huà)游戲的邊框bar3d(-21,-1,-6,GSCRN_HIGHT_CL * CELL_WIDTH,5,1);bar(-21,GSCRN_HIGHT_CL * CELL_WIDTH,GSCRN_WIDTH_CL * CELL_WIDTH,GSCRN_HIGHT_CL * CELL_WIDTH+20);bar3d(GSCRN_WIDTH_CL * CELL_WIDTH,-1,GSCRN_WIDTH_CL * CELL_WIDTH+15,GSCRN_HIGHT_CL * CELL_WIDTH+20,5,1);/畫(huà)預(yù)覽方塊區(qū)域的邊框recta
14、ngle(GSCRN_WIDTH_CL + 2) * CELL_WIDTH - 1, -1, (GSCRN_WIDTH_CL + 6) * CELL_WIDTH, 4 * CELL_WIDTH);/ 退出游戲static void TRS_Quit(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;closegraph();/釋放應(yīng)用空間free(pMe);exit(0);/ 結(jié)束游戲static void TRS_GameOver(void *pUser)HWND wnd = GetHWnd();if (MessageBox(wnd, _T(游戲
15、結(jié)束。n您想重新來(lái)一局嗎?), _T(游戲結(jié)束), MB_YESNO | MB_ICONQUESTION) = IDYES)TRS_NewGame();elseTRS_Quit();/游戲得分顯示static void TRS_ScoreShow(void *pUser)sprintf(scores,%d,score); /將的分轉(zhuǎn)化為字符outtextxy(-140,20,scores); /將得分顯示到屏幕上sprintf(levers,%d,lever); /將等級(jí)轉(zhuǎn)化為字符outtextxy(-140,80,levers); /將等級(jí)顯示到屏幕上 /開(kāi)始新游戲static void T
16、RS_NewGame(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;setfillstyle(BLACK); /選定黑色填充bar(0,0,GSCRN_WIDTH_CL*CELL_WIDTH-1,GSCRN_HIGHT_CL*CELL_WIDTH-1); /將游戲區(qū)域清空Z(yǔ)eroMemory(area,GSCRN_WIDTH_CL*GSCRN_HIGHT_CL); /將游戲區(qū)域用0填滿/隨機(jī)生成下一個(gè)方塊nextblock.id=rand()%7;nextblock.dir =rand()%4;nextblock.x=GSCRN_WIDTH_C
17、L+2;nextblock.y=GSCRN_HIGHT_CL-1;TRS_NewBlock(pMe); /生成新的方塊/獲取控制命令函數(shù)static AEEEvent TRS_GetMsg(PCTetrisApp pMe) while(1) /沒(méi)有按鍵到了500ms以后自動(dòng)下落一格pMe-m_dwNewTime =GetTickCount(); /得到系統(tǒng)到現(xiàn)在所經(jīng)過(guò)的毫秒數(shù)儲(chǔ)存到newtime中if(pMe-m_dwNewTime - pMe-m_dwOldTime=550-50*pMe-m_iLever) /如果時(shí)間過(guò)去500mspMe-m_dwOldTime=pMe-m_dwNewTim
18、e ; return EVT_DOWN; /返回下落按鍵/有按鍵的話,返回對(duì)應(yīng)的按鍵if(kbhit()switch(getch()case w:case W: return EVT_ROUND;case a: case A: return EVT_LEFT;case d: case D: return EVT_RIGHT;case s:case S: return EVT_DOWN;case : return EVT_BOTTOM;case 27 : return EVT_QUIT;/*static void TRS_Discmd(void *pUser,cmd c)switch(c)cas
19、e round:hround();break;case left:hleft();break;case right:hright(); break;case down:hdown();break;case bottom:hbottom();break;case quit:break;*/把新方塊信息傳給舊方塊并再生成新方塊static void TRS_NewBlock(void *pUser)PCTetrisApp pMe =(PCTetrisApp)pUser;/新方塊的數(shù)據(jù)傳給舊方塊curblock.id=nextblock.id; curblock.dir=nextblock.dir;
20、/定義新方塊的坐標(biāo)curblock.x=(GSCRN_WIDTH_CL-4)/2;curblock.y=GSCRN_HIGHT_CL+2;/再隨機(jī)生產(chǎn)成新的方塊nextblock.id=rand()%7;nextblock.dir=rand()%4;drawblock(curblock); /調(diào)用畫(huà)方塊 函數(shù)畫(huà)方塊curblock/在方塊預(yù)覽中畫(huà)出下一個(gè)方塊setfillstyle(BLACK);bar(GSCRN_WIDTH_CL+2)*CELL_WIDTH,0,(GSCRN_WIDTH_CL+6)*CELL_WIDTH-1,4*CELL_WIDTH-1);drawblock(nextblo
21、ck);oldtime=GetTickCount(); /設(shè)置計(jì)時(shí)器/畫(huà)方塊函數(shù)static void TRS_DrawBlock(void *pUser,T_TrsBlockInfo tCurBlck,EDrawStyle eStyle)int b= gz_tBlockStyleTabtCurBlck.m_iStyle.m_izStatustCurBlck.m_iStatID; /取出block中block.dir數(shù)組里面的值賦給bint i,x,y; int color;switch(d)/決定方塊形狀和狀態(tài)對(duì)應(yīng)的顏色case show: color=blockc.id.color;bre
22、ak; case hide: color=BLACK;break;setfillstyle(color); /決定填充的顏色for(i=0;i16;i+) /控制循環(huán)一共十六次if(b&0x8000) /讓b和0x8000按位與,用來(lái)找出16個(gè)小方塊中哪一些是1,哪一些是0x=c.x+i%4; /值是1的小方塊x軸的坐標(biāo)y=c.y-i/4; /值是1的小方塊y軸的坐標(biāo)if(yGSCRN_HIGHT_CL)if (d!= hide)bar3d(x*CELL_WIDTH+2,(GSCRN_HIGHT_CL-y -1)*CELL_WIDTH+2,(x+1)*CELL_WIDTH-4,(GSCRN_H
23、IGHT_CL-y)*CELL_WIDTH-4,3,1);elsebar(x*CELL_WIDTH,(GSCRN_HIGHT_CL-y-1)*CELL_WIDTH,(x+1)*CELL_WIDTH-1,(GSCRN_HIGHT_CL-y)*CELL_WIDTH-1);b=1;/檢測(cè)方塊是否可以下落static bool TRS_CheckBlock(void *pUser,blockinfo c)int b=blockc.id.dirc.dir; /取出block中block.dir數(shù)組里面的值賦給bint i,x,y;for(i=0;i16;i+) /控制循環(huán)一共十六次if(b&0x8000
24、) /讓b和0x8000按位與,用來(lái)找出16個(gè)小方塊中哪一些是1,哪一些是0x=c.x+i%4; /值是1的小方塊x軸的坐標(biāo)y=c.y-i/4; /值是1的小方塊y軸的坐標(biāo)/如果小方塊超出界限或者與下面相碰if(x=GSCRN_WIDTH_CL)|(y0)return false;if(yGSCRN_HIGHT_CL)&(areaxy)return false;b=1;return true;/旋轉(zhuǎn)方塊static void TRS_HRound(void *pUser)blockinfo a=curblock;a.dir+;if(checkblock(a)drawblock(curblock
25、,hide);curblock.dir+;drawblock(curblock,show);elsereturn;/左移方塊static void TRS_HLeft(void *pUser)blockinfo a=curblock;a.x-;if(checkblock(a)drawblock(curblock,hide);curblock.x-;drawblock(curblock,show);elsereturn;/右移方塊static void TRS_HRight(void *pUser)blockinfo a=curblock;a.x+;if(checkblock(a)drawblo
26、ck(curblock,hide);curblock.x+;drawblock(curblock,show);elsereturn;/下移方塊static void TRS_HDown(void *pUser)blockinfo a=curblock;a.y-;if(checkblock(a)drawblock(curblock,hide);curblock.y-;drawblock(curblock,show);elsehbottom();/ 沉底方塊static void TRS_HBottom(void *pUser)/連續(xù)下移方塊int i,j=0,x,y;drawblock(curblock,hide); /去掉方塊blockinfo a=curblock; a.y-; while(checkblock(a)curblock.y-;a.y-;drawblock(curblock,show); /畫(huà)出方塊/ 固定方塊在游戲區(qū)int b=blockcurblo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省莞市東華中學(xué)2025年英語(yǔ)八下期中綜合測(cè)試試題含答案
- 保潔安全試題及答案
- 辦公室應(yīng)聘題庫(kù)及答案
- 中式快餐連鎖企業(yè)2025年標(biāo)準(zhǔn)化擴(kuò)張與市場(chǎng)渠道拓展報(bào)告
- 2025年新能源微電網(wǎng)穩(wěn)定性控制與優(yōu)化運(yùn)行設(shè)備運(yùn)行維護(hù)設(shè)備運(yùn)行維護(hù)成本控制報(bào)告
- 氫能源汽車(chē)產(chǎn)業(yè)關(guān)鍵零部件國(guó)產(chǎn)化進(jìn)程2025年技術(shù)創(chuàng)新與產(chǎn)業(yè)發(fā)展趨勢(shì)分析
- 安全監(jiān)理試題及答案
- 醫(yī)療家具知識(shí)培訓(xùn)課件
- 2025年新型農(nóng)業(yè)經(jīng)營(yíng)主體發(fā)展現(xiàn)狀與培育策略深度分析報(bào)告001
- 建筑施工模板安全技術(shù)規(guī)范
- 礦產(chǎn)資源國(guó)際合作-洞察及研究
- 【課件】無(wú)脊椎動(dòng)物+第2課時(shí)課件-2024-2025學(xué)年人教版生物七年級(jí)上冊(cè)
- 2025年涼山州昭覺(jué)縣選聘社區(qū)工作者題庫(kù)帶答案分析
- 2025國(guó)開(kāi)《調(diào)劑學(xué)(本)》形考任務(wù)1234答案
- 2025年員工持股平臺(tái)合伙協(xié)議
- 2024-2025學(xué)年下學(xué)期初中道德與法治七年級(jí)期末復(fù)習(xí)試卷(含答案)
- 2025年政府采購(gòu)管理實(shí)務(wù)考試卷及答案
- 2025連云港師范高等專(zhuān)科學(xué)校輔導(dǎo)員考試試題及答案
- 2025年中國(guó)ORC低溫余熱發(fā)電系統(tǒng)行業(yè)市場(chǎng)現(xiàn)狀及未來(lái)發(fā)展前景預(yù)測(cè)報(bào)告
- 非典型溶血尿毒綜合征多學(xué)科實(shí)踐共識(shí)解讀(2025版)
- 早期阿爾茨海默病疾病修飾治療專(zhuān)家共識(shí)(2025年版)解讀
評(píng)論
0/150
提交評(píng)論