c俄羅斯方塊代碼(北郵版)_第1頁
c俄羅斯方塊代碼(北郵版)_第2頁
c俄羅斯方塊代碼(北郵版)_第3頁
c俄羅斯方塊代碼(北郵版)_第4頁
c俄羅斯方塊代碼(北郵版)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#include #include #include #include #include #include colorConsole.h/ 老師的文件void begin();/ 開始游戲void frame();/ 邊框設(shè)定int * getblocks();/ 方塊產(chǎn)生void move(int line);/ 移動void drawblocks(int line);/ 方塊顯示void clearsquare(int line); / 方塊擦出void turn(int line);/ 方塊旋轉(zhuǎn)bool isavailable(int line); / 判斷是否能下落void remem

2、ber(int line);/ 記憶方塊位置void deleteline(int line);/ 方塊滿一行消除bool ifgameover();/ 判斷是否游戲結(jié)束void end();/ 游戲結(jié)束#define up72#define down80#define left751/23#define right77#define esc27HANDLE handle;int a144=1,1,1,1;/ 七種方塊的二維數(shù)組int a244=0,1,1,1,1;int a344=1,1,0,1,1;int a444=0,0,1,1,1,1;int a544=0,1,1,1,1;int a6

3、44=1,1,1,1;int a744=1,1,1,1;int row=0;/ 列數(shù)int score=0;int level=0;int * block1=NULL;int * block2=NULL;int * block3=NULL;intcoordinate1218=0;/ 坐標數(shù)組,邊框 12*18(最后一行,兩邊邊框計算在內(nèi) )int judge=0;int scorex=0;int temp44=0;void main()/ 主函數(shù)2/23int t=1;handle = initiate();while(t)t=0;begin();sndPlaySound(music.wav,

4、SND_LOOP|SND_ASYNC);frame();WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSI TY;for(int k=1;k=999999;k+)if(ifgameover()/ 判斷是否結(jié)束textout(handle,34,10,wColors,1,Game Over);Sleep(800);end();elseif(k=1)3/23block2=getblocks();block3=block2;/block2 指向?qū)⒊霈F(xiàn)的方塊地址block2=getblocks();/ 獲取

5、下一個新的方塊block1=block3;row=52;clearsquare(16);/ 擦除 next 的方塊block1=block2;drawblocks(15);/ 在 next 顯示下一塊方塊圖形row=34;block1=block3;for(int i=4;i=7;i+)/ 所構(gòu)建的方塊圖形最多只有占有兩排,所以只用4-7if(*(block1+i)textout(handle,26+i*2,4,wColors,1, );/ 方塊先露出下面部分 Sleep(500-50*level);for(int line=4;line=22;line+)/ 方塊自主下落,方即可對應(yīng)塊從第四

6、排開始出現(xiàn)if(isavailable(line)/ 檢驗剛產(chǎn)生的方塊是否碰壁,碰到已落方塊初的下面分4/23下落方塊 clearsquare(line);/ 消除方塊先露 drawblocks(line);/ 產(chǎn)生完整的 move(line);elseremember(line);/ 落定后將這些位置對應(yīng)的all 數(shù)組中元素置 1deleteline(line);/ 消行以及加分if(line=4)judge=1;break;void begin()int i=1;WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_INTENSITY;WOR

7、D wColors12;5/23wColors10=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTEN SITY;wColors11=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,18,4,wColors,1,);textout(handle,18,5,wColors,1,);textout(handle,18,6,wColors,1,);textout(handle,18,7,wColors,1, );textout(handle,18,8,wColors,1,);textout(handl

8、e,18,9,wColors,1,);textout(handle,18,10,wColors,1,);textout(handle,18,11,wColors,1,);textout(handle,18,12,wColors,1, );textout(handle,18,13,wColors,1,); textout(handle,18,14,wColors,1,); textout(handle,18,15,wColors,1,);textout(handle,18,16,wColors,1,簡單 中等 );textout(handle,18,17,wColors,1,請按 1請按 2);

9、textout(handle,18,18,wColors,1,);textout(handle,18,19,wColors,1,);textout(handle,18,20,wColors,1,困難請按 3);textout(handle,54,22,wColors,1,MADE BY );while(i)6/23textout(handle,30,8,wColors1,2,俄羅斯方塊 );Sleep(800);textout(handle,30,8,wColors1,2,);Sleep(800);if (_kbhit()/ 輸入等級switch(_getch()case 1:level=1;

10、i=0;/ 跳出循環(huán)break;case 2:level=4;i=0;break;7/23case 3:level=7;i=0;break;system(cls);/ 清屏void frame()/ 邊框的設(shè)定WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTEN SITY;WORD wColors11;wColors10=FOREGROUND_RED|FOREGROUND_INTENSITY;for(int i=0;i=11;i+)coordinatei17=1;/ 底排邊框定義為1for(int j=

11、0;j=17;j+)coordinate0j=1;/ 兩邊邊框定義為18/23coordinate11j=1;char string5;textout(handle,59,5,wColors,1,itoa(level,string,10);textout(handle,52,5,wColors,1,level: );textout(handle,52,9,wColors,1,score: 0);textout(handle,52,13,wColors,1,next:);textout(handle,10,6,wColors1,1,暫停 SPACE);textout(handle,10,7,wC

12、olors1,1,退出 ESC);textout(handle,10,8,wColors1,1,翻轉(zhuǎn) );textout(handle,10,9,wColors1,1,向右 );textout(handle,10,10,wColors1,1,向左 );textout(handle,10,11,wColors1,1,加速 );textout(handle,33,2,wColors,1,來戰(zhàn)個痛 );for(int m=13;m=24;m+)textout(handle,2*m,3,wColors,1, );/ 上邊框for(int n=4;n=21;n+)textout(handle,26,n,

13、wColors,1,左邊框);/9/23for(int k=4;k=21;k+)textout(handle,48,k,wColors,1, );/右邊框for(int l=13;l=23;l+)textout(handle,2*l,21,wColors,1, );/ 下邊框textout(handle,26,3,wColors,1,);textout(handle,48,3,wColors,1,);textout(handle,26,21,wColors,1,);textout(handle,48,21,wColors,1,);int * getblocks()/ 隨機方塊生成int * m

14、=NULL;srand(time(NULL);int n=rand()%7;switch(n)10/23case 0:m=&a100;break;case 1:m=&a200;break;case 2:m=&a300;break;case 3:m=&a400;break;case 4:m=&a500;break;case 5:m=&a600;break;case 6:m=&a700;break;return m;void drawblocks(int line)/ 出現(xiàn)方塊WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGR

15、OUND_INTENSI TY;for(int j=0;j=15;j+)11/23int temp;temp=j/4;if(*(block1+j)textout(handle,row+j*2-temp*8,line+temp,wColors,1, );void clearsquare(int line)/ 方塊消失WORD wColors1;wColors0=FOREGROUND_BLUE|FOREGROUND_INTENSITY;if(line=4)/ 針對消除剛產(chǎn)生的下排textout(handle,34,4,wColors,1,);textout(handle,36,4,wColors,

16、1,);textout(handle,38,4,wColors,1,);textout(handle,40,4,wColors,1,);elsefor(int m=0;m=15;m+)12/23int temp;temp=m/4;/ 得 0-3 對應(yīng)方塊數(shù)組 1-4 行if(*(block1+m)textout(handle,row+m*2-temp*8,line-1+temp,wColors,1,);void move(int line)/ 方塊的左右移動,加速下落,翻轉(zhuǎn)等int mid=0,speed=100-10*level;while(midspeed)if (_kbhit()swit

17、ch(_getch()case 72:/翻轉(zhuǎn)turn(line);break;13/23case 75:/左移row=row-2;/ 縱坐標減 2if(isavailable(line)/ 判斷是否能移動row=row+2;clearsquare(line+1); / 消除原來圖案, line+1 是避免 line=4 程序出錯row=row-2;drawblocks(line);/ 出現(xiàn)新圖案elserow=row+2;/ 若不能移動則縱坐標不變break;case 77:/右移row=row+2;if(isavailable(line)row=row-2;clearsquare(line+

18、1);14/23row=row+2;drawblocks(line);elserow=row-2;break;case 80:/加速下落,即直接跳除循環(huán)mid=speed;break;case 27:/終止游戲end();break;case 32:/暫停int flag=1;while(flag)15/23if (_kbhit()if(_getch()=32)flag=0;break;elseSleep(10);default:break;Sleep(8);/ 使方塊延遲mid+;void turn(int line)16/23clearsquare(line+1);/ 消除原來的圖案int

19、 b44=0;/ 保存旋轉(zhuǎn)前的方塊int num=0,l=0;for(int m=0;m=3;m+)for(int n=0;n=0;i-)/ 按行從下向上掃描for(int j=0;j4;j+)/ 按列從左向右掃描if(bij)/ 如果為有效點,則進行90 度旋轉(zhuǎn)tempjl=bij;num=1;17/23if(num)l+;num=0;block1=&temp00;if(isavailable(line)drawblocks(line);elsefor(int p=0;p=3;p+)for(int q=0;q=3;q+)temppq=bpq;block1=&temp00;drawblocks

20、(line);bool isavailable(int line)/ 檢驗,即看方塊即將存在位置是否已經(jīng)有1int x,y;18/23for(int m=0;m=15;m+)int temp;temp=m/4;x=row/2-13-4*temp+m;/ 邊框左邊已有 13 個位置y=line-4+temp;/ 上面已有 4 個位置if(*(block1+m)&coordinatexy) /相與為 1 則返回 0,否則跳出并循環(huán)繼續(xù) return 0;void remember(int line)/ 記憶int x,y;for(int m=0;m=15;m+)int temp;temp=m/4;x=row/2-13-temp*4+m;y=line-4+temp;if(*(block1+m)/ 如果當前位置為1,則返回原位置,并設(shè)置為1coordinatexy-1=1;19/23void deleteline(int l)/ 消行WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSI TY;int snum=0,b=0;for(int m=0;m=16;m+)/ 從上向下消去方塊if(coordinate1m=1&c

溫馨提示

  • 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

提交評論