俄羅斯方塊規(guī)則簡(jiǎn)述及源代碼1_第1頁
俄羅斯方塊規(guī)則簡(jiǎn)述及源代碼1_第2頁
俄羅斯方塊規(guī)則簡(jiǎn)述及源代碼1_第3頁
俄羅斯方塊規(guī)則簡(jiǎn)述及源代碼1_第4頁
俄羅斯方塊規(guī)則簡(jiǎn)述及源代碼1_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、俄羅斯方塊規(guī)則簡(jiǎn)述游戲元素:元素 方塊規(guī)格 55像素顏色 黑色狀態(tài) 透明,不透明 核心規(guī)則元素: fangkuai_bitmap(方塊美術(shù)圖文件名)規(guī)格: 55像素 黑色變量: alpa(alpa=1為透明,alpa=0為不透明) 場(chǎng)景構(gòu)成:形狀 長(zhǎng)方形,長(zhǎng)寬規(guī)格 由mn個(gè)元素方塊構(gòu)成,m表示長(zhǎng),n表示寬,一個(gè)方塊大小為一個(gè)計(jì)量單位 比如:1812 表示長(zhǎng)度為18個(gè)方塊大小,寬度為12個(gè)方塊大小。顏色 透明狀態(tài) 所有方塊alpa=1核心規(guī)則構(gòu)成元素: mn個(gè)fangkuai_bitmap方塊識(shí)別: 引入數(shù)組allx,y來對(duì)每一個(gè)方塊在場(chǎng)景中的位置做唯一的標(biāo)記,x的數(shù)值對(duì)應(yīng)m的數(shù)值,y的數(shù)值對(duì)應(yīng)

2、n的數(shù)值。 例如:1812大小的場(chǎng)景,由1812個(gè)方塊組成,那么用allx,y來標(biāo)記方塊這樣,坐標(biāo)1,1就表示圖中黑色的方塊, 坐標(biāo)18,12就表示圖中紅色的方塊依次類推。y標(biāo)記x標(biāo)記 變量賦值: alpa=1(默認(rèn)初始狀態(tài))積木生成:元素 方塊規(guī)格 由4個(gè)方塊按照一定規(guī)則組合而成 ,如圖: 共計(jì)19件 顏色黑色狀態(tài)不透明核心規(guī)則 積木是通過場(chǎng)景中以下坐標(biāo)標(biāo)記的方塊的alpa值來生成的: 1,y2-1 1,y2 1,y2+12,y2-1 2,y2 2,y2+13,y2-1 3,y2 3,y2+1生成積木的時(shí)候,更改相應(yīng)的方塊變量值 ,其變量alpa=0以下坐標(biāo)標(biāo)記的方塊為需要更改alpa值的方

3、塊:(參考場(chǎng)景構(gòu)成的方塊識(shí)別 )積木代號(hào):b_1積木代號(hào):b_2積木代號(hào):a_2積木代號(hào):a_1積木代號(hào):e_1積木代號(hào):d_4積木代號(hào):d_3積木代號(hào):d_2積木代號(hào):d_1積木代號(hào):c_4積木代號(hào):c _3積木代號(hào):c_2積木代號(hào):c_1積木代號(hào):g_4積木代號(hào):g_3積木代號(hào):g_2積木代號(hào):f_2積木代號(hào):g_1積木代號(hào):f_1碰撞檢測(cè)規(guī)則:碰撞規(guī)則 (在方塊下落之前,我們要先進(jìn)行碰撞檢測(cè)。一判定是否滿足下落的條件。) 當(dāng)構(gòu)成積木的方塊有一個(gè)方塊最先與場(chǎng)景中其他積木方塊有垂直方向接觸時(shí),或者與場(chǎng)景底部有接觸時(shí),為成功碰撞, 否則為碰撞檢測(cè)失敗。 當(dāng)構(gòu)成積木的方塊有一個(gè)方塊最先與場(chǎng)景中其

4、他積木方塊有水平方向接觸時(shí),為成功碰撞 否則為碰撞檢測(cè)失敗。 檢測(cè)方法 ( 積木下落過程中,構(gòu)成積木的方塊的坐標(biāo)是隨時(shí)在變動(dòng)著,也代表著場(chǎng)景中方塊alpa值的變動(dòng))構(gòu)成積木的方塊坐標(biāo)x,y,檢測(cè)x+1,y=1時(shí)候成立,為碰撞檢測(cè)失敗 檢測(cè)x,y+1=1時(shí)候成立,為碰撞檢測(cè)失敗 檢測(cè)x,y-1=1時(shí)候成立,為碰撞檢測(cè)失敗 檢測(cè)x+1,y=1時(shí)候不成立,即x+1,y=0,為成功碰撞。 檢測(cè)x,y+1=1時(shí)候不成立,即x,y+1=0,為成功碰撞 檢測(cè)x,y-1=1時(shí)候不成立,即x,y-1=0,為成功碰撞 當(dāng)x+1m時(shí),或則y+1n或則y-1左平移命令-x2,y2=1 x2,y2-1=0 x3,y3=

5、0 碰撞檢測(cè)失敗 x3,y3=1 x3,y3-1=0 x4,y4=0 x4,y4=1 , x4,y4-1=0 平移后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 移動(dòng)后坐標(biāo)構(gòu)成積木的方塊系統(tǒng)初始化坐標(biāo)x1,y1=0 x1,y1=1 x1,y1+1=0 x2,y2=0 -右平移命令-x2,y2=1 x2,y2+1=0 x3,y3=0 碰撞檢測(cè)失敗 x3,y3=1 x3,y3+1=0 x4,y4=0 x4,y4=1 ,x4,y4+1 =0 平移后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 第二次平移: 移動(dòng)后坐標(biāo)構(gòu)成積木的方塊默認(rèn)初始坐標(biāo) x1,y1=0 x1,y1=1 x1,y1-1=0 x2,y2=0 -左平移命令- x2,y2=

6、1 x2,y2-1=0 x3,y3=0 碰撞檢測(cè)失敗 x3,y3=1 x3,y3-1=0 x4,y4=0 x4,y4=1 ,x4,y4-1=0 平移后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 移動(dòng)后坐標(biāo)構(gòu)成積木的方塊默認(rèn)初始坐標(biāo) x1,y1=0 x1,y1=1 x1,y1+1=0 x2,y2=0 -右平移命令-x2,y2=1 x2,y2+1=0 x3,y3=0 碰撞檢測(cè)失敗 x3,y3=1 x3,y3+1=0 x4,y4=0 x4,y4=1 ,x4,y4+1=0 平移后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 移動(dòng)后坐標(biāo)構(gòu)成積木的方塊默認(rèn)初始坐標(biāo) x1,y1=0 x1,y1=0 x2,y2=0 -左平移命令- x2,y2=0

7、 x3,y3=0 成功碰撞 x3,y3=0 x4,y4=0 x4,y4=0 平移后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 移動(dòng)后坐標(biāo)構(gòu)成積木的方塊默認(rèn)初始坐標(biāo) x1,y1=0 x1,y1=0 x2,y2=0 -右平移命令-x2,y2=0 x3,y3=0 成功碰撞 x3,y3=0 x4,y4=0 x4,y4=0 依次類推。將下落后的坐標(biāo)再定為初始坐標(biāo),循環(huán)垂直下落: 初始坐標(biāo) 下落一層后坐標(biāo) x1,y1=0 x1,y1=1 x1+1,y1=0 垂直下落命令 x2,y2=0 x2,y2=1 x2+1,y2=0 x3,y3=0 x3,y3=1 x3+1,y3=0 x4,y4=0 x4,y4=1 x4+1,y4=0

8、 碰撞檢測(cè)(失?。?消除規(guī)則:操作按鍵 無(系統(tǒng)自動(dòng)完成)消除規(guī)則 (以x軸來分層,一個(gè)方塊大小為一層。) 條件:在同一層中被添滿方塊時(shí)觸發(fā) 結(jié)果:該層方塊被消除,在該層上方的方塊下落一層。積分規(guī)則 一次消除一層: 獲得10積分 一次消除二層: 獲得30積分 一次消除三層: 獲得50積分 一次消除四層: 獲得70積分核心規(guī)則 條件: xy大小場(chǎng)景,根據(jù)x=1+,x=x的方法檢測(cè)方塊坐標(biāo)x,y ,檢測(cè)x,y|(y=1+,y=y)=0是否成立,成立則觸發(fā) 結(jié)果:x,y|(y=1+,y=y)=1, 再將x-1,y|(y=1+,y=y) 的值賦值給x,y|(y=1+,y=y), 再將x-2,y|(y=

9、1+,y=y) 的值賦值給x-1,y|(y=1+,yx2,y2=0 - x2,y2=1 x2+1,y2=0 x3,y3=0 x3,y3=1 x3+1,y3=0 x4,y4=0 x4,y4=1,x4+1,y4=0 下落后的坐標(biāo)再默認(rèn)賦給初始坐標(biāo) 勝利與失?。簞倮麠l件 通過所有關(guān)卡后還沒有失敗 關(guān)卡1 過關(guān)要求:達(dá)到1000積分 關(guān)卡2 過關(guān)要求:達(dá)到2000積分 關(guān)卡3 過關(guān)要求:達(dá)到3000積分 關(guān)卡4 過關(guān)要求:達(dá)到4000積分 關(guān)卡5 過關(guān)要求:達(dá)到5000積分 關(guān)卡6 過關(guān)要求:達(dá)到6000積分 關(guān)卡7 過關(guān)要求:達(dá)到7000積分 關(guān)卡8 過關(guān)要求;達(dá)到8000積分 關(guān)卡9 過關(guān)要求:達(dá)

10、到9000積分失敗條件 (游戲規(guī)則)當(dāng)積木堆積的最高處達(dá)到場(chǎng)景的最高處時(shí),宣告游戲失敗并結(jié)束游戲。失敗流程 滿足失敗條件 則清空?qǐng)鼍昂谏綁K 顯示出“over”字樣。 回到游戲開始畫面。核心規(guī)則 失敗條件:當(dāng)數(shù)組allx,y中1,*標(biāo)記的方塊中有一個(gè)方塊的透明度=0 失敗流程: 滿足失敗條件 則所有方塊透明度=1 特定坐標(biāo)的方塊透明度=0,顯示出“over”字樣。 回到游戲開始畫面。規(guī)則流程圖:場(chǎng)景生成規(guī)則積木生成規(guī)則檢測(cè)成功碰撞檢測(cè)規(guī)則消除規(guī)則檢測(cè)失敗(在速度設(shè)置中滿足時(shí)間間隔條件) (玩家操作輸入)勝利與失敗規(guī)則移動(dòng)規(guī)則下落規(guī)則 import java.awt.*;import java.

11、applet.applet;public class blocks extends applet implements runnabledimension d;font largefont= new font(helvetica, font.bold, 28);font smallfont= new font(helvetica, font.bold, 10);color textcolor1=new color(96,128,255);color textcolor2=new color(255,160,64);fontmetrics fmsmall, fmlarge;graphics go

12、ff;image ii;threadthethread;boolean ingame=false;final short xblocks=10;final short yblocks=20;final int blocksize=16;final int width=xblocks*blocksize;final int height=yblocks*blocksize;short screendata;final short maxcolors=6;color blocks;final int barwidth=8;final color barcolor=new color(128,255

13、,64);final color background=new color(0,0,0);int score;short emptyline;int objectx, objecty;int objectx;short objecttype;short objectcolor;int objectrotation;int objectrotationd=0;short objectptr;short checkptr;final short itemcount=7;final short itemrotlen=8;final short itemlen=itemrotlen*4;short c

14、ount;final short maxcount=5;short curcount;boolean fast=false;final short screendelay=40;short screencount=40;boolean showtitle=true;int items=0,0, -1,0, 0,-1, -1,-1, /四方形,正常狀態(tài)0,0, -1,0, 0,1, -1,1, /被旋轉(zhuǎn)90度0,0, 1,0, 0,1, 1,1,0,0, 1,0, 0,-1, 1,-1,0,0, 0,-1, 0,-2, 0,-3,0,0, -1,0, -2,0, -3,0,0,0, 0,1, 0

15、,2, 0,3,0,0, 1,0, 2,0, 3,0,0,0, 1,0, 0,-1, -1,-1,0,0, 0,-1, -1,0, -1,1,0,0, -1,0, 0,1, 1,1,0,0, 0,1, 1,0, 1,-1,0,0, -1,0, 0,-1, 1,-1,0,0, 0,1, -1,0, -1,-1,0,0, 1,0, 0,1, -1,1,0,0, 0,-1, 1,0, 1,1,0,0, 1,0, -1,0, 0,-1,0,0, 0,1, 0,-1, -1,0,0,0, 0,1, -1,0, 1,0,0,0, 1,0, 0,-1, 0,1,0,0, 0,-1, 1,-1, 0,1,0,

16、0, -1,0, -1,-1, 1,0,0,0, -1,1, 0,1, 0,-1,0,0, -1,0, 1,0, 1,1,0,0, 0,1, 0,-1, -1,-1,0,0, 1,0, -1,0, -1,1,0,0, 0,-1, 0,1, 1,1,0,0, -1,0, 1,0, 1,-1,;int checks=-1,1, 0,1, -1,1, 0,1,-1,2, 0,2, -1,2, 0,2,0,2, 1,2, 0,2, 1,2,0,1, 1,1, 0,1, 1,1,0,1, 0,1, 0,1, 0,1,0,1, -1,1, -2,1, -3,1,0,4, 0,4, 0,4, 0,4,0,1

17、, 1,1, 2,1, 3,1,0,1, -1,0, 1,1, 0,1,0,1, -1,2, 0,1, -1,2,0,2, 1,2, -1,2, 0,2,0,2, 1,1, 0,2, 1,1,-1,1, 0,1, 1,0, 1,0,-1,1, 0,2, 0,2, -1,1,-1,2, 0,2, 1,1, 1,1,0,1, 1,2, 0,1, 1,2,-1,1, 0,1, 1,1, 1,1,-1,1, 0,2, 0,2, -1,1,-1,1, 0,2, 1,1, 1,1,0,2, 1,1, 0,2, 1,1,0,2, 1,0, 1,0, 0,2,-1,1, 0,1, 1,1, 1,1,-1,2,

18、 0,2, 0,2, -1,2,-1,1, 0,1, 1,2, 1,2,-1,0, 0,2, 0,2, -1,0,-1,2, 0,1, 1,1, 1,1,0,2, 1,2, 1,2, 0,2,-1,1, 0,1, 1,1, 1,1,;public string getappletinfo()return(blocks - by ali);/初始化appletpublic void init()short i;screendata=new shortxblocksyblocks;blocks=new colormaxcolors+1;/設(shè)置背景色blocks0=background;/設(shè)置方塊顏

19、色blocks1=new color(255,0,0);blocks2=new color(0,255,0);blocks3=new color(0,0,255);blocks4=new color(255,255,0);blocks5=new color(255,0,255);blocks6=new color(0,255,255);graphics g;resize(width+2*barwidth,height+30);d=size();setbackground(background);g=getgraphics();g.setfont(smallfont);fmsmall=g.get

20、fontmetrics();g.setfont(largefont);fmlarge=g.getfontmetrics();gameinit();/初始化游戲public boid gameinit()short i,j;for(i=0;ixblocks;i+)for(j=0;j=itemcount)objecttype=itemcount-1;objectptr=(short)(objecttype*itemlen);checkptr=(short)(mat.random()*maxcolors+1);if (objectcolormaxcolors)objectcolor=maxcolor

21、s;objectrotation=0;count=maxcount;/判斷游戲是否結(jié)束for(i=0;i=0&screendataobjectx+itemsobjectptr+i*2y!=0)ingame=false;showtitle=true;/判斷鍵盤是否被按下,并且處理事件public boolean keydown(event e, int key)if(ingame)if(key=event.left)objectdx=-1;else if (key=event.right)objectdx=1;else if (key=event.up)objectrotationd=1;els

22、e if (key=event.down)fast=true;else if (key=event.escape)ingame=false;elseif(key=s|key=s)ingame=true;gameinit();return true;/處理鍵盤抬起事件public boolean keyup(event e, int key)if(key=event.down)fast=false;return true;/paint()方法public void paint(graphics g)graphics gg;if (goff=null&d.width0&d.height0)ii=c

23、reateimage(d.width, d.height);goff=ii.getgraphics();if(goff=null|ii=null)return;/設(shè)置背景色goff.setcolor(background);goff.fillrect(0, 0, d.width, d.height);/如果游戲已經(jīng)開始if(ingame)/調(diào)用playgame()方法playgame();else/否則,顯示其他信息/顯示初始信息showintro();/ 顯示得分showscore();g.drawimage(ii, 0, 0, this);/實(shí)現(xiàn)游戲public void playgame

24、()boolean bottomreached=false;boolean stillscrolling=false;if(emptyline0)bottomreached=drawobject();elsescrolldown();stillscrolling=true;drawbars();drawblocks();if(stillscrolling|bottomreached)checkfull();/顯示初始信息public void showintro()string s;drawbars();drawblocks();if (showtitle)goff.setfont(large

25、font);s=俄羅斯方塊goff.setcolor(textcolor1);goff.drawstring(s, barwidth+(width-fmlarge.stringwidth(s)/2-2,height/2-22);goff.setcolor(color.white);goff.drawstring(s, barwidth+(width-fmlarge.stringwidth(s)/2,height/2-20);elsegoff.setfont(smallfont);s=請(qǐng)按下s鍵開始游戲;goff.setcolor(textcolor1);goff.drawstring(s,ba

26、rwidth+(width-fmsmall.stringwidth(s)/2-1,height/2-31);goff.setcolor(color.white);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2,height/2-30);s=使用左右方向鍵控制運(yùn)動(dòng);goff.setcolor(textcolor2);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2-1,height/2-11);goff.setcolor(color.white);goff.d

27、rawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2,height/2-10);s=使用向下的方向鍵實(shí)現(xiàn)旋轉(zhuǎn);goff.setcolor(textcolor2);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2-1,height/2+9);goff.setcolor(color.white);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2,height/2+10);s=使用向下的方向鍵實(shí)現(xiàn)下降;goff.s

28、etcolor(textcolor2);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2-1,height/2+29);goff.setcolor(color.white);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2,height/2+30);screencount-;if(screencount=0) screencount=screendelay; showtitle=!showtitle; public void drawbars()goff.se

29、tcolor(barcolor);goff.fillrect(0,0,barwidth,blocksize*yblocks);goff.fillrect(barwidth+blocksize*xblocks,0,barwidth,blocksize*yblocks);goff.fillrect(0,blocksize*yblocks,xblocks*blocksize+2*barwidth,barwidth);public boolean drawobject()short i;boolean bottomreached=false;int x,y,checkx,checky;/清除舊圖形fo

30、r(i=0;i=0)screendataxy=0;if(screendatacheckschecky!=0)bottomreached=true;if(!bottomreached)count-;if(count=0|fast)objecty+;count=curcount;checkrotation();objectdx=0;objectrotationd=0;/繪制新圖形for(i=0;i=0)screendataxy=objectcolor;if(y=(yblocks-1)bottomreached=true;if (bottomreached)score+;newobject();return bottomreached;public void checkrotation()int dummyx;int dummyrot;int x,y;short i;boolean cando=true;dummyrot=(objectrotation+objectrotationd)%4;dummyx=objectx+objectdx;/確認(rèn)該部分不會(huì)使屏幕旋轉(zhuǎn)for(i=0;i=xblocks)dummyx-=(x-xblocks+1);else if(x0)dumm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論