俄罗斯方块Java小程序.docx

上传人:b****6 文档编号:6389541 上传时间:2023-01-06 格式:DOCX 页数:27 大小:21.43KB
下载 相关 举报
俄罗斯方块Java小程序.docx_第1页
第1页 / 共27页
俄罗斯方块Java小程序.docx_第2页
第2页 / 共27页
俄罗斯方块Java小程序.docx_第3页
第3页 / 共27页
俄罗斯方块Java小程序.docx_第4页
第4页 / 共27页
俄罗斯方块Java小程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

俄罗斯方块Java小程序.docx

《俄罗斯方块Java小程序.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块Java小程序.docx(27页珍藏版)》请在冰豆网上搜索。

俄罗斯方块Java小程序.docx

俄罗斯方块Java小程序

3个不同的类SingleTetris.java,SuperBrick.java,Tetris.java。

分别对应单一俄罗斯方块游戏类,方块组数据类和俄罗斯方块控制窗口。

用Netbeans调试运行即可。

以下是源代码:

/*程序:

SingleTetris.java

*说明:

单一俄罗斯方块游戏类

*/

importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

//单一砖块组游戏类

publicclassSingleTetrisimplementsRunnable{

Graphicsg;//绘图区

Componentc;

ThreadDownThread;

longGAME_SPEED;//纪录游戏速度

longGAME_SCORE;//纪录游戏分数

longGAME_LEVEL;//纪录游戏等级

longGAME_LINE;//纪录游戏消除行数

booleanGAME_RUNNING;//纪录游戏是否进行中

Drawd;//画出砖块方式

intMAPX;//地图X坐标

intMAPY;//地图Y坐标

intMAP_ARRAY[][];//地图数组

intMAP_SHOW_ARRAY[][];//地图显示数组(与移动砖块组结合之数组)

ColorMAP_COLOR_ARRAY[][];//地图颜色数组

intGRIDX;//x轴格数

intGRIDY;//y轴格数

intBRICK_WIDTH;//单一砖块_宽

intBRICK_SIDE;//单一砖块_边

intNEXT_BRICK_NUMBER;//下一个砖块组显示数量

booleanIS_SHOW_NEXT;//是否显示下一个砖块组

intNOW_BRICK;//现在动作砖块组编号

intNOW_BRICK_DIRECT;//现在动作砖块组的方向

intNOW_BRICK_X;//现在动作砖块组的x坐标

intNOW_BRICK_Y;//现在动作砖块组的y坐标

SuperBrickNowBrick;//现在动作的砖块组

ColorNOW_BRICK_COLOR;//现在动作砖块组的颜色

ArrayListBrickArray;//所有砖块组类数组

ArrayListNextBrickArray;//下一个砖块组储存数组

ArrayListNextBrickColorArray;//下一个砖块组储存数组

publicSingleTetris(Graphicsg,//绘图区

intmapx,intmapy,//地图坐标

intgridx,intgridy,//地图方格数

intbrick_width,//砖块组宽

intbrick_side,//砖块组边

intnext_brick_number,//显示下一个砖块组数量

booleanis_show_next,//是否显示下一个砖块组

Componentc){//组件

//初始各参数

this.c=c;

this.g=g;

this.MAPX=mapx;

this.MAPY=mapy;

this.GRIDX=gridx;

this.GRIDY=gridy;

this.BRICK_WIDTH=brick_width;

this.BRICK_SIDE=brick_side;

this.NEXT_BRICK_NUMBER=next_brick_number;

this.IS_SHOW_NEXT=is_show_next;

this.MAP_ARRAY=newint[GRIDX][GRIDY];

this.MAP_SHOW_ARRAY=newint[GRIDX][GRIDY];

this.MAP_COLOR_ARRAY=newColor[GRIDX][GRIDY];

this.NOW_BRICK_X=0;

this.NOW_BRICK_Y=0;

this.GAME_SPEED=1000;

this.GAME_SCORE=0;

this.GAME_LEVEL=1;

this.GAME_LINE=0;

//将地图数组归零

for(inti=0;i

for(intj=0;j

this.MAP_ARRAY[i][j]=0;

this.MAP_SHOW_ARRAY[i][j]=0;

}

}

//加入所有砖块组类型

BrickArray=newArrayList();//建立储存砖块组型态的数组

BrickArray.add(newBrick_BB());

BrickArray.add(newBrick_I());

BrickArray.add(newBrick_L());

BrickArray.add(newBrick_UL());

BrickArray.add(newBrick_UT());

BrickArray.add(newBrick_UZ());

BrickArray.add(newBrick_Z());

//产生下一砖块组数据

NextBrickArray=newArrayList();//建立储存预备砖块组编号的数组

NextBrickColorArray=newArrayList();//建立储存预备砖块组编号的数组

for(inti=0;i<(NEXT_BRICK_NUMBER+1);i++){

createNextBrick();

}

//建立绘出砖块组对象

d=newDraw(this);

//画出外框

d.DrawMapFrame(0,0,GRIDX*BRICK_WIDTH+2*5,GRIDY*BRICK_WIDTH+2*5,5);

d.DrawMapFrame(290,0,200,350,5);//预备方块外框

d.DrawMapFrame(290,350,200,140,5);//游戏数据外框

showNextBrickGroup();//显示提示方块组

addNextBrick();//新增一个提示方块

showNextBrick();//显示现在动作方块

updateGame(0);//更新游戏数据

//产生控制下降的线程

DownThread=newThread(this);

DownThread.start();

}

//重绘窗口

publicvoidpaint(){

//画出外框

d.DrawMapFrame(0,0,GRIDX*BRICK_WIDTH+2*5,GRIDY*BRICK_WIDTH+2*5,5);

d.DrawMapFrame(290,0,200,350,5);//预备方块

d.DrawMapFrame(290,350,200,140,5);//游戏数据

showNextBrickGroup();

updateGame(0);

reLoadMap();

showNextBrick();

}

//覆盖run()方法

publicvoidrun(){

try{

Thread.sleep(GAME_SPEED);

keyPress(KeyEvent.VK_DOWN);

DownThread=newThread(this);

DownThread.start();

}catch(Exceptione){

e.printStackTrace();

}

}

//更新游戏数据

publicvoidupdateGame(intline){

d.DrawMapFrame(290,350,200,140,5);

GAME_SCORE+=50*line*line*line*(0.5)*GAME_LEVEL;

GAME_LEVEL=GAME_SCORE/5000+1;

GAME_SPEED=800/GAME_LEVEL+200;

GAME_LINE+=line;

d.DrawFont("级数:

"+GAME_LEVEL,300,400,16,Color.cyan,"标楷体");

d.DrawFont("分数:

"+GAME_SCORE,300,430,16,Color.red,"标楷体");

d.DrawFont("行数:

"+GAME_LINE,300,460,16,Color.green,"标楷体");

}

//产生下一组砖块

publicvoidcreateNextBrick(){

//产生预备砖块组编号

NextBrickArray.add(newInteger((int)(Math.random()*BrickArray.size())));

//产生预备砖块组颜色

NextBrickColorArray.add(newColor((int)(Math.random()*128+127),

(int)(Math.random()*128+127),

(int)(Math.random()*128+127)));

}

//检查砖块组是否可以放置

publicbooleanisPut(intx,inty,inttype,intmode){

SuperBricksb=(SuperBrick)BrickArray.get(type);

for(inti=0;i<=4;i++){

for(intj=0;j<=4;j++){

if(sb.BRICK_ARRAY[mode][i][j]==1){

if((i+x)<0||(i+x)>(GRIDX-1)||

(j+y)<0||(j+y)>(GRIDY-1)||

MAP_ARRAY[i+x][j+y]==1){

returnfalse;

}

}

}

}

returntrue;

}

//砖块组数组写入地图数组

publicvoidaddBrickToMap(){

for(inti=0;i<=4;i++){

for(intj=0;j<=4;j++){

if((NOW_BRICK_X+i)>=0&&(NOW_BRICK_X+i)

(NOW_BRICK_Y+j)>=0&&(NOW_BRICK_Y+j)

NowBrick.BRICK_ARRAY[NOW_BRICK_DIRECT][i][j]==1){

MAP_ARRAY[NOW_BRICK_X+i][NOW_BRICK_Y+j]=1;

MAP_COLOR_ARRAY[NOW_BRICK_X+i][NOW_BRICK_Y+j]=

NOW_BRICK_COLOR;

}

}

}

}

//产生下一个砖块组

publicvoidaddNextBrick(){

NextBrickArray.remove(0);

NextBrickColorArray.remove(0);

NOW_BRICK=((Integer)NextBrickArray.get(0)).intValue();

NOW_BRICK_COLOR=(Color)NextBrickColorArray.get(0);

NOW_BRICK_DIRECT=0;

NOW_BRICK_X=(GRIDX-5)/2;

NOW_BRICK_Y=0;

NowBrick=(SuperBrick)BrickArray.get(NOW_BRICK);

createNextBrick();

}

//显示下一个砖块组

publicvoidshowNextBrick(){

if(this.isPut(NOW_BRICK_X,

NOW_BRICK_Y,

NOW_BRICK,

NOW_BRICK_DIRECT)){

d.DrawBrickGroup(NOW_BRICK_X,

NOW_BRICK_Y,

NOW_BRICK,

NOW_BRICK_DIRECT,

NOW_BRICK_COLOR);

}else{

DownThread.stop();

}

}

//检查满行

publicvoidcheckFull(){

booleanblFull=true;//满行旗标

intdelLine=0;//删除行数计数

for(intj=NOW_BRICK_Y;j<(NOW_BRICK_Y+5);j++){

blFull=true;

for(inti=0;i

if(j>=0&&j

if(MAP_ARRAY[i][j]!

=1)

blFull=false;

}else{

blFull=false;

}

}

if(blFull){

removeFull(j);//移除满行

delLine++;

}

}

if(delLine>0)

reLoadMap();

updateGame(delLine);

}

//移除满行

publicvoidremoveFull(intline){

for(intj=line;j>0;j--){

for(inti=0;i

MAP_ARRAY[i][j]=MAP_ARRAY[i][j-1];

MAP_COLOR_ARRAY[i][j]=MAP_COLOR_ARRAY[i][j-1];

}

}

for(inti=0;i

MAP_ARRAY[i][0]=0;

MAP_COLOR_ARRAY[i][0]=Color.black;

}

}

//重新加载地图砖块

publicvoidreLoadMap(){

for(inti=0;i

for(intj=0;j

if(MAP_ARRAY[i][j]==1)

d.DrawBrick(i,j,MAP_COLOR_ARRAY[i][j]);

else

d.DrawBrick(i,j,Color.black);

}

}

}

//显示下一组砖块

publicvoidshowNextBrickGroup(){

newMoveThread(this).start();

}

//按键事件

publicsynchronizedvoidkeyPress(intKEYCODE){

intx=NOW_BRICK_X;

inty=NOW_BRICK_Y;

intdirect=NOW_BRICK_DIRECT;

switch(KEYCODE){

caseKeyEvent.VK_UP:

//上

NOW_BRICK_DIRECT++;

if(NOW_BRICK_DIRECT>=4)

NOW_BRICK_DIRECT=0;

if(isPut(NOW_BRICK_X,

NOW_BRICK_Y,

NOW_BRICK,

NOW_BRICK_DIRECT)){

d.DrawBrickGroup(x,y,direct);

}else{

NOW_BRICK_DIRECT--;

if(NOW_BRICK_DIRECT<0)

NOW_BRICK_DIRECT=3;

}

break;

caseKeyEvent.VK_DOWN:

//下

if(isPut(NOW_BRICK_X,

NOW_BRICK_Y+1,

NOW_BRICK,

NOW_BRICK_DIRECT)){

NOW_BRICK_Y++;

d.DrawBrickGroup(x,y,direct);

}else{//到底

showNextBrickGroup();

addBrickToMap();

checkFull();

addNextBrick();

showNextBrick();

}

break;

caseKeyEvent.VK_LEFT:

//左

if(isPut(NOW_BRICK_X-1,

NOW_BRICK_Y,

NOW_BRICK,

NOW_BRICK_DIRECT)){

NOW_BRICK_X--;

d.DrawBrickGroup(x,y,direct);

}

break;

caseKeyEvent.VK_RIGHT:

//右

if(isPut(NOW_BRICK_X+1,

NOW_BRICK_Y,

NOW_BRICK,

NOW_BRICK_DIRECT)){

NOW_BRICK_X++;

d.DrawBrickGroup(x,y,direct);

}

break;

caseKeyEvent.VK_SPACE:

//直落

while(isPut(NOW_BRICK_X,

NOW_BRICK_Y+1,

NOW_BRICK,

NOW_BRICK_DIRECT)){

NOW_BRICK_Y++;

d.DrawBrickGroup(x,y,direct);

x=NOW_BRICK_X;

y=NOW_BRICK_Y;

}

addBrickToMap();

checkFull();

addNextBrick();

showNextBrickGroup();

showNextBrick();

break;

caseKeyEvent.VK_ESCAPE:

//跳离

System.exit(0);

break;

caseKeyEvent.VK_PAUSE:

//暂停

if(DownThread.isAlive())

DownThread.stop();

else{

DownThread=newThread(this);//产生控制下降的线程

DownThread.start();

}

break;

}

}

}

 

/*程序:

SingleTetris.java

*说明:

相关绘图方法。

*建立时需以SingleTetirs对象为创建子参数,

*负责方块绘制,方块区外框绘制,字型绘制等

*/

classDraw{

SingleTetrisst;//俄罗斯砖块组单一类

//创建子

publicDraw(SingleTetrisst){

this.st=st;//指定绘图区

}

//画出砖块组动作区地图外框

publicvoidDrawMapFrame(intx,inty,intwid,inthig,intside){

//定义多边形坐标

intxx[][]={{x,x+wid,x+wid-side,x+side},//上

{x+wid-side,x+wid,x+wid,x+wid-side},//右

{x+side,x+wid-side,x+wid,x},//下

{x,x+side,x+side,x}};//左

intyy[][]={{y,y,y+side,y+side},//上

{y+side,y,y+hig,y+hig-side},//右

{y+hig-side,y+hig-side,y+hig,y+hig},//下

{y,y+side,y+hig-side,y+hig}};//左

//画出多边形

for(inti=0;i<=3;i++){

//不同边设定不同颜色

switch(i){

case0:

st.g.setColor(newColor(150,150,150));

break;

case1:

st.g.setColor(newColor(150,150,150));

break;

case2:

st.g.setColor(newColor(180,180,180));

break;

case3:

st.g.setColor(newColor(180,180,180));

break;

}

st.g.fillPolygon(xx[i],yy[i],4);

st.g.setColor(Color.black);

st.g.fillRect(x+side-1,y+side-1,wid-side*2+2,hig-side*2+2);

}

}

//画出砖块组

publicvoidDrawBrickGroup(intx,inty,inttype,intdirect,Colorc){

SuperBricksb=(SuperBrick)st.BrickArray.get(type);

for(inti=0;i<5;i++){

for(intj=0;j<5;j++){

if(sb.BRICK_ARRAY[direct][i][j]==1){

DrawBrick((i+x),(j+y),c);

}

}

}

}

//画出砖块组(清除前一个砖块组)

publicvoidDrawBrickGroup(intfx,intfy,intfdirect){

//清除前一个砖块组

for(inti=0;i<5;i++){

for(intj=0;j<5;j++){

if((i+st.NOW_BRICK_X)>=0&&(i+st.NOW_BRICK_X)

(j+st.NOW_BRICK_Y)>=0&&(j+st.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1