俄罗斯方块java源代码提供.docx
- 文档编号:12660498
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:33
- 大小:150.98KB
俄罗斯方块java源代码提供.docx
《俄罗斯方块java源代码提供.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块java源代码提供.docx(33页珍藏版)》请在冰豆网上搜索。
俄罗斯方块java源代码提供
俄罗斯方块——java源代码提供
importjava.awt.*;
importjava.awt.event.*;
//俄罗斯方块类
publicclassERS_BlockextendsFrame{
publicstaticbooleanisPlay=false;
publicstaticintlevel=1,score=0;
publicstaticTextFieldscoreField,levelField;
publicstaticMyTimertimer;
GameCanvasgameScr;
publicstaticvoidmain(String[]argus){
ERS_Blockers=newERS_Block("俄罗斯方块游戏V1.0Author:
Vincent");
WindowListenerwin_listener=newWinListener();
ers.addWindowListener(win_listener);
}
//俄罗斯方块类的构造方法
ERS_Block(Stringtitle){
super(title);
setSize(600,480);
setLayout(newGridLayout(1,2));
gameScr=newGameCanvas();
gameScr.addKeyListener(gameScr);
timer=newMyTimer(gameScr);
timer.setDaemon(true);
timer.start();
timer.suspend();
add(gameScr);
PanelrightScr=newPanel();
rightScr.setLayout(newGridLayout(2,1,0,30));
rightScr.setSize(120,500);
add(rightScr);
//右边信息窗体的布局
MyPanelinfoScr=newMyPanel();
infoScr.setLayout(newGridLayout(4,1,0,5));
infoScr.setSize(120,300);
rightScr.add(infoScr);
//定义标签和初始值
Labelscorep=newLabel("分数:
",Label.LEFT);
Labellevelp=newLabel("级数:
",Label.LEFT);
scoreField=newTextField(8);
levelField=newTextField(8);
scoreField.setEditable(false);
levelField.setEditable(false);
infoScr.add(scorep);
infoScr.add(scoreField);
infoScr.add(levelp);
infoScr.add(levelField);
scorep.setSize(newDimension(20,60));
scoreField.setSize(newDimension(20,60));
levelp.setSize(newDimension(20,60));
levelField.setSize(newDimension(20,60));
scoreField.setText("0");
levelField.setText("1");
//右边控制按钮窗体的布局
MyPanelcontrolScr=newMyPanel();
controlScr.setLayout(newGridLayout(5,1,0,5));
rightScr.add(controlScr);
//定义按钮play
Buttonplay_b=newButton("开始游戏");
play_b.setSize(newDimension(50,200));
play_b.addActionListener(newCommand(Command.button_play,gameScr));
//定义按钮LevelUP
Buttonlevel_up_b=newButton("提高级数");
level_up_b.setSize(newDimension(50,200));
level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr));
//定义按钮LevelDown
Buttonlevel_down_b=newButton("降低级数");
level_down_b.setSize(newDimension(50,200));
level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr));
//定义按钮LevelPause
Buttonpause_b=newButton("游戏暂停");
pause_b.setSize(newDimension(50,200));
pause_b.addActionListener(newCommand(Command.button_pause,gameScr));
//定义按钮Quit
Buttonquit_b=newButton("退出游戏");
quit_b.setSize(newDimension(50,200));
quit_b.addActionListener(newCommand(Command.button_quit,gameScr));
controlScr.add(play_b);
controlScr.add(level_up_b);
controlScr.add(level_down_b);
controlScr.add(pause_b);
controlScr.add(quit_b);
setVisible(true);
gameScr.requestFocus();
}
}
//重写MyPanel类,使Panel的四周留空间
classMyPanelextendsPanel{
publicInsetsgetInsets(){
returnnewInsets(30,50,30,50);
}
}
//游戏画布类
classGameCanvasextendsCanvasimplementsKeyListener{
finalintunitSize=30;//小方块边长
introwNum;//正方格的行数
intcolumnNum;//正方格的列数
intmaxAllowRowNum;//允许有多少行未削
intblockInitRow;//新出现块的起始行坐标
intblockInitCol;//新出现块的起始列坐标
int[][]scrArr;//屏幕数组
Blockb;//对方快的引用
//画布类的构造方法
GameCanvas(){
rowNum=15;
columnNum=10;
maxAllowRowNum=rowNum-2;
b=newBlock(this);
blockInitRow=rowNum-1;
blockInitCol=columnNum/2-2;
scrArr=newint[32][32];
}
//初始化屏幕,并将屏幕数组清零的方法
voidinitScr(){
for(inti=0;i for(intj=0;j scrArr[j]=0; b.reset(); repaint(); } //重新刷新画布方法 publicvoidpaint(Graphicsg){ for(inti=0;i for(intj=0;j drawUnit(i,j,scrArr[j]); } //画方块的方法 publicvoiddrawUnit(introw,intcol,inttype){ scrArr[row][col]=type; Graphicsg=getGraphics(); tch(type){//表示画方快的方法 case0: g.setColor(Color.black);break;//以背景为颜色画 case1: g.setColor(Color.blue);break;//画正在下落的方块 case2: g.setColor(Color.magenta);break;//画已经落下的方法 } g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose(); } publicBlockgetBlock(){ returnb;//返回block实例的引用 } //返回屏幕数组中(row,col)位置的属性值 publicintgetScrArrXY(introw,intcol){ if(row<0||row>=rowNum||col<0||col>=columnNum) return(-1); else return(scrArr[row][col]); } //返回新块的初始行坐标方法 publicintgetInitRow(){ return(blockInitRow);//返回新块的初始行坐标 } //返回新块的初始列坐标方法 publicintgetInitCol(){ return(blockInitCol);//返回新块的初始列坐标 } //满行删除方法 voiddeleteFullLine(){ intfull_line_num=0; intk=0; for(inti=0;i booleanisfull=true; L1: for(intj=0;j if(scrArr[j]==0){ k++; isfull=false; breakL1; } if(isfull)full_line_num++; if(k! =0&&k-1! =i&&! isfull) for(intj=0;j if(scrArr[j]==0) drawUnit(k-1,j,0); else drawUnit(k-1,j,2); scrArr[k-1][j]=scrArr[j]; } } for(inti=k-1;i for(intj=0;j drawUnit(i,j,0); scrArr[j]=0; } } ERS_Block.score+=full_line_num; ERS_Block.scoreField.setText(""+ERS_Block.score); } //判断游戏是否结束方法 booleanisGameEnd(){ for(intcol=0;col if(scrArr[maxAllowRowNum][col]! =0) returntrue; } returnfalse; } publicvoidkeyTyped(KeyEvente){ } publicvoidkeyReleased(KeyEvente){ } //处理键盘输入的方法 publicvoidkeyPressed(KeyEvente){ if(! ERS_Block.isPlay) return; tch(e.getKeyCode()){ caseKeyEvent.VK_DOWN: b.fallDown();break; caseKeyEvent.VK_LEFT: b.leftMove();break; caseKeyEvent.VK_RIGHT: b.rightMove();break; caseKeyEvent.VK_SPACE: b.leftTurn();break; } } } //处理控制类 classCommandimplementsActionListener{ staticfinalintbutton_play=1;//给按钮分配编号 staticfinalintbutton_levelup=2; staticfinalintbutton_leveldown=3; staticfinalintbutton_quit=4; staticfinalintbutton_pause=5; staticbooleanpause_resume=true; intcurButton;//当前按钮 GameCanvasscr; //控制按钮类的构造方法 Command(intbutton,GameCanvasscr){ curButton=button; this.scr=scr; } //按钮执行方法 publicvoidactionPerformed(ActionEvente){ tch(curButton){ casebutton_play: if(! ERS_Block.isPlay){ scr.initScr(); ERS_Block.isPlay=true; ERS_Block.score=0; ERS_Block.scoreField.setText("0"); ERS_Block.timer.resume(); } scr.requestFocus(); break; casebutton_levelup: if(ERS_Block.level<10){ ERS_Block.level++; ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score=0; ERS_Block.scoreField.setText(""+ERS_Block.score); } scr.requestFocus(); break; casebutton_leveldown: if(ERS_Block.level>1){ ERS_Block.level--; ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score=0; ERS_Block.scoreField.setText(""+ERS_Block.score); } scr.requestFocus(); break; casebutton_pause: if(pause_resume){ ERS_Block.timer.suspend(); pause_resume=false; }else{ ERS_Block.timer.resume(); pause_resume=true; } scr.requestFocus(); break; casebutton_quit: System.exit(0); } } } //方块类 classBlock{ staticint[][]pattern={ {0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态 {0x04e0,0x0464,0x00e4,0x04c4}, {0x4620,0x6c00,0x4620,0x6c00}, {0x2640,0xc600,0x2640,0xc600}, {0x6220,0x1700,0x2230,0x0740}, {0x6440,0x0e20,0x44c0,0x8e00}, {0x0660,0x0660,0x0660,0x0660} }; intblockType;//块的模式号(0-6) intturnState;//块的翻转状态(0-3) intblockState;//快的下落状态 introw,col;//块在画布上的坐标 GameCanvasscr; //块类的构造方法 Block(GameCanvasscr){ this.scr=scr; blockType=(int)(Math.random()*1000)%7; turnState=(int)(Math.random()*1000)%4; blockState=1; row=scr.getInitRow(); col=scr.getInitCol(); } //重新初始化块,并显示新块 publicvoidreset(){ blockType=(int)(Math.random()*1000)%7; turnState=(int)(Math.random()*1000)%4; blockState=1; row=scr.getInitRow(); col=scr.getInitCol(); dispBlock (1); } //实现“块”翻转的方法 publicvoidleftTurn(){ if(assertValid(blockType,(turnState+1)%4,row,col)){ dispBlock(0); turnState=(turnState+1)%4; dispBlock (1); } } //实现“块”的左移的方法 publicvoidleftMove(){ if(assertValid(blockType,turnState,row,col-1)){ dispBlock(0); col--; dispBlock (1); } } //实现块的右移 publicvoidrightMove(){ if(assertValid(blockType,turnState,row,col+1)){ dispBlock(0); col++; dispBlock (1); } } //实现块落下的操作的方法 publicbooleanfallDown(){ if(blockState==2) return(false); if(assertValid(blockType,turnState,row-1,col)){ dispBlock(0); row--; dispBlock (1); return(true); }else{ blockState=2; dispBlock (2); return(false); } } //判断是否正确的方法 booleanassertValid(intt,ints,introw,intcol){ intk=0x8000; for(inti=0;i<4;i++){ for(intj=0;j<4;j++){ if((int)(pattern[t][s]&k)! =0){ inttemp=scr.getScrArrXY(row-i,col+j); if(temp<0||temp==2) returnfalse; } k=k>>1; } } returntrue; } //同步显示的方法 publicsynchronizedvoiddispBlock(ints){ intk=0x8000; for(inti=0;i<4;i++){ for(intj=0;j<4;j++){ if(((int)pattern[blockType][turnState]&k)! =0){ scr.drawUnit(row-i,col+j,s); } k=k>>1; } } } } //定时线程 classMyTimerextendsThread{ GameCanvasscr; publicMyTimer(GameCanvasscr){ this.scr=scr; } publicvoidrun(){ while(true){ try{ sleep((10-ERS_Block.level+1)*100); } catch(InterruptedExceptione){} if(! scr.getBlock().fallDown()){ scr.deleteFullLine(); if(scr.isGameEnd()){ ERS_Block.isPlay=false; suspend(); }else scr.getBlock().reset(); } } } classWinListenerextendsWindowAdapter{ publicvoidwindowClosing(WindowEventl){ System.exit(0); } } 射击游戏代码 效果 第一步: 把如下代码加入 //----Makearray functionMakeArray(n){ this.length=n; for(vari=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 java 源代码 提供