俄罗斯方块规则简述及源代码_第1页
俄罗斯方块规则简述及源代码_第2页
俄罗斯方块规则简述及源代码_第3页
俄罗斯方块规则简述及源代码_第4页
俄罗斯方块规则简述及源代码_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 俄罗斯方块规则简述游戏元素:元素 方块规格 55像素颜色 黑色状态 透明,不透明 核心规则元素: fangkuai_bitmap(方块美术图文件名)规格: 55像素 黑色变量: alpa(alpa=1为透明,alpa=0为不透明) 场景构成:形状 长方形,长宽规格 由mn个元素方块构成,m表示长,n表示宽,一个方块大小为一个计量单位 比如:1812 表示长度为18个方块大小,宽度为12个方块大小。颜色 透明状态 所有方块alpa=1核心规则构成元素: mn个fangkuai_bitmap方块识别: 引入数组allx,y来对每一个方块在场景中的位置做唯一的标记,x的数值对应m的数值,y的数值对

2、应n的数值。 例如:1812大小的场景,由1812个方块组成,那么用allx,y来标记方块这样,坐标1,1就表示图中黑色的方块, 坐标18,12就表示图中红色的方块依次类推。y标记x标记 变量赋值: alpa=1(默认初始状态)积木生成:元素 方块规格 由4个方块按照一定规则组合而成 ,如图: 共计19件 颜色黑色状态不透明核心规则 积木是通过场景中以下坐标标记的方块的alpa值来生成的: 1,y2-1 1,y2 1,y2+12,y2-1 2,y2 2,y2+13,y2-1 3,y2 3,y2+1生成积木的时候,更改相应的方块变量值 ,其变量alpa=0以下坐标标记的方块为需要更改alpa值的

3、方块:(参考场景构成的方块识别 )积木代号:b_1积木代号:b_2积木代号:a_2积木代号:a_1积木代号:e_1积木代号:d_4积木代号:d_3积木代号:d_2积木代号:d_1积木代号:c_4积木代号:c _3积木代号:c_2积木代号:c_1积木代号:g_4积木代号:g_3积木代号:g_2积木代号:f_2积木代号:g_1积木代号:f_1碰撞检测规则:碰撞规则 (在方块下落之前,我们要先进行碰撞检测。一判定是否满足下落的条件。) 当构成积木的方块有一个方块最先与场景中其他积木方块有垂直方向接触时,或者与场景底部有接触时,为成功碰撞, 否则为碰撞检测失败。 当构成积木的方块有一个方块最先与场景中

4、其他积木方块有水平方向接触时,为成功碰撞 否则为碰撞检测失败。 检测方法 ( 积木下落过程中,构成积木的方块的坐标是随时在变动着,也代表着场景中方块alpa值的变动)构成积木的方块坐标x,y,检测x+1,y=1时候成立,为碰撞检测失败 检测x,y+1=1时候成立,为碰撞检测失败 检测x,y-1=1时候成立,为碰撞检测失败 检测x+1,y=1时候不成立,即x+1,y=0,为成功碰撞。 检测x,y+1=1时候不成立,即x,y+1=0,为成功碰撞 检测x,y-1=1时候不成立,即x,y-1=0,为成功碰撞 当x+1m时,或则y+1n或则y-1左平移命令-x2,y2=1 x2,y2-1=0 x3,y3

5、=0 碰撞检测失败 x3,y3=1 x3,y3-1=0 x4,y4=0 x4,y4=1 , x4,y4-1=0 平移后的坐标再默认赋给初始坐标 移动后坐标构成积木的方块系统初始化坐标x1,y1=0 x1,y1=1 x1,y1+1=0 x2,y2=0 -右平移命令-x2,y2=1 x2,y2+1=0 x3,y3=0 碰撞检测失败 x3,y3=1 x3,y3+1=0 x4,y4=0 x4,y4=1 ,x4,y4+1 =0 平移后的坐标再默认赋给初始坐标 第二次平移: 移动后坐标构成积木的方块默认初始坐标 x1,y1=0 x1,y1=1 x1,y1-1=0 x2,y2=0 -左平移命令- x2,y2

6、=1 x2,y2-1=0 x3,y3=0 碰撞检测失败 x3,y3=1 x3,y3-1=0 x4,y4=0 x4,y4=1 ,x4,y4-1=0 平移后的坐标再默认赋给初始坐标 移动后坐标构成积木的方块默认初始坐标 x1,y1=0 x1,y1=1 x1,y1+1=0 x2,y2=0 -右平移命令-x2,y2=1 x2,y2+1=0 x3,y3=0 碰撞检测失败 x3,y3=1 x3,y3+1=0 x4,y4=0 x4,y4=1 ,x4,y4+1=0 平移后的坐标再默认赋给初始坐标 移动后坐标构成积木的方块默认初始坐标 x1,y1=0 x1,y1=0 x2,y2=0 -左平移命令- x2,y2=

7、0 x3,y3=0 成功碰撞 x3,y3=0 x4,y4=0 x4,y4=0 平移后的坐标再默认赋给初始坐标 移动后坐标构成积木的方块默认初始坐标 x1,y1=0 x1,y1=0 x2,y2=0 -右平移命令-x2,y2=0 x3,y3=0 成功碰撞 x3,y3=0 x4,y4=0 x4,y4=0 依次类推。将下落后的坐标再定为初始坐标,循环垂直下落: 初始坐标 下落一层后坐标 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=

8、0 碰撞检测(失败) 消除规则:操作按键 无(系统自动完成)消除规则 (以x轴来分层,一个方块大小为一层。) 条件:在同一层中被添满方块时触发 结果:该层方块被消除,在该层上方的方块下落一层。积分规则 一次消除一层: 获得10积分 一次消除二层: 获得30积分 一次消除三层: 获得50积分 一次消除四层: 获得70积分核心规则 条件: xy大小场景,根据x=1+,x=x的方法检测方块坐标x,y ,检测x,y|(y=1+,y=y)=0是否成立,成立则触发 结果: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 下落后的坐标再默认赋给初始坐标 胜利与失败:胜利条件 通过所有关卡后还没有失败 关卡1 过关要求:达到1000积分 关卡2 过关要求:达到2000积分 关卡3 过关要求:达到3000积分 关卡4 过关要求:达到4000积分 关卡5 过关要求:达到5000积分 关卡6 过关要求:达到6000积分 关卡7 过关要求:达到7000积分 关卡8 过关要求;达到8000积分 关卡9 过关要求:

10、达到9000积分失败条件 (游戏规则)当积木堆积的最高处达到场景的最高处时,宣告游戏失败并结束游戏。失败流程 满足失败条件 则清空场景黑色方块 显示出“over”字样。 回到游戏开始画面。核心规则 失败条件:当数组allx,y中1,*标记的方块中有一个方块的透明度=0 失败流程: 满足失败条件 则所有方块透明度=1 特定坐标的方块透明度=0,显示出“over”字样。 回到游戏开始画面。规则流程图:场景生成规则积木生成规则检测成功碰撞检测规则消除规则检测失败(在速度设置中满足时间间隔条件) (玩家操作输入)胜利与失败规则移动规则下落规则 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 g

12、off;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,25

13、5,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

14、count;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, /四方形,正常状态0,0, -1,0, 0,1, -1,1, /被旋转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,

15、0,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,

17、1, 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;/设置背景色blocks0=background;/设置方块

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.ge

20、tfontmetrics();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=maxcolo

21、rs;objectrotation=0;count=maxcount;/判断游戏是否结束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;el

22、se 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=

23、createimage(d.width, d.height);goff=ii.getgraphics();if(goff=null|ii=null)return;/设置背景色goff.setcolor(background);goff.fillrect(0, 0, d.width, d.height);/如果游戏已经开始if(ingame)/调用playgame()方法playgame();else/否则,显示其他信息/显示初始信息showintro();/ 显示得分showscore();g.drawimage(ii, 0, 0, this);/实现游戏public void playgam

24、e()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(larg

25、efont);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=请按下s键开始游戏;goff.setcolor(textcolor1);goff.drawstring(s,b

26、arwidth+(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=使用左右方向键控制运动;goff.setcolor(textcolor2);goff.drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2-1,height/2-11);goff.setcolor(color.white);goff.

27、drawstring(s,barwidth+(width-fmsmall.stringwidth(s)/2,height/2-10);s=使用向下的方向键实现旋转;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=使用向下的方向键实现下降;goff.

28、setcolor(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.s

29、etcolor(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;/清除旧图形f

30、or(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;/确认该部分不会使屏幕旋转for(i=0;i=xblocks)dummyx-=(x-xblocks+1);else if(x0)dumm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论