2022年俄羅斯方塊實(shí)驗(yàn)報(bào)告_第1頁(yè)
2022年俄羅斯方塊實(shí)驗(yàn)報(bào)告_第2頁(yè)
2022年俄羅斯方塊實(shí)驗(yàn)報(bào)告_第3頁(yè)
2022年俄羅斯方塊實(shí)驗(yàn)報(bào)告_第4頁(yè)
2022年俄羅斯方塊實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、程序設(shè)計(jì)實(shí)踐報(bào)告(2012/2013學(xué)年 第2學(xué)期)題 目: 俄羅斯方塊游戲設(shè)計(jì) 專 業(yè) 學(xué) 生 姓 名 班 級(jí) 學(xué) 號(hào) 指 導(dǎo) 教 師 指 導(dǎo) 單 位 軟件工程系 日 期 2013.03.27 成績(jī)?cè)u(píng)定參考標(biāo)準(zhǔn):程序設(shè)計(jì)實(shí)踐環(huán)節(jié)評(píng)分為五級(jí)制,即:優(yōu)秀、良好、中等、及格、不及格。根據(jù)程序設(shè)計(jì)實(shí)踐過程中學(xué)生以下表現(xiàn)評(píng)定:學(xué)習(xí)態(tài)度是否端正、實(shí)驗(yàn)課前準(zhǔn)備是否充分、是否實(shí)現(xiàn)課題要求的功能、算法設(shè)計(jì)是否合理、程序設(shè)計(jì)語(yǔ)言使用是否熟練、用戶界面設(shè)計(jì)是否科學(xué)、程序設(shè)計(jì)實(shí)踐報(bào)告完成情況(包括:內(nèi)容是否詳實(shí)、文字表達(dá)是否流暢、格式是否符合規(guī)范、程序注釋是否具體)、答辯表現(xiàn)、考勤等。簡(jiǎn) 短 評(píng) 語(yǔ)教師簽名: 20

2、13 年 3月 27日評(píng)分等級(jí)俄羅斯方塊游戲設(shè)計(jì)課題內(nèi)容和要求本程序的主要任務(wù)就是編寫簡(jiǎn)單的俄羅斯方塊游戲,要求設(shè)計(jì)比較美觀和健全的游戲界面,可以實(shí)現(xiàn)方塊預(yù)覽、方塊的控制、顯示更新、分?jǐn)?shù)更新以及幫助等基本功能,減少程序本身的錯(cuò)誤,增強(qiáng)游戲的可操作性。程序的設(shè)計(jì)將結(jié)合一些有關(guān)C語(yǔ)言圖形界面設(shè)計(jì)的內(nèi)容,該部分是之前沒有接觸過的,要求利用這次機(jī)會(huì),比較簡(jiǎn)約地了解相關(guān)內(nèi)容及其簡(jiǎn)單應(yīng)用。本程序的實(shí)現(xiàn)是選用Windows XP/7操作系統(tǒng) 以及 Microsoft Visual Studio 2008 C+為編譯器,用C語(yǔ)言完成程序設(shè)計(jì)的實(shí)踐。使用Win32 控制臺(tái)應(yīng)用程序,最終在DOS界面下形成程序的主

3、界面。二、概要設(shè)計(jì)struct /此結(jié)構(gòu)體數(shù)表是打印各個(gè)方塊的依據(jù) /是該程序設(shè)計(jì)的靈魂 int vary_x4; int vary_y4; vary= 0, 2, 4, 6,0, 0, 0, 0,0, 0, 0, 0,0,-1,-2,-3,0, 2, 2, 0,0, 0,-1,-1,0,-2,-2,-4,0 ,0,-1,-1, 0, 0, 2, 2,0,-1,-1,-2,0, 2, 2, 4,0, 0,-1,-1, 0, 0,-2,-2,0,-1,-1,-2,0, 0, 2, 4,0,-1, 0, 0, 0, 0, 0, 2,0,-1,-2,-2,0, 0,-2,-4,0,-1,-1,-1,

4、 0, 2, 2, 2,0, 0,-1,-2,0, 2, 4, 4,0, 0, 0,-1, 0,-2,-2,-2,0, 0,-1,-2,0, 0, 2, 4,0,-1,-1,-1, 0, 0, 0,-2,0,-1,-2,-2,0 ,2, 4, 2,0, 0, 0,-1, 0, 0, 2, 0,0,-1,-1,-2,0,-2, 0, 2,0,-1,-1,-1, 0, 0,-2, 0,0,-1,-1,-2,;本程序中關(guān)于方塊的顏色、運(yùn)動(dòng)的速度都采用的數(shù)組常量的形式,數(shù)組的編號(hào)分別對(duì)應(yīng)方塊形狀的編號(hào),這樣就使得“方塊形狀方塊顏色運(yùn)動(dòng)速度”一一對(duì)應(yīng)起來,更直觀和方便地實(shí)現(xiàn)動(dòng)態(tài)管理。const int

5、col=11,15,12,12,10,10,9; /控制方塊的顏色const int speed=0,12,9,6,3,1; /控制方塊的下落速度const int number=0,2,3,5,7,11,15; /對(duì)應(yīng)方塊的類型編號(hào)本程序的主體部分是由多個(gè)函數(shù)的循環(huán)多層調(diào)用來實(shí)現(xiàn)的,主要由以下的九個(gè)函數(shù)構(gòu)成: void PrintNext ( int pkind)/該函數(shù)控制“下一個(gè)圖形預(yù)覽”中的方塊樣式,是整個(gè)程序的“引導(dǎo)者”、“開拓者”,將引導(dǎo)程序的動(dòng)態(tài)實(shí)現(xiàn),將決定著下面幾個(gè)函數(shù)的調(diào)用 void StraightFall (int depth)/該函數(shù)控制方塊的降落,是在整個(gè)程序中發(fā)揮著

6、至關(guān)重要的作用,是整個(gè)動(dòng)態(tài)過程的“紐帶”將具體分功能的實(shí)現(xiàn)連串起來。void ChoiceDirection (int *prev_count)/該函數(shù)實(shí)現(xiàn)鍵盤對(duì)小方塊的控制,在小方塊降落的過程中要時(shí)刻“監(jiān)視”,因此,在函數(shù)中,每當(dāng)一些變量發(fā)生變化時(shí),即要調(diào)用該函數(shù) void Revolve(int *prev_count)/該函數(shù)控制方塊的旋轉(zhuǎn)。該函數(shù)必須依附于,即每次有鍵盤的按動(dòng)時(shí),都要檢驗(yàn)是否按了“”如果按了,立即執(zhí)行該函數(shù),實(shí)行方塊的翻轉(zhuǎn)void LevelMove() /該函數(shù)控制方塊的移動(dòng)方向。該函數(shù)類似于第四個(gè)函數(shù),也是依附于 void GetDepth(int *pdepth)

7、/該函數(shù)可以得到小方塊已累積的高度,從而判斷小方塊是否已經(jīng)落下。該函數(shù)是一個(gè)在多處都需要調(diào)用的函數(shù)void CheckBoundary() /該函數(shù)可以控制、防止方塊越過邊界。一旦可能越過邊界,則之前的方向控制無效,在方塊左右移動(dòng)、變化形狀時(shí)都需要調(diào)用該函數(shù)void CheckFull(int *pscore)/檢驗(yàn)是否有一行完全被覆蓋,若有一行全部被排滿的,即刻整體下移。在函數(shù)的最后,立刻調(diào)用該函數(shù) void GameOver() /即當(dāng)depth 為0時(shí),游戲結(jié)束,顯示動(dòng)態(tài)結(jié)束畫面。在函數(shù)的最開始,立刻調(diào)用該函數(shù)程序流程圖大致如下: 說明:該程序的流程圖略顯復(fù)雜,但其實(shí)質(zhì),依舊是順序、選擇

8、、循環(huán)的使用,唯一復(fù)雜的就是循環(huán)的主體不再是簡(jiǎn)單的程序語(yǔ)句而是比較復(fù)雜的函數(shù),這樣就會(huì)使得程序的結(jié)構(gòu)比較冗雜,但如果把流程圖畫出來,就會(huì)清晰地看到問題依舊是很簡(jiǎn)單。四、關(guān)鍵源碼 for(i=0;i=0;i-) /用兩層循環(huán)來實(shí)現(xiàn)主界面方塊的打印 for(int j=0;j17;j+) gotoxy(36-j*2,3+i); puts(); Sleep(5); /延時(shí)函數(shù)的調(diào)用,使得最終的程序界面更有動(dòng)感 color(back); for(int j=0;j31;j+) for(int i=0;i17;i+) boardij.having=0; gotoxy(4+2*i,j+3); puts()

9、; Sleep(5); void Revolve(int *prev_count) /控制方塊的旋轉(zhuǎn),該函數(shù)是整個(gè)程序中最難的一部分代碼int i;before.x=current.x;before.y=current.y;(*prev_count)+;(*prev_count)%=connectionpri_kind.sum;current.x=current.x+connectionpri_kind.connection_x*prev_count;current.y=current.y+connectionpri_kind.connection_y*prev_count;CheckBoun

10、dary(); /調(diào)用檢驗(yàn)邊界函數(shù),防止方塊在旋轉(zhuǎn)過程中越出程序界面for(i=0;i16|m31)current.x=current.x-connectionpri_kind.connection_x*prev_count;current.y=current.y-connectionpri_kind.connection_y*prev_count;revolve=0;(*prev_count)-;before.x=current.x;before.y=current.y;return ;color(back); /用背景色把旋轉(zhuǎn)前的方塊覆蓋for(i=0;i2)gotoxy(before.x

11、+varykind.vary_xi,before.y+varykind.vary_yi);puts( );kind=numberpri_kind+*prev_count;color(colpri_kind); /打印旋轉(zhuǎn)后的新的方塊for(i=0;i2)gotoxy(current.x+varykind.vary_xi,current.y+varykind.vary_yi);puts();Sleep(speedrank); /根據(jù)等級(jí)來決定旋轉(zhuǎn)、下落的速度before.x=current.x;before.y=current.y;int main() /主函數(shù)是將一切子函數(shù)連串在一起的工具sr

12、and(unsigned long)time(0);gotoxy(5,5);printf(一切準(zhǔn)備就緒,游戲是否開始?n);gotoxy(4,6);printf(開始游戲請(qǐng)按S鍵,否則按任意其他鍵退出。n);char c;c=getchar();if (c!=S) exit(0); system(CLS);system(color 24); /設(shè)置背景顏色int score=0; /檢驗(yàn)文件是否能夠成功打開FILE *fp=fopen(C:els.txt,r);if(fp=NULL)fp=fopen(C:els.txt,w);fprintf (fp,%d,score);fclose(fp);P

13、rintGarphy(); /打印程序的邊界和基本框架以及其中的文字kind=rand()%7; /隨機(jī)函數(shù)來隨機(jī)確定方塊的形狀int depth;while(1) /是一個(gè)無限循環(huán),不斷地重復(fù)著游戲的過程int pkind=rand()%7;PrintNext(pkind);current.x=20; /方塊初始出現(xiàn)的位置current.y=2;GetDepth(&depth);if(depth=0) GameOver(); /當(dāng)剩余的高度為0時(shí),游戲結(jié)束 score=0; rank=1; pri_kind=kind;if(kind=6) kind=15,current.x-=2;else

14、if(kind=5) kind=11;else if(kind=4) kind=7;else if(kind=3) kind=5;else if(kind=2) kind=3,current.x+=2;else if(kind=1) kind=2;else kind=0,current.x-=2;StraightFall(depth); /調(diào)用方塊下落函數(shù)for(int i=0;i4;i+)int m=(current.x-4+varykind.vary_xi)/2;int n=current.y-3+varykind.vary_yi;boardmn.having=1;boardmn.colo

15、r=colpri_kind;CheckFull(&score); /檢驗(yàn)是否有滿行的出現(xiàn),若有,整體下呀,并加分kind=pkind;return 0;五、測(cè)試數(shù)據(jù)及其結(jié)果分析程序正式運(yùn)行前所給的提示信息 這是程序主界面,由PrintGarphy() 打印生成 程序主界面 運(yùn)行過程中的程序界面 這是游戲結(jié)束時(shí),動(dòng)態(tài)界面的一瞬間截圖 六、程序設(shè)計(jì)實(shí)踐中的關(guān)鍵技術(shù)難題以及解決辦法【問題1】在左右方向改變方塊的位置時(shí),若一直按住左鍵或右鍵,會(huì)出現(xiàn)方塊部分或整體越過程序界面的現(xiàn)象。【分析】在程序中層已經(jīng)定義和調(diào)用了函數(shù)void Getdepth() 用來計(jì)算已經(jīng)累計(jì)的高度,并由depth的值是否為0來

16、判斷是否游戲結(jié)束,是否方塊已經(jīng)降落。因此,在程序中還應(yīng)當(dāng)定義另一個(gè)函數(shù),用來判斷是否方塊越界,并在其變換和左右移動(dòng)時(shí)調(diào)用,以防止方塊的越界。【解決方法】在主程序中定義一個(gè)新的函數(shù) void CheckBoundary(),其定義如下:void CheckBoundary() int i,n,m;for(i=0;i4;i+) m=current.x+varykind.vary_xi;if(m36)current.x+=(m4?2:-2);i=0;for(i=0;i4;i+) m=(current.x+varykind.vary_xi-4)/2;n=current.y+varykind.vary_

17、yi-3;if(n31|boardmn.having)if(level=1) current.x+=2;else if(level=2) current.x-=2;level=0;break;【問題2】在程序的調(diào)用中,發(fā)現(xiàn)程序每一次運(yùn)行,“最高分”都會(huì)從0開始記。即使我把 HighScore 設(shè)為全局變量,依舊是出現(xiàn)該問題。 【分析】程序的每一次運(yùn)行,都會(huì)把每一個(gè)變量初始化。盡管全局變量的作用域是從變量定一開始一直到程序結(jié)束,然而,依舊不是“永久”,隨著程序的結(jié)束而覆滅。因而,解決的辦法就是,及時(shí)的把最高分寫到計(jì)算機(jī)的文件中,來求得“永久”的保存。【解決方法】在程序中添加以下代碼,一旦有新的最

18、高分生成,則立刻寫入文件C:els.txt.FILE *fp=fopen(C:els.txt,r)fscanf (fp,%d,&t);fclose(fp);if(*pscoret)fp=fopen(C:els.txt,w);fprintf (fp,%d,*pscore);fclose(fp);color(43);gotoxy(51,16);printf(%d,*pscore); fclose(fp);七、總結(jié)與展望兩周的編程實(shí)踐,對(duì)于自身編程水平是個(gè)不小的提高。實(shí)踐是認(rèn)識(shí)的來源、實(shí)踐是認(rèn)識(shí)發(fā)展的動(dòng)力,第一次接觸實(shí)踐課,讓我深刻感受到了實(shí)踐出真知的道理。因此,在以后的學(xué)習(xí)中,要樹立實(shí)踐的意識(shí),提

19、高把理論知識(shí)上升為實(shí)踐的能力。做成事情的前提是有一個(gè)合理可行的規(guī)劃。在本次程序設(shè)計(jì)實(shí)踐的開始階段,由于編譯器的選擇問題(即Visual C 和Turbo C),項(xiàng)目幾乎停滯不前,導(dǎo)致許多時(shí)間白白浪費(fèi)。因此在以后的實(shí)踐中,要在任務(wù)正式開展之前,就要做好充分的規(guī)劃,避免手忙腳亂。適當(dāng)?shù)慕梃b和對(duì)案例的充分分析加之對(duì)書本、互聯(lián)網(wǎng)等工具的充分使用,才能把一項(xiàng)比較龐大的工程做好。在這次的程序設(shè)計(jì)中,我在互聯(lián)網(wǎng)上找到了至少30個(gè)有關(guān)俄羅斯方塊的例子,其中能夠無差錯(cuò)運(yùn)行的少之又少。本人花費(fèi)了很大的功夫仔細(xì)地研究了那六七個(gè)案例,體悟它們程序?qū)崿F(xiàn)的方法,找到之間的區(qū)別和相同之處。在閱讀每一個(gè)程序時(shí),多多少少都會(huì)有

20、不完全理解甚至是根本看不懂的地方,這個(gè)時(shí)候,書本網(wǎng)絡(luò)就是一個(gè)極好的工具。在兩周的時(shí)間里,除了思考和面對(duì)電腦,剩余的時(shí)間幾乎就在圖書館里找資料,在追求知識(shí)的過程中,也有了許多新的發(fā)現(xiàn)。獨(dú)立的思考是一切成功的基礎(chǔ)。把一切的感知和靈感都要?dú)w咎與自己的思考。每一個(gè)案例的分析都是我獨(dú)立思考的結(jié)果,以后的學(xué)習(xí)生活中都要善于思考、勤于思考。分部編寫各個(gè)函數(shù),并對(duì)其逐一進(jìn)行測(cè)試,化大為小,是本次實(shí)踐的一大收獲,是編寫較復(fù)雜程序的有效方法。這樣有利于條理的清晰,避免錯(cuò)誤。合作與交流是成功的捷徑。與同課題的同學(xué)合作甚至是與不同課題同學(xué)的交流,都會(huì)讓我產(chǎn)生思想的火花,在困惑自己許久的問題上帶來突破。在程序中,本人很

21、想再編寫一個(gè)計(jì)時(shí)器,用來計(jì)量游戲已經(jīng)運(yùn)行的時(shí)間,幾經(jīng)嘗試都沒有成功。初步猜想,可能需要多線程的控制,下一步在這個(gè)問題上力求有所突破。源代碼:/* Copyright (C) 2013,ZhangXu,Nanjing University of Posts and Telecommunications* All rights reserved.* 當(dāng)前版本:1.2.1* 作 者:ZhangXu* 完成日期:2013年3月29日*/#include #include #include #include const int back=34;const int col=11,15,12,12,10,1

22、0,9; /用數(shù)組記錄不同方塊的顏色const int speed=0,12,9,6,3,1; /用數(shù)組記錄不同的降落速度const int number=0,2,3,5,7,11,15;int kind;int pri_kind;int rank=1; /等級(jí)狀態(tài)標(biāo)記,由此確定下落的速度int revolve=0;int level=0;structint x;int y;current,before;structint x;int y;int color;bool having;board1732;structint vary_x4;int vary_y4; vary=0, 2, 4, 6

23、,0, 0, 0, 0,0, 0, 0, 0,0,-1,-2,-3,0, 2, 2, 0,0, 0,-1,-1,0,-2,-2,-4,0 ,0,-1,-1,0, 0, 2, 2,0,-1,-1,-2,0, 2, 2, 4,0, 0,-1,-1,0, 0,-2,-2,0,-1,-1,-2,0, 0, 2, 4,0,-1, 0, 0,0, 0, 0, 2,0,-1,-2,-2,0, 0,-2,-4,0,-1,-1,-1,0, 2, 2, 2,0, 0,-1,-2,0, 2, 4, 4,0, 0, 0,-1,0,-2,-2,-2,0, 0,-1,-2,0, 0, 2, 4,0,-1,-1,-1,0,

24、 0, 0,-2,0,-1,-2,-2,0 ,2, 4, 2,0, 0, 0,-1,0, 0, 2, 0,0,-1,-1,-2,0,-2, 0, 2,0,-1,-1,-1,0, 0,-2, 0,0,-1,-1,-2,;structint sum;int connection_x5;int connection_y5;connection=2,-2,2,0,1,1,0,0,2,2,-2,0,0,2,-2,2,0,0,4,-2,0,4,-2,0,0,-1,1,4,-4,2,-2,4,0,0,-1,1,4,-2,2,0,0,0,0,0,0,;void gotoxy(int x, int y) /光標(biāo)

25、位置確定函數(shù)COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);void color(int b) /該函數(shù)的調(diào)用可以決定輸出內(nèi)容的顏色 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE) ;SetConsoleTextAttribute(hConsole, b) ;void PrintGarphy()color(1593); /初始化控制臺(tái)窗口,獲取窗口句柄,設(shè)置邊框顏色int i,j;gotoxy(2,2);

26、/確定光標(biāo)從第二行第二列開始,以下開始打印邊框for(i=0;i28;i+) printf();gotoxy(2,35);for(i=0;i28;i+)printf();for(i=0;i33;i+)gotoxy(2,3+i);printf();for(i=0;i33;i+)gotoxy(38,3+i);if(i=7|i=18)printf();else printf();for(i=0;i33;i+)gotoxy(56,3+i);printf(); /至此,完成主框架的打印 int t; FILE *fp=fopen(C:els.txt,r);fscanf (fp,%d,&t);fclose

27、(fp);color(45); /以下開始打印框架內(nèi)的文字gotoxy(40,4);printf(下一個(gè)圖形預(yù)覽:n);gotoxy(40,11);color(43);printf(最高紀(jì)錄:n);color(44);gotoxy(42,13);printf( %d,t);color(46);gotoxy(40,16);printf(當(dāng)前得分:0n);color(44);gotoxy(40,18);printf(等級(jí):n);color(39);gotoxy(40,23);puts( 請(qǐng)使用鍵盤的);gotoxy(40,24);puts(以下按鍵來控制:);gotoxy(40,26);puts(

28、 );gotoxy(40,28);puts( 按空格 暫停);gotoxy(40,29);puts( 按 ESC 退出);gotoxy(40,34);puts( 版本號(hào):V1.2.1);color(back); /使游戲區(qū)域全為背景顏色,初始化游戲界面for(i=0;i17;i+)for(j=0;j32;j+)boardij.x=4+2*i;boardij.y=3+j;boardij.having=0;gotoxy(boardij.x,boardij.y);puts( );void PrintNext(int pkind) /控制“下一個(gè)圖形預(yù)覽”中的方塊int i;int x=46,y=7;

29、color(back);for(i=0;i4;i+)gotoxy(x-3,y+i-2);puts( );pri_kind=pkind;if (pkind=6) pkind=15,x-; /調(diào)用隨機(jī)函數(shù)來決定下一個(gè)出現(xiàn)的方塊的形狀else if(pkind=5) pkind=11,x-;else if(pkind=4) pkind=7,x-;else if(pkind=3) pkind=5,x-=2;else if(pkind=2) pkind=3,x+=2;else if(pkind=1) pkind=2,x-;else pkind=0,x-=3;color(colpri_kind);for(

30、i=0;i4;i+)gotoxy(x+varypkind.vary_xi,y+varypkind.vary_yi);puts();void GetDepth(int *pdepth) /統(tǒng)計(jì)方塊已經(jīng)累積后,所剩余的高度*pdepth =31;for(int j=0;j4;j+)int sum=0;int n=(current.x+varykind.vary_xj-4)/2;int m=current.y+varykind.vary_yj-3;if(m0) m=0;for(m+;m=0&n=0&m32)sum+;elsebreak;if(sum=0;i-)for(int j=0;j17;j+)g

31、otoxy(36-j*2,3+i);puts();Sleep(5);color(back);for(int j=0;j32;j+)for(int i=0;i17;i+)boardij.having=0;gotoxy(4+2*i,j+3);puts();Sleep(5);gotoxy(45,18);while(rank-)printf( );color(46);gotoxy(50,16);puts( ); /清空分?jǐn)?shù)顯示void CheckBoundary() /控制、防止方塊越過邊界。一旦可能越過邊界,則之前的方向控制無效int i,n,m;for(i=0;i4;i+)m=current.x+

32、varykind.vary_xi;if(m36)current.x+=(m4?2:-2);i=0;for(i=0;i4;i+) m=(current.x+varykind.vary_xi-4)/2;n=current.y+varykind.vary_yi-3;if(n31|boardmn.having)if(level=1) /左移的復(fù)原current.x+=2;else if(level=2) /右移的復(fù)原current.x-=2;level=0;break;void LevelMove() /由level的值來控制方塊的移動(dòng)方向CheckBoundary();if(level=0) ret

33、urn;int i;color(back);for(i=0;i2)gotoxy(before.x+varykind.vary_xi,before.y+varykind.vary_yi);puts( );color(colpri_kind);for(i=0;i2)gotoxy(current.x+varykind.vary_xi,current.y+varykind.vary_yi);puts();before.x=current.x;void Revolve(int *prev_count) /控制方塊的旋轉(zhuǎn)int i;before.x=current.x;before.y=current.y

34、;(*prev_count)+;(*prev_count)%=connectionpri_kind.sum;current.x=current.x+connectionpri_kind.connection_x*prev_count;current.y=current.y+connectionpri_kind.connection_y*prev_count;CheckBoundary();for(i=0;i16|m31)current.x=current.x-connectionpri_kind.connection_x*prev_count;current.y=current.y-conne

35、ctionpri_kind.connection_y*prev_count;revolve=0;(*prev_count)-;before.x=current.x;before.y=current.y;return ;color(back);for(i=0;i2)gotoxy(before.x+varykind.vary_xi,before.y+varykind.vary_yi);puts( );kind=numberpri_kind+*prev_count;color(colpri_kind);for(i=0;i2)gotoxy(current.x+varykind.vary_xi,curr

36、ent.y+varykind.vary_yi);puts();Sleep(speedrank); /由游戲等級(jí)決定方塊變化速度before.x=current.x;before.y=current.y;void ChoiceDirection(int *prev_count) /時(shí)刻監(jiān)視是否觸動(dòng)鍵盤,并對(duì)不同的觸動(dòng)做處理int t=50/rank;while(t-)if(kbhit()char c=getch();switch(c)case 0 x48: / uprevolve=1;Revolve(&prev_count);break;case 0 x50: /downlevel=0;retu

37、rn;case 0 x4b: /leftbefore.x=current.x;current.x-=2;level=1;LevelMove();break;case 0 x4d: /rightbefore.x=current.x;current.x+=2;level=2;LevelMove();break;case :_getch();break;case 27:color(back);exit(1);default:break; Sleep(speedrank);void StraightFall(int depth) /控制方塊降落的函數(shù),是本程序的重中之重int i;int rev_co

38、unt=0;before.x=current.x;before.y=current.y;while(GetDepth(&depth),depth-)ChoiceDirection(&rev_count);GetDepth(&depth);if(depth=0)revolve=0;before.x=current.x;before.y=current.y;break;color(back);for(i=0;i2)gotoxy(before.x+varykind.vary_xi,before.y+varykind.vary_yi);puts( );current.y+;color(colpri_kind);for(i=0;i2)gotoxy(current.x+varykind.vary_xi,current.y+varykind.vary_yi);puts();revolve=0;before.x=current.x;before.y=current.y;ChoiceDirection(&rev_count);if(level|revolve)level=0;revolve=0;ChoiceDirection(&rev_count);StraightFall(depth);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論