




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計設計題目俄羅斯方塊改良學生姓名 學號 專業(yè)班級 指導教師 2021年4月20日目錄TOC\o"1-5"\h\z課程設計目的 1\o"CurrentDocument"功能分析 1\o"CurrentDocument"程序設計實現(xiàn)過程 23.1程序總體設計結構 23.2界面設計 43.3重要數(shù)據(jù)的數(shù)據(jù)結構設計 53.4函數(shù)設計 7\o"CurrentDocument"運行效果 13\o"CurrentDocument"源代碼詳解 14參考文獻 27俄羅斯方塊改良課程設計問題據(jù)百度百科,俄羅斯方塊(Tetns)是一款由俄羅斯人阿列克謝?帕基特諾夫于1984年6月創(chuàng)造的休閑游戲.游戲的根本規(guī)那么是移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分.要求支持鍵盤操作和7種不同類型方塊的旋轉變換,并且界面上顯示下一個方塊的提示以及當前的玩家的得分,隨著游戲的進行,等級越高,游戲難度越大,即方塊的下落速度越快,相應的等級,等級越高,消去一行所得到的分數(shù)越高,為玩家提供了不同的選擇.功能分析俄羅斯方塊游戲需要解決的問題包括:⑴按任意鍵開始游戲,隨機產生方塊并自動下移⑵用Esc鍵退出游戲.⑶用t鍵變換方塊⑷用v—鍵和—>鍵左右移動方塊⑸用|鍵使方塊加速下移⑹用空格鍵使方塊暫停⑺能正確判斷滿行并消行、計分、定級別⑻設定游戲方塊為不同形狀重點:*游戲面包的數(shù)據(jù)結構:二維數(shù)組*7種形狀方塊的數(shù)據(jù)結構:結構體保存每種形狀方塊的坐標程序設計實現(xiàn)過程3.1程序總體設計結構首先初始化進入圖形模式,進入歡送界面,玩家按任意進入主菜單界面,按鍵進入游戲界面,鍵然后設置新的時鐘中斷.開始游戲后,進入該程序最核心的局部一一處理和實現(xiàn)進行過程中的各種事件和函數(shù).在處理中判斷游戲是否結束,如果沒有結束,那么重新開始游戲,否那么結束游戲.詳解如下:〔1〕 游戲方塊預覽功能.在游戲過程中,當在游戲底板中出現(xiàn)一個游戲方塊時,必須在游戲方塊預覽區(qū)域中出現(xiàn)下一個游戲方塊,這樣有利于游戲玩家限制游戲的策略.由于在此游戲中存在19種不同的游戲方塊,所以在游戲方塊預覽區(qū)域中需要顯示隨機生成的游戲方塊.〔2〕 游戲方塊限制功能.通過各種條件的判斷,實現(xiàn)對游戲方塊的左移、右移、快速下移、自由下落、旋轉功能,以及行滿消除行的功能.俄羅斯方塊游戲初始化圖形模式
〔歡送界面〕進入菜單項選擇項開始新游戲游開始新游戲游戲幫助游戲說明退出游戲游戲排名開始游戲游戲執(zhí)行主流程圖游戲顯示更新功能.在判斷鍵值時,有左移VKJLEFT、右移VK_RIGHT、下移VK_DOWN、變形旋轉VK_UP、退出VK_ESC鍵值的判斷.當游戲方塊左右移動、下落、旋轉時,要去除先前的游戲方塊,用新坐標重繪游戲方塊.當消除滿行時,要重繪游戲底板的當前狀態(tài).游戲速度分數(shù)更新功能.在游戲玩家進行游戲過程中,需要根據(jù)一定的游戲規(guī)那么給玩家計算游戲分數(shù).比方,消除一行加10分.當游戲分數(shù)到達一定數(shù)量之后,需要給游戲者進行等級的上升,每上升一個等級,游戲方塊的下落速度將加快,游戲的難度將增加.游戲幫助功能.玩家進入游戲后,將有對本游戲如何操作的友情提示.主函數(shù):voidmam(){IintializeGraphO;SetTimer(newtinier);/*設置新的時鐘中斷*/while(l){StanGameQ;ProcessInGameO;if(GameOvei())break;bOver=FALSE;}KiUTuneiO;closegiaph();}3.2界面設計分為左右兩個局部:*左邊為游戲面板*右邊有三局部:下一個形狀提示框、速度框和計分框3.3重要數(shù)據(jù)的數(shù)據(jù)結構設計1)定義方塊形狀:定義如下的結構體來表示每一個形狀:stnictblock(mtanXY[8];intnColor;intnNext;};/*保存某一形狀信息的結構體*/StnictSHAPEshapes[MAX_BOX]=口口口口口口 口口口口口口口口匚1口{0x88,OxcO,CYAN,1},(0xe8,0x0,CYAN,2},{0xc4,0x40,CYAN,3},(0x2e,0x0,CYAN,0},口11口 口口口口口口 口口口口口口11{0x44,OxcO,MAGENTA,5),(0x8e,0x0,MAGENTA,6},{0xc8,0x80,MAGENTA,7),{0xe2,0x0,MAGENTA,4},口口口 口口Hl「1口{0x8c,0x40, YELLOW,9},{0x6c,0x0, YELLOW,8},口 口口口口 口口口{0x4c,0x80,BROWN,11),{0xc6,0x0,BROWN,10},nn口口口 口口口口口口口口口 口 口{0x4e,0x0,WHITE,13},{0x8c,0x80,WHITE,14},{0xe4,0x0,WHITE,15},{0x4c,0x40,WHITE,12},IIIIIIII{0x88,0x88, RED, 17},(OxfO,0x0, RED, 16},口口口口(Oxcc,0x0,BLUE,18),2〕定義游戲的主界面:寬10、高20的游戲板〔1〕 數(shù)據(jù)結構:全局數(shù)組Gameboard[12][22],l表示己有的方塊,0表示這個位置空著.在10*20根底上各自加2行、2列為了便于判斷形狀在移動時是否到邊、到底.整個屏幕的坐標系原先為640*480.在此游戲中,將16個像素定義為一個方格的邊長,所以坐標系轉變成為了40*30〔640/16=40,480/10=30〕.〔2〕 玩家進行游戲時,需要對游戲界面進行初始化工作.此代碼被main.函數(shù)調用.主要進行的工作如下:循環(huán)調用lineO函數(shù)繪制當前游戲板.調用nScoreO函數(shù)顯示初始的成績,初始成績?yōu)?.調用npeed〔〕函數(shù)顯示初始的速度〔等級〕,初始速度1.*****************************************************注:x,y為左上角坐標*ni.li對應于Veitical_boxs,Honzontal_boxs* 分別表示縱橫方向上方塊的個數(shù)(以方塊為單位)**BOARD_LEFT_X,BOARD_LEFT_Y*****************************************************3.4函數(shù)設計1、 本程序有主函數(shù)和個函數(shù)組成:本程序總共由24個函數(shù)組成.2、 函數(shù)相互作用關系見下列圖
四、函數(shù)運用函數(shù)原型函數(shù)功能函數(shù)處理描述voidintemiptnewtimer(void)新的時鐘中斷處理函數(shù)調用(*oldtimer)()函數(shù)語句柄,計時器自動加1voidSetTimer(voidintemipt(*IiitProc)(void))指向原來時鐘中斷處理過程入口的中斷處理函數(shù)(句柄)voidKillTimer()恢復原有的時鐘中斷處理過程調用setvect()恢復原有的時鐘中斷處理過程voidInitializeGraph()初始化圖形模式1、調用initgraph()切換到圖形模式2、初始化假設發(fā)生錯誤,那么返回錯誤密碼voidInitializeGameboard()初始化游戲面板以及下一形狀提示框、計分框和難度框1、調用bar()\iectangle()等庫函數(shù)繪圖函數(shù)繪制游戲界面2、調用outtextxy()函數(shù)顯示
文字voidDrawSquare(intx,inty)在坐標(x,y)處畫方塊調用庫函數(shù)bar()繪制方塊voidDrawBlock(intBlockindex,intsx,intsyintcolor)在坐標(sx,sy)處繪制顏色為color的形狀調用DrawSqueare()函數(shù)繪制形狀intIsConflict(intBlockindex,intx,inty)判斷形狀是否存在于坐標(x,y)處無沖突返回0,有沖突返回1voidHandleLeft(intBlockindex,int*x,int*y)按下左方向鍵時的處理函數(shù)調用IsConflicO函數(shù)判斷形狀是否可以左移,voidHandleRight(intBlockindex,int*x,int*y)按下右方向鍵時的處理函數(shù)調用IsConflicO函數(shù)判斷形狀是否可以右移,voidHandleUp(int*BlockIndex,int*x,int*y)按下上方向鍵(旋轉鍵)時的處理函數(shù)調用IsConflicO函數(shù)判斷形狀是否可以旋轉,intHandleDown(intBlockindex,int*x,int*y)按下向下方向鍵或者自形狀在自由下落返回0,無法卜落了返
由下落時的處理函數(shù)回1,并做相應處理intIsLineFull(inty)判斷y行是否已被填滿填滿返回1,否那么返回0voidKillLine(inty)消去第y行函數(shù)用于處理刪除一滿行的情況.Y指明具體哪一行為滿行,并將消去的行置為背景色intKillLines(inty)消去第y行以及與第y行連續(xù)的上面被填滿的行返回消去的行數(shù)intIsGameOver()判斷游戲是否結束游戲結束返回1,否那么返回0intGameOver()在界面上輸出游戲結束的信息,并根據(jù)用戶按鍵選擇決定是否退出游戲退出游戲返回1,否那么返回0voidStaitGame()游戲開始時1、繪制界面需要調
調用的函數(shù)用函數(shù)InitializeGameboard()2、接下來初始化游戲面板的各個方塊和一些全局變量的初值.voidProcessInGame()核心函數(shù),主要用于處理在游戲中的各種事件(如按下各種按鍵)調用HandleUpO、HandleDown()、HandleLeft()>HandleRight()等事件處理函數(shù)Voidmain()主流程函數(shù)主函數(shù)入口,整個游戲的主控局部運行效果EJC:\Users\gu\Desktop\俄羅斯方塊-古有禹制作.exe0123456789青輸入形狀編號UC:\llsers\gu\Desktop\俄歲所方塊?古有房制作.exe匚D123456789清輸入形狀編號1俄羅斯方塊level:1score:0speed:300ms**********下一個方塊;..■■**********Esc:退出游戲f鍵:變體空格:暫停游戲源代碼詳解#iiiclude<stdio.h>^include<wmdows.h>#iiiclude<como.h>^include<tinie.h>〃游戲窗口^defineFiameX4 〃游戲窗II左上角的X軸坐標^defineFiameY4 //游戲窗II左上角的Y軸坐標^defineFiamejieiglit20〃游戲窗II的高度^defineFiame_width 18〃游戲窗II的寬度//定義全局變量mti,j,temp,templ,temp2;//temp,temp1,temp2用于記住和轉換方塊變量的值inta[80][80]={0}; 〃標記游戲屏幕的圖案:2,1.0分別表示該位置為游戲邊框、方塊、無圖案;初始化為無圖案mtb[4]; //標記4個〞「1〞方塊:1表示有方塊,0表示無方塊charshape[10][4]={"W,.,mtss=0;〃聲明俄羅斯方塊的結構體structTetris{mtx; 〃中央方塊的x軸坐標mty; 〃中央方塊的y軸坐標mtflag; 〃標記方塊類型的序號mtnext; 〃下一個俄羅斯方塊類型的序號mtspeed; 〃俄羅斯方塊移動的速度mtcount; 〃產生俄羅斯方塊的個數(shù)mtscore;〃游戲的分數(shù)mtlevel; 〃游戲的等級};〃函數(shù)原型聲明〃光標移到指定位置voidgotoxy(HANDLEhOut,intx,mty);〃制作游戲窗口voidmake_frame();//隨機產生方塊類型的序號voidget_flag(stii]ctTetiis*);〃制作俄羅斯方塊voidmake_tetiis(stmctTetris*);〃打印俄羅斯方塊voidpiiiit_tetris(HANDLEhOut,structTetiis*);〃去除俄羅斯方塊的痕跡voidclear_tetiis(HANDLEhOut,structTetris*);〃判斷是否能移動,返回值為1,能移動,否那么,不動mtifLiuoveable(stiuctTetris*);//判斷是否滿行,并刪除滿行的俄羅斯方塊voiddel_full(HANDLEhOut,structTetris*);〃開始游戲voidstan_gameQ;voidmain()mtt;for(t=0;t<10;t++){printf("%s〞,shape[t]);)prmtf(n\nO123456789'uT);請輸入形狀編號");scanf(〞%d\&ss);〃制作游戲窗I1niake_fiaiiie();〃開始游戲stan^gameQ;}/******光標移到指定位**************************************************************/voidgotoxy(HANDLEhOut,intx,mty)COORDpos;pos.X=x;//橫坐標pos.Y=y;//縱坐標SetConsoleCursoiPosition(hOut,pos);}/****** 制 作 游 戲 窗******************************************************************/voidmake_fiame()HANDLEhOut=GetStdHandle(STD_OUTPUT.HANDLE);〃定義顯示器句柄變量gotoxy(hOut,FiameX+Fiame_width-5,FrameY-2); //打印游戲名稱prmtfC'俄羅斯方塊,gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);〃打印選擇菜單prmtf(〞***左******下一個方塊:gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);pnntf(〞**********“);gotoxy(hOut,FrameX+2*Frame_width+3.FrameY+17);pirntfct鍵:變體,gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);pnntf(〞空格:暫停游戲,gotoxy(hOut,FiameX+2*Fiame_width+3,FrameY+15);〃打印框角并記住該處己有圖案pnntf(〞Esc:退出游戲,gotoxy(hOut,Fi〃打印框角并記住該處己有圖案pnntf(〞L);gotoxy(hOut,FiameX+2*Frame_\vidth-2,FrameY);prmtf("-i〞);gotoxy(hOut,FiameX.FrameY+FiameJieight);prmtf(H或);gotoxy(hOut,FiameX+2*Fiame_\vidth-2,FrameY+FrameJieight);prmtf(nJI〞);a[FrameX][FrameY+Frame_height]=2;a[FrameX+2*Frame_width-2][FrameY+FiameJieight]=2;fbr(i=2;i<2*Frame_width-2;i+=2)(gotoxy(hOut.FrameX+i.FiameY);pnntf(〞一〞); //打印上橫框fbr(i=2;i<2*Frame_width-2;i+=2)(gotoxy(hOut.FrameX+i.FrameY+Frame_height);printf(〞一"); //打印下橫框a[FiameX+i][FrameY+FiaineJieight]=2; 〃記住卜橫框有圖案fbr(i=l;i<Frame_height;i-H-)(gotoxy(hOut.FrameX,FiameY+i);pnntfC*|〞); //打印左豎框afFiameX][FrameY+i]=2; 〃記住左豎框有圖案fbr(i=l;i<Frame_height;i-H-)(gotoxy(hOut.FrameX+2*Frame_width-2,FiameY+i);pnntfC*|〞); //打印右豎框a[FrameX+2*Frame_width-2][FrameY+i]=2; 〃記住右豎框有圖案)}/******制作俄羅斯a[tetris->x-2][tetris->y]=b[2];a[tetris->x+2][tetris->y]=b[3];break;)case7: //T字順時針轉270度方塊(a[tetris->x][tetris->y-1]=b[1];a[tetris->x][tetiis->y+l]=b[2];a[tetris->x+2][tetns->y]=b[3];break;)case8: //Z字方塊(a[tetris->x][tetiis->y+l]=b[l];a[tetris->x-2][tetris->y]=b[2];a[tetris->x+2][tetris->y+l]=b[3];break;)case9: //Z字順時針轉90度方塊(a[tetris->x][tetris->y-1]=b[1];a[tetris->x-2][tetris->y]=b[2];a[tetris->x-2][tetris->y+1]=b[3];break;)case10: //Z字順時針轉180度方塊(a[tetris->x][tetris->y-1]=b[1];a[tetris->x-2][tetris->y-l]=b[2];a[tetris->x+2][tetris->y]=b[3];break;)case11: //Z字順時針轉270度方塊(a[tetris->x][tetiis->y+l]=b[l];a[tetris->x+2][tetris->y-1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;)case12: //7字方塊a[tetiis->x][tetris->y-1]=b[1];a[tetiis->x][tetris->y+l]=b[2];a[tetris->x-2][tetris->y-1]=b[3];break;)case13: //7字順時針轉90度方塊(a[tetris->x-2][tetris->y]=b[l];a[tetris->x-2][tetris->y+1]=b[2];a[tetiis->x+2][tetris->y]=b[3];break;)case14: //7字順時針轉180度方塊(a[tetris->x][tetris->y-l]=b[l];a[tetris->x][tetris->y+l]=b[2];a[tetris->x+2][tetris->y+1]=b[3];break;)case15: //7字順時針轉270度方塊(a[tetris->x-2][tetris->y]=b[l];a[tetris->x+2][tetris->y-1]=b[2];a[tetiis->x+2][tetris->y]=b[3];break;)case16: 〃倒7字方塊(a[tetris->x][tetris->y+l]=b[l];a[tetris->x][tetris->y-1]=b[2];a[tetris->x+2][tetris->y-l]=b[3];break;)case17: 〃倒7字順指針轉90度方塊(a[tetris->x-2][tetris->y]=b[l];a[tetris->x-2][tetris->y-l]=b[2];a[tetiis->x+2][tetris->y]=b[3];break;)case18: 〃倒7字順時針轉180度方塊(a[tetris->x][tetris->y-l]=b[l];a[tetris->x][tetris->y+l]=b[2];a[tetris->x-2][tetris->y+1]=b[3];break;)case19:〃倒7字順時針轉270度方塊a[tetris->x-2][tetris->y]=b[l];a[tetris->x+2][tetris->y+1]=b[2];a[tetris->x+2][tetris->y]=b[3];break;))}儼***** 判 斷 是 否 可************************************************************************〃mtifliuoveable(stiiictTetris*tetiis)if(a[teUis->x][tetns->y]!=0)//當中央方塊位置上有圖案時,返回值為0,即不可移動return0;)elseif(//當為田字方塊且除中央方塊位置外,其他“II〞字方塊位置上無圖案時,返回值為1,即可移動(tetris->flag=1&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x-r2][tetris->y-1]==0&&a[tetiis->x+2][tetris->y]==0))||〃或為直線方塊旦除中央方塊位置外,其他〞11〞字方塊位置上無圖案時,返回值為1,即可移動(tetris->flag=2&&(a[tetiis->x-2][tetiis->y]=0&&TOC\o"1-5"\h\za[tetris->x-i-2][tetris->y]==0&&a[tetiis->x+4][tetris->y]==0)) ||(tetris->flag=3&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x][tetiis->y-2]==0&&a[tetiis->x][tetris->y+l]==0)) ||(tetris->flag=4&&(a[tetiis->x-2][tetiis->y]=0&&a[tetris->x-i-2][tetris->y]==0&&a[tetiis->x][tetris->y+1]==0)) ||(tetris->flag=5&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x][tetiis->y+1]==0&&a[tetiis->x-2][tetris->y]==0)) ||(tetris->flag=6&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x-2][tetris->y]==0&&a[tetiis->x+2][tetris->y]==0)) ||(tetris->flag=7&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x][tetiis->y+1]==0&&a[tetiis->x+2][tetris->y]==0)) ||(tetris->flag=8&&(a[tetiis->x][tetris->y+l]=0 &&a[tetris->x-2][tetris->y]==0&&a[tetiis->x+2][tetris->y+1]==0))||(tetris->flag=9&&(a[tetiis->x][tetris->y-1]=0 &&a[tetris->x-2][tetris->y]==0&&a[tetiis->x-2][tetris->y+l]=0))||(tetris->flag=10&&(a[tetiis->x][tetris->y-1]==0 &&a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetiis->y]==0))||(tetiis->flag=ll&&(a[tetris->x][tetiis->y+l]=O&&
a[tetris->x-i-2][tetris->y-1]==0&&a[tetiis->x+2][tetris->y]==O))||(tetris->flag=12&&(a[tetris->x][tetris->y-l]==O&&a[tetris->x][tetiis->y+1]==0&&a[tetris->x-2][tetris->y-1]==0))||(tetris->flag=13&&(a[tetris->x-2][tetris->y]==0&&a[tetris->x-2][tetris->y+1]==0&&a[tetiis->x+2][tetris->y]==O))||(tetris->flag=14&&(a[tetris->x][tetris->y-l]==O&&a[tetris->x][tetiis->y+1]==0&&a[tetris->x+2][tetris->y+l]==0))||(tetris->flag=15&&(a[tetris->x-2][tetris->y]==0&&a[tetris->x-i-2][tetris->y-1]==0&&a[tetiis->x+2][tetris->y]==O))||(tetris->flag=16&&(a[tetris->x][tetris->y+l]==0 &&a[tetris->x][tetiis->y-1]==0&&a[tetiis->x+2][tetris->y-1]==0))||(tetris->flag=17&&(a[tetris->x-2][tetris->y]==0&&a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==O))||(tetris->flag=18&&(a[tetris->x][tetris->y-1]==0&&a[tetris->x][tetiis->y+1]==0&&a[tetris->x-2][tetris->y+1]==0))||(tetris->flag=19&&(a[tetris->x-2][tetris->y]==O &&a[tetris->x+2][tetris->y+l]=0&&a[tetris->x+2][tetris->y]==O)))(return1;))return0;}/******隨機產生俄羅斯方塊類型的序號*****************:$:**********:$:***********************:$:*****/voidget_flag(stnictTetiis*tetris){tetiis->count++; 〃記住產生方塊的個數(shù)srand((unsigned)tmie(NULL));〃初始化隨機數(shù)if(tetiis->count==1)(tetris->flag=iandQ%19+l;〃記住第一個方塊的序號)tetris->next=rand()%19+1; 〃記住下一個方塊的序號}斯方塊/******打印俄斯方塊*****************:$:**********:$:*************************:$:************:$:**「voidprmt_tetris(HANDLEhOut,structTetris*tetiis){fdr(i=0;i<4;i++)(b[i]=l; 〃數(shù)組b[4]的每個元素的值都為1〃制作俄羅斯方塊〃制作俄羅斯方塊niake_tetiis(tetris);fbr(i=tetiis->x-2;i<=tetiis->x+4;i+=2)fbr(j=tetns->y-2;j<=tetiis->y+lJ++){if(a[i][j]==l&&j>FiameY){gotoxy(hOutj,j);pnntf(,,%s".shape[ss]); 〃打印邊框內的方塊口)})〃打印菜單信息gotoxy(hOut,FrameX+2*Frame_\vidth+3‘FrameY+1);prmtf(Hlevel:%d,\tetns->level);gotoxy(hOut,FrameX+2*Frame_\vidth+3,FrameY+3);printff'score:%dM,tetiis->score);gotoxy(hOut,FrameX+2*Frame_\vidth+3,FrameY+5);prmtf(Hspeed:%dms,\tetiis->speed);}/******清除俄羅斯方塊的****************************************************************/voidclear_tetiis(HANDLEhOut,structTetris*tetiis){fdr(i=0;i<4;i++)(b[i]=0; //數(shù)組b[4]的每個元素的值都為0}niake_tetiis(tetris); //制作俄羅斯方塊fbr(i=tetris->x-2;i<=tetiis->x+4;i+=2)(foi(j=tetns->y-2j<=tetiis->y4-1J++){if(a[i](j]==0&&j>FrameY)(gotoxy(hOut,i,j);pnntfC〞); //去除方塊)})}/******判斷是否滿行并刪除滿行的俄羅斯方塊****************************************************/voiddel_full(HANDLEhOut,structTetris*tetris)(〃當某行有Frame_width-2個方塊時,那么滿行mtk,deLcount=0;〃分別用于記錄某行方塊的個數(shù)和刪除方塊的行數(shù)的變量fdr(j=FiameY+FrameJieight-1;j>=FrameY+l;j~)k=0;fdr(i=FiameX+2;i<FrameX+2*Frame_width-2;i+=2){if(a[i]|j]==l)〃豎坐標依次從下往上,橫坐標依次由左至右判斷是否滿行(k++;〃記錄此行方塊的個數(shù)if(k=Frame_widtli-2){fbr(k=FrameX+2;k<FraineX+2*Fiame_width-2:k+=2)(〃刪除滿行的方塊a[k][j]=O;gotoxy(hOut,kj);prmtff'");Sleep⑴;)fbr(k=j-1;k>FiameY;k-?){〃如果刪除行以上的位置有方塊,那么先去除,再將方塊下移一個位置fbr(i=FrameX+2;i<FrameX+2*Frame_width-2;i+=2){if(a[i][k]=l)(a[i][k]=O;gotoxy(hOut,i,k);prmtf(M“);a[i][k+l]=l;gotoxy(hOut,i,k+1);printf(〞%s〞,shape[ss]);})J++; 〃方塊下移后,重新判斷刪除行是否滿行del_count-H-;//記錄刪除方塊的行數(shù)})})tetiis->scoie+=l00*del_count;〃每刪除一行,得100分if(del_count>0&&(tetns->score%1000==0||tetiis->scoie/l000>tetris->level-1)){ //如果得1000分即累計刪除10行,速度加快20ms并升一級tetris->speed-=20;tetris->level-H-;
)}/****** 開 始 游 戲******************************************************************************/voidstan_gameQ〃定義結構體的指針并指向結構體變量//定義接收鍵盤輸入的變量〃初始化俄羅斯方塊數(shù)為.個//初始移動速度為300ms〃初始游戲的分數(shù)為0分//初始游戲為第1關直至游戲結束〃得到產生俄羅斯方塊類型的序號〃記住當前俄羅斯方塊序號HANDLEhOut=GetStdHandle(STD_OUTPUT.HANDLE);〃定義顯示器句柄變量stnictTetrist,*tetns=&t;unsignedcharch;tetiis->count=〃定義結構體的指針并指向結構體變量//定義接收鍵盤輸入的變量〃初始化俄羅斯方塊數(shù)為.個//初始移動速度為300ms〃初始游戲的分數(shù)為0分//初始游戲為第1關直至游戲結束〃得到產生俄羅斯方塊類型的序號〃記住當前俄羅斯方塊序號//打印下一個俄羅斯方塊的圖形(右邊窗11)tetris->x=FrameX+2*Frame_width+6;tetris->v=FrameY+10;tetris->flag=tetiis->next;print_tetiis(hOut5tetris);tetris->x=FrameX+Frame_width;〃初始中央方塊x坐標tetris->y=FrameY-1; 〃初始中央方塊y坐標tetris->flag=temp; 〃取出當前的俄羅斯方塊序號wlule(l){〃限制方塊方向,直至方塊不再下移label:print_tetiis(hOut,tetris);//打印俄羅斯方塊Sleep(tetris->speed); //延緩時間clear_tetris(hOut,tetris);〃去除痕跡templ=teuis->x;〃記住中央方塊橫坐標的值temp2=tettis->flag; 〃記住當前俄羅斯方塊序號if(kblut()){ 〃判斷是否有鍵盤輸入,有那么用chi接收ch=getch();〃按一鍵那么向左動,中央橫〃按一鍵那么向左動,中央橫坐標減2tetiis->x-=2;〃按一〃按一鍵那么向右動,中央橫坐標加2〃按t鍵那么變體即當前方塊順時針轉90度if(ch==77)tetiis->x+=2;}if(ch==72)if(tetris-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年自治區(qū)科技廳直屬事業(yè)單位引進考試真題
- 修繕采購協(xié)議合同范本
- 兼職輔導老師合同范例
- 新能源汽車動力蓄電池系統(tǒng)構造與檢修 項目三-課后習題帶答案
- 勞務分包用工合同范本
- 公司銷售渠道合同范本
- 農民玉米出售合同范本
- 2024年杭州銀行招聘考試真題
- 2024年江西省人才服務有限公司招聘筆試真題
- 企業(yè)雇傭貨車合同范本
- 基于人工智能的農產品追溯系統(tǒng)解決方案
- 鐵路典型事故案例分析
- 米伊林《十萬個為什么》導讀課課件
- 五年(2020-2024)高考歷史真題分類匯編(山東)專題12 世界殖民體系的形成、瓦解與亞非拉民族民主運動(原卷版)
- 《處方藥和非處方藥管理現(xiàn)狀、存在的問題及完善對策研究》6900字(論文)
- 《股權激勵對公司績效影響探究的國內外文獻綜述》5800字
- 橋梁專業(yè)承臺墩身試題及答案
- 醫(yī)院進修匯報
- 2024至2030年中國阻隔防爆橇裝式加油裝置行業(yè)投資前景及策略咨詢研究報告
- DB34∕T 3247-2018 井采煤礦綠色礦山建設要求
- 2024至2030年中國小模數(shù)齒輪市場調查與行業(yè)前景預測專題研究報告
評論
0/150
提交評論