java俄罗斯300行_发布一个Java写的俄罗斯方块源码 算法简单(300行) 注释详细

importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjavax.swing.*;importjavax.swing.Timer;publicclassTetrisextendsJFrame {publicTetris() { Tetrisblok a=newTetrisblok();

addKeyListener(a);

add(a);

}publicstaticvoidmain(String[] args) {

Tetris frame=newTetris();

JMenuBar menu=newJMenuBar();

frame.setJMenuBar(menu);

JMenu game=newJMenu("游戏");

JMenuItem newgame=game.add("新游戏");

JMenuItem pause=game.add("暂停");

JMenuItem goon=game.add("继续");

JMenuItem exit=game.add("退出");

JMenu help=newJMenu("帮助");

JMenuItem about=help.add("关于");

menu.add(game);

menu.add(help);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(220,275);

frame.setTitle("Tetris内测版");//frame.setUndecorated(true);frame.setVisible(true);

frame.setResizable(false);

}

}//创建一个俄罗斯方块类classTetrisblokextendsJPanelimplementsKeyListener {//blockType 代表方块类型//turnState代表方块状态privateintblockType;privateintscore=0;privateintturnState;privateintx;privateinty;privateinti=0;intj=0;intflag=0;//定义已经放下的方块x=0-11,y=0-21;int[][] map=newint[13][23];//方块的形状 第一组代表方块类型有S、Z、L、J、I、O、T 7种 第二组 代表旋转几次 第三四组为 方块矩阵privatefinalintshapes[][][]=newint[][][] {//i{ {0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},

{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0} },//s{ {0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},

{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0} },//z{ {1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},

{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0} },//j{ {0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},

{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},

{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0} },//o{ {1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0} },//l{ {1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},

{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},

{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},

{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0} },//t{ {0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},

{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},

{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},

{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0} } };//生成新方块的方法publicvoidnewblock() {

blockType=(int) (Math.random()*1000)%7;

turnState=(int) (Math.random()*1000)%4;

x=4;

y=0;if(gameover(x, y)==1) {

newmap();

drawwall();

score=0;

JOptionPane.showMessageDialog(null,"GAME OVER");

}

}//画围墙publicvoiddrawwall() {for(i=0; i<12; i++) {

map[i][21]=2;

}for(j=0; j<22; j++) {

map[11][j]=2;

map[0][j]=2;

}

}//初始化地图publicvoidnewmap() {for(i=0; i<12; i++) {for(j=0; j<22; j++) {

map[i][j]=0;

}

}

}//初始化构造方法Tetrisblok() {

newblock();

newmap();

drawwall();

Timer timer=newTimer(1000,newTimerListener());

timer.start();

}//旋转的方法publicvoidturn() {inttempturnState=turnState;

turnState=(turnState+1)%4;if(blow(x, y, blockType, turnState)==1) {

}if(blow(x, y, blockType, turnState)==0) {

turnState=tempturnState;

}

repaint();

}//左移的方法publicvoidleft() {if(blow(x-1, y, blockType, turnState)==1) {

x=x-1;

}

;

repaint();

}//右移的方法publicvoidright() {if(blow(x+1, y, blockType, turnState)==1) {

x=x+1;

}

;

repaint();

}//下落的方法publicvoiddown() {if(blow(x, y+1, blockType, turnState)==1) {

y=y+1;

delline();

}

;if(blow(x, y+1, blockType, turnState)==0) {

add(x, y, blockType, turnState);

newblock();

delline();

}

;

repaint();

}//是否合法的方法publicintblow(intx,inty,intblockType,intturnState) {for(inta=0; a<4; a++) {for(intb=0; b<4; b++) {if(((shapes[blockType][turnState][a*4+b]==1)&&(map[x+b+1][y+a]==1))||((shapes[blockType][turnState][a*4+b]==1)&&(map[x+b+1][y+a]==2))) {return0;

}

}

}return1;

}//消行的方法publicvoiddelline() {intc=0;for(intb=0; b<22; b++) {for(inta=0; a<12; a++) {if(map[a][b]==1) {

c=c+1;if(c==10) {

score+=10;for(intd=b; d>0; d--) {for(inte=0; e<11; e++) {

map[e][d]=map[e][d-1];

}

}

}

}

}

c=0;

}

}//判断你挂的方法publicintgameover(intx,inty) {if(blow(x, y, blockType, turnState)==0) {return1;

}return0;

}//把当前添加mappublicvoidadd(intx,inty,intblockType,intturnState) {intj=0;for(inta=0; a<4; a++) {for(intb=0; b<4; b++) {if(map[x+b+1][y+a]==0) {

map[x+b+1][y+a]=shapes[blockType][turnState][j];

}

;

j++;

}

}

}//画方块的的方法publicvoidpaintComponent(Graphics g) {super.paintComponent(g);//画当前方块for(j=0; j<16; j++) {if(shapes[blockType][turnState][j]==1) {

g.fillRect((j%4+x+1)*10, (j/4+y)*10,10,10);

}

}//画已经固定的方块for(j=0; j<22; j++) {for(i=0; i<12; i++) {if(map[i][j]==1) {

g.fillRect(i*10, j*10,10,10);

}if(map[i][j]==2) {

g.drawRect(i*10, j*10,10,10);

}

}

}

g.drawString("score="+score,125,10);

g.drawString("抵制不良游戏,",125,50);

g.drawString("拒绝盗版游戏。",125,70);

g.drawString("注意自我保护,",125,90);

g.drawString("谨防受骗上当。",125,110);

g.drawString("适度游戏益脑,",125,130);

g.drawString("沉迷游戏伤身。",125,150);

g.drawString("合理安排时间,",125,170);

g.drawString("享受健康生活。",125,190);

}//键盘监听publicvoidkeyPressed(KeyEvent e) {switch(e.getKeyCode()) {caseKeyEvent.VK_DOWN:

down();break;caseKeyEvent.VK_UP:

turn();break;caseKeyEvent.VK_RIGHT:

right();break;caseKeyEvent.VK_LEFT:

left();break;

}

}//无用publicvoidkeyReleased(KeyEvent e) {

}//无用publicvoidkeyTyped(KeyEvent e) {

}//定时器监听classTimerListenerimplementsActionListener {publicvoidactionPerformed(ActionEvent e) {

repaint();if(blow(x, y+1, blockType, turnState)==1) {

y=y+1;

delline();

}

;if(blow(x, y+1, blockType, turnState)==0) {if(flag==1) {

add(x, y, blockType, turnState);

delline();

newblock();

flag=0;

}

flag=1;            }            ;        }    }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值