java俄罗斯方块
package com.iss.itreasury;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Els extends JFrame implements KeyListener,Runnable
{
public Els()
{
setSize(240,320);
setUndecorated(true);
int H=(int) (this.getToolkit().getScreenSize().height);
int W=(int) (this.getToolkit().getScreenSize().width);
setLocation(W/2-120,H/2-160);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2=(Graphics2D)g;
g2.setColor(Color.darkGray.brighter().brighter());
//绘制小框格
for(int m=192;m<=232;m+=10)
{
g2.drawLine(m, 52, m,92);
}
for(int m=52;m<=92;m+=10)
{
g2.drawLine(192, m, 232, m);
}
//绘制大框格
for(int m=0;m<=180;m+=15)
{
g2.drawLine(m, 0, m, 300);
}
for(int m=0;m<=300;m+=15)
{
g2.drawLine(0, m, 180, m);
}
//将值不非0的格子涂黑
for(int i=1;i<13;i++)
{
for(int j=0;j<20;j++)
{
g2.setColor(Color.black);
if (o[i][j]!=0) g2.fillRect(15*i-13, 15*j+2, 13, 13);
}
}
//在小框格中绘制下一个的模型
switch(nextMODE)
{
//竖线
case 0: g2.fillRect(204, 54, 8, 8);
g2.fillRect(204, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(204, 84, 8, 8);
break;
//L
case 1: g2.fillRect(194, 64, 8, 8);
g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(224, 64, 8, 8);
break;
//L反方向
case 2: g2.fillRect(214, 64, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(214, 84, 8, 8);
g2.fillRect(204, 84, 8, 8);
break;
//
case 3: g2.fillRect(204, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(224, 74, 8, 8);
break;
case 4: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(204, 84, 8, 8);
break;
case 5: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(224, 64, 8, 8);
g2.fillRect(224, 74, 8, 8);
break;
case 6: g2.fillRect(204, 54, 8, 8);
g2.fillRect(204, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
case 7: g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(224, 74, 8, 8);
g2.fillRect(224, 64, 8, 8);
break;
case 8: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(214, 84, 8, 8);
break;
case 9: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(224, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
break;
case 10: g2.fillRect(204, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(214, 84, 8, 8);
break;
case 11: g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(224, 64, 8, 8);
break;
case 12: g2.fillRect(214, 64, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(204, 84, 8, 8);
break;
case 13: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(214, 74, 8, 8);
g2.fillRect(224, 74, 8, 8);
break;
case 14: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
case 15: g2.fillRect(204, 64, 8, 8);
g2.fillRect(214, 64, 8, 8);
g2.fillRect(224, 64, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
case 16: g2.fillRect(224, 64, 8, 8);
g2.fillRect(224, 74, 8, 8);
g2.fillRect(224, 84, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
case 17: g2.fillRect(204, 84, 8, 8);
g2.fillRect(214, 84, 8, 8);
g2.fillRect(224, 84, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
case 18: g2.fillRect(204, 64, 8, 8);
g2.fillRect(204, 74, 8, 8);
g2.fillRect(204, 84, 8, 8);
g2.fillRect(214, 74, 8, 8);
break;
}
g2.setColor(Color.black);
g2.drawLine(180, 0, 180, 300);
g2.setColor(Color.DARK_GRAY);
g2.drawString("LEVEL", 194, 10);
g2.drawString(""+LEVEL, 210, 28);
g2.drawString("NEXT", 196, 45);
g2.drawString("SCORE",193, 110);
g2.drawString(""+SCORE,205, 130);
g2.drawString("Xiong", 205, 160);
g2.drawString("Xuan", 205, 180);
}
//方块下落的方法
public void down()
{
Y++;
switch(MODE)
{
case 0: o[X+2][Y]=1;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+2][Y+3]++;
o[X+2][Y-1]=0;
break;
case 1: o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
o[X][Y]=0;
o[X+1][Y]=0;
o[X+2][Y]=0;
o[X+3][Y]=0;
break;
case 2: o[X+2][Y]=1;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+1][Y+2]++;
o[X+2][Y-1]=0;
o[X+1][Y+1]=0;
break;
case 3: o[X][Y]=1;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X][Y-1]=0;
//o[X][Y]=0;
o[X+1][Y]=0;
o[X+2][Y]=0;
break;
case 4: o[X+1][Y]=1;
o[X+2][Y]++;
o[X+1][Y+1]=1;
o[X+1][Y+2]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
break;
case 5: o[X][Y]++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+2][Y+1]++;
o[X][Y-1]=0;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
break;
case 6: o[X+1][Y]=1;
o[X+1][Y+1]=1;
o[X+1][Y+2]++;
o[X+2][Y+2]++;
o[X+1][Y-1]=0;
//o[X+1][Y]=0;
//o[X+1][Y+1]=0;
o[X+2][Y+1]=0;
break;
case 7: o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y]=1;
o[X][Y]=0;
o[X+1][Y]=0;
//o[X+2][Y]=0;
o[X+2][Y-1]=0;
break;
case 8: o[X+1][Y]++;
o[X+2][Y]=1;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
//o[X+2][Y]=0;
//o[X+2][Y+1]=0;
break;
case 9: o[X+1][Y]=1;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
o[X+3][Y-1]=0;
//o[X+1][Y]=0;
break;
case 10:o[X+1][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+1][Y-1]=0;
//o[X+1][Y]=0;
o[X+2][Y]=0;
//o[X+2][Y+1]=0;
break;
case 11:o[X+2][Y]=1;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y-1]=0;
o[X+3][Y-1]=0;
o[X+1][Y]=0;
//o[X+2][Y]=0;
break;
case 12:o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y]=1;
o[X+1][Y]=0;
//o[X+2][Y]=0;
//o[X+1][Y+1]=0;
o[X+2][Y-1]=0;
break;
case 13:o[X+1][Y]++;
o[X+2][Y]=1;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
//o[X+2][Y]=0;
o[X+3][Y]=0;
break;
case 14:o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
//o[X+1][Y]=0;
//o[X+2][Y]=0;
break;
case 15:o[X+2][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
o[X+2][Y-1]=0;
o[X+1][Y]=0;
o[X+3][Y]=0;
break;
case 16:o[X+2][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+2][Y-1]=0;
o[X+1][Y]=0;
break;
case 17:o[X+1][Y]++;
o[X+2][Y]=1;
o[X+3][Y]++;
o[X+2][Y+1]++;
o[X+1][Y-1]=0;
o[X+2][Y-1]=0;
o[X+3][Y-1]=0;
break;
case 18:o[X+2][Y]=1;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+3][Y+1]++;
o[X+2][Y-1]=0;
o[X+3][Y]=0;
break;
}
//如果碰撞,则自动上升一格
for(int i=0;i<13;i++)
{
for(int j=0;j<21;j++)
{
if (o[i][j]==2) up();
}
}
}
//方块上升的方法
public void up()
{
Y--;
switch(MODE)
{
case 0: o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+2][Y+3]=1;
o[X+2][Y+4]--;
break;
case 1: o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
o[X][Y+2]--;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
o[X+3][Y+2]--;
break;
case 2: o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+1][Y+2]++;
o[X+2][Y+3]--;
o[X+1][Y+3]--;
break;
case 3: o[X][Y]++;
o[X][Y+1]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X][Y+2]--;
//o[X][Y]=0;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
break;
case 4: o[X+1][Y]++;
o[X+2][Y]++;
o[X+1][Y+1]=1;
o[X+1][Y+2]=1;
o[X+1][Y+3]--;
o[X+2][Y+1]--;
break;
case 5: o[X][Y]++;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+2]--;
break;
case 6: o[X+1][Y]++;
o[X+1][Y+1]=1;
o[X+1][Y+2]=1;
o[X+2][Y+2]++;
o[X+1][Y+3]--;
//o[X+1][Y]=0;
//o[X+1][Y+1]=0;
o[X+2][Y+3]--;
break;
case 7: o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y]++;
o[X][Y+2]--;
o[X+1][Y+2]--;
//o[X+2][Y]=0;
o[X+2][Y+2]--;
break;
case 8: o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+1][Y+1]--;
o[X+2][Y+3]--;
//o[X+2][Y]=0;
//o[X+2][Y+1]=0;
break;
case 9: o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]=1;
o[X+1][Y+2]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
//o[X+1][Y]=0;
break;
case 10:o[X+1][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+2][Y+2]=1;
o[X+1][Y+2]--;
//o[X+1][Y]=0;
o[X+2][Y+3]--;
//o[X+2][Y+1]=0;
break;
case 11:o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]--;
o[X+1][Y+2]--;
o[X+3][Y+1]--;
//o[X+2][Y]=0;
break;
case 12:o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+1][Y+2]=1;
o[X+2][Y]++;
o[X+2][Y+2]--;
//o[X+2][Y]=0;
//o[X+1][Y+1]=0;
o[X+1][Y+3]--;
break;
case 13:o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+3][Y+1]++;
o[X+1][Y+1]--;
o[X+2][Y+2]--;
//o[X+2][Y]=0;
o[X+3][Y+2]--;
break;
case 14:o[X+1][Y]++;
o[X+2][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
//o[X+1][Y]=0;
//o[X+2][Y]=0;
break;
case 15:o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+3][Y+1]++;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
o[X+3][Y+2]--;
break;
case 16:o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+1][Y+2]--;
o[X+2][Y+3]--;
break;
case 17:o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+2][Y+1]=1;
o[X+1][Y+1]--;
o[X+2][Y+2]--;
o[X+3][Y+1]--;
break;
case 18:o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]=1;
o[X+3][Y+1]++;
o[X+2][Y+3]--;
o[X+3][Y+2]--;
break;
}
for(int i=0;i<20;i++)
{
if (o[1][i]==1&&
o[2][i]==1&&
o[3][i]==1&&
o[4][i]==1&&
o[5][i]==1&&
o[6][i]==1&&
o[7][i]==1&&
o[8][i]==1&&
o[9][i]==1&&
o[10][i]==1&&
o[11][i]==1&&
o[12][i]==1
)
{
for(int k=1;k<=12;k++)
{
for(int j=i;j>=1;j--)
{
o[k][j]=o[k][j-1];
}
}
LINE++;
FEN++;
if(LINE==10)
{
LEVEL++;
LINE=0;
}
}
}
if(FEN==1)
{
CODE=1;
SCORE=SCORE+CODE;
}else if(FEN==2)
{
CODE=3;
SCORE=SCORE+CODE;
}else if(FEN==3)
{
CODE=6;
SCORE=SCORE+CODE;
}else if(FEN==4)
{
CODE=10;
SCORE=SCORE+CODE;
}
FEN=0;
CODE=0;
X=5;Y=0;
MODE=nextMODE;
down();
repaint();
nextMODE=(int)(Math.random()*18);
}
public void left()
{
X--;
switch(MODE)
{
case 0:
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+2][Y+3]++;
o[X+3][Y]--;
o[X+3][Y+1]--;
o[X+3][Y+2]--;
o[X+3][Y+3]--;
break;
case 1:
o[X][Y+1]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+3][Y+1]=1;
o[X+4][Y+1]--;
break;
case 2:
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]=1;
o[X+1][Y+2]++;
o[X+3][Y]--;
o[X+3][Y+1]--;
o[X+3][Y+2]--;
//o[X+2][Y+2]=0;
break;
case 3: //if(X==-1)X++;
o[X][Y]++;
o[X][Y+1]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+1][Y]--;
//o[X+1][Y+1]=0;
//o[X+2][Y+1]=0;
o[X+3][Y+1]--;
break;
case 4: //if(X==-2)X++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
//o[X+2][Y]=0;
o[X+3][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
break;
case 5: //if(X==-1)X++;
o[X][Y]++;
o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+2][Y+1]++;
//o[X+1][Y]=0;
//o[X+2][Y]=0;
o[X+3][Y]--;
o[X+3][Y+1]--;
break;
case 6: //if(X==-2)X++;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y+2]=1;
o[X+2][Y]--;
o[X+2][Y+1]--;
//o[X+2][Y+2]=0;
o[X+3][Y+2]--;
break;
case 7: //if(X==-1)X++;
o[X][Y+1]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+2][Y]++;
//o[X+1][Y+1]=0;
//o[X+2][Y+1]=0;
o[X+3][Y+1]--;
o[X+3][Y]--;
break;
case 8: //if(X==-2)X++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
//o[X+2][Y]=0;
o[X+3][Y]--;
o[X+3][Y+1]--;
o[X+3][Y+2]--;
break;
case 9: //if(X==-2)X++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+3][Y]=1;
o[X+1][Y+1]++;
//o[X+2][Y]=0;
//o[X+3][Y]=0;
o[X+4][Y]--;
o[X+2][Y+1]--;
break;
case 10://if(X==-2)X++;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+2][Y]--;
//o[X+3][Y+1]=0;
o[X+3][Y+1]--;
o[X+3][Y+2]--;
break;
case 11://if(X==-2)X++;
o[X+2][Y]++;
o[X+3][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
//o[X+3][Y]=0;
o[X+4][Y]--;
//o[X+2][Y+1]=0;
o[X+3][Y+1]--;
break;
case 12://if(X==-2)X++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+1][Y+2]++;
o[X+2][Y]++;
//o[X+2][Y+1]=0;
o[X+3][Y+1]--;
o[X+2][Y+2]--;
o[X+3][Y]--;
break;
case 13://if(X==-2)X++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+2][Y+1]++;
o[X+3][Y+1]=1;
//o[X+2][Y]=0;
o[X+3][Y]--;
//o[X+3][Y+1]=0;
o[X+4][Y+1]--;
break;
case 14://if(X==-2)X++;
o[X+1][Y]++;
o[X+2][Y]=1;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
//o[X+2][Y]=0;
o[X+3][Y]--;
//o[X+2][Y+1]=0;
o[X+3][Y+1]--;
break;
case 15:o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]=1;
o[X+3][Y+1]=1;
o[X+3][Y]--;
o[X+4][Y+1]--;
break;
case 16:o[X+1][Y+1]++;
o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+3][Y]--;
o[X+3][Y+1]--;
o[X+3][Y+2]--;
break;
case 17:o[X+1][Y]++;
o[X+2][Y]=1;
o[X+3][Y]=1;
o[X+2][Y+1]++;
o[X+4][Y]--;
o[X+3][Y+1]--;
break;
case 18:o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+3][Y+2]=1;
o[X+3][Y]--;
o[X+4][Y+1]--;
o[X+3][Y+2]--;
break;
}
for(int i=0;i<13;i++)
{
for(int j=0;j<21;j++)
{
if (o[i][j]==2) right();
}
}
}
public void right()
{
X++;
switch(MODE)
{
case 0:
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+2][Y+3]++;
o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
o[X+1][Y+3]--;
break;
case 1: //if(X==11)X--;
o[X][Y+1]=1;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+3][Y+1]++;
o[X-1][Y+1]--;
//o[X][Y+1]=0;
//o[X+1][Y+1]=0;
//o[X+2][Y+1]=0;
break;
case 2: //if(X==10)X--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+1][Y+2]=1;
o[X+1][Y]--;
o[X+1][Y+1]--;
//o[X+1][Y+2]=0;
o[X][Y+2]--;
break;
case 3:
o[X][Y]++;
o[X][Y+1]=1;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X-1][Y]--;
o[X-1][Y+1]--;
//o[X][Y+1]=0;
//o[X+1][Y+1]=0;
break;
case 4: //if(X==10)X--;
o[X+1][Y]=1;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
o[X][Y]--;
//o[X+1][Y]=0;
o[X][Y+1]--;
o[X][Y+2]--;
break;
case 5://if(X==10)X--;
o[X][Y]=1;
o[X+1][Y]=1;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X-1][Y]--;
//o[X][Y]=0;
//o[X+1][Y]=0;
o[X+1][Y+1]--;
break;
case 6: //if(X==9)X--;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]=1;
o[X+2][Y+2]++;
o[X][Y]--;
o[X][Y+1]--;
o[X][Y+2]--;
//o[X+1][Y+2]=0;
break;
case 7: //if(X==10)X--;
o[X][Y+1]=1;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+2][Y]++;
o[X-1][Y+1]--;
//o[X][Y+1]=0;
//o[X+1][Y+1]=0;
o[X+1][Y]--;
break;
case 8: //if(X==10)X--;
o[X+1][Y]=1;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X][Y]--;
//o[X+1][Y]=0;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
break;
case 9: //if(X==11)X--;
o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X][Y]--;
//o[X+1][Y]=0;
//o[X+2][Y]=0;
o[X][Y+1]--;
break;
case 10://if(X==10)X--;
o[X+1][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X][Y]--;
o[X][Y+1]--;
//o[X+1][Y+1]=0;
o[X+1][Y+2]--;
break;
case 11://if(X==11)X--;
o[X+2][Y]=1;
o[X+3][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+1][Y]--;
//o[X+2][Y]=0;
o[X][Y+1]--;
//o[X+1][Y+1]=0;
break;
case 12://if(X==10)X--;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y]++;
o[X][Y+1]--;
//o[X+1][Y+1]=0;
o[X][Y+2]--;
o[X+1][Y]--;
break;
case 13://if(X==11)X--;
o[X+1][Y]=1;
o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+3][Y+1]++;
o[X][Y]--;
//o[X+1][Y]=0;
o[X+1][Y+1]--;
//o[X+2][Y+1]=0;
break;
case 14://if(X==10)X--;
o[X+1][Y]=1;
o[X+2][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]++;
o[X][Y]--;
//o[X+1][Y]=0;
o[X][Y+1]--;
//o[X+1][Y+1]=0;
break;
case 15:o[X+2][Y]++;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
o[X+3][Y+1]++;
o[X+1][Y]--;
o[X][Y+1]--;
break;
case 16:o[X+1][Y+1]=1;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X][Y+1]--;
o[X+1][Y]--;
o[X+1][Y+2]--;
break;
case 17:o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+3][Y]++;
o[X+2][Y+1]++;
o[X][Y]--;
o[X+1][Y+1]--;
break;
case 18:o[X+2][Y]++;
o[X+2][Y+1]=1;
o[X+2][Y+2]++;
o[X+3][Y+1]++;
o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
}
for(int i=0;i<14;i++)
{
for(int j=0;j<21;j++)
{
if (o[i][j]==2) left();
}
}
}
public void change()
{
switch(MODE)
{
case 0: o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+2][Y+3]--;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=1;
break;
case 1: o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+2][Y+3]++;
MODE=0;
break;
case 2: o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+1][Y+2]--;
o[X][Y]++;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
MODE=5;
break;
case 3: o[X][Y]--;
o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+1][Y+2]++;
MODE=2;
break;
case 4: o[X+1][Y]--;
o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
o[X][Y]++;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
MODE=3;
break;
case 5: o[X][Y]--;
o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
MODE=4;
break;
case 6: o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y]++;
MODE=7;
break;
case 7: o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=8;
break;
case 8: o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
MODE=9;
break;
case 9: o[X+1][Y]--;
o[X+2][Y]--;
o[X+3][Y]--;
o[X+1][Y+1]--;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y+2]++;
MODE=6;
break;
case 10:o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
MODE=11;
break;
case 11:o[X+2][Y]--;
o[X+3][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=10;
break;
case 12:o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+1][Y+2]--;
o[X+2][Y]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=13;
break;
case 13:o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y]++;
MODE=12;
break;
case 14:o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
break;
case 15:o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=16;
break;
case 16:o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+2][Y+1]++;
MODE=17;
break;
case 17:o[X+1][Y]--;
o[X+2][Y]--;
o[X+3][Y]--;
o[X+2][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+3][Y+1]++;
MODE=18;
break;
case 18:o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=15;
break;
}
for(int i=0;i<14;i++)
{
for(int j=0;j<21;j++)
{
if (o[i][j]==2) changeback();
}
}
}
public void changeback()
{
switch(MODE)
{
case 0:o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+2][Y+3]--;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=1;
break;
case 1:o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+2][Y+3]++;
MODE=0;
break;
case 2:o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+1][Y+2]--;
o[X][Y]++;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
MODE=3;
break;
case 3:o[X][Y]--;
o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
MODE=4;
break;
case 4:o[X+1][Y]--;
o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
o[X][Y]++;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
MODE=5;
break;
case 5:o[X][Y]--;
o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+1][Y+2]++;
MODE=2;
break;
case 6:o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+1][Y+2]--;
o[X+2][Y+2]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
MODE=9;
break;
case 7:o[X][Y+1]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y]--;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y+2]++;
MODE=6;
break;
case 8:o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X][Y+1]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y]++;
MODE=7;
break;
case 9:o[X+1][Y]--;
o[X+2][Y]--;
o[X+3][Y]--;
o[X+1][Y+1]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=8;
break;
case 10:o[X+1][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
MODE=11;
break;
case 11:o[X+2][Y]--;
o[X+3][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+1][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=10;
break;
case 12:o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+1][Y+2]--;
o[X+2][Y]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=13;
break;
case 13:o[X+1][Y]--;
o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+1][Y+2]++;
o[X+2][Y]++;
MODE=12;
break;
case 14:o[X+1][Y]=1;
o[X+2][Y]=1;
o[X+1][Y+1]=1;
o[X+2][Y+1]=1;
break;
case 15:o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
MODE=16;
break;
case 16:o[X+2][Y]--;
o[X+1][Y+1]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+1][Y]++;
o[X+2][Y]++;
o[X+3][Y]++;
o[X+2][Y+1]++;
MODE=17;
break;
case 17:o[X+1][Y]--;
o[X+2][Y]--;
o[X+3][Y]--;
o[X+2][Y+1]--;
o[X+2][Y]++;
o[X+2][Y+1]++;
o[X+2][Y+2]++;
o[X+3][Y+1]++;
MODE=18;
break;
case 18:o[X+2][Y]--;
o[X+2][Y+1]--;
o[X+2][Y+2]--;
o[X+3][Y+1]--;
o[X+2][Y]++;
o[X+1][Y+1]++;
o[X+2][Y+1]++;
o[X+3][Y+1]++;
MODE=15;
break;
}
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_LEFT)left();
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)right();
else if(e.getKeyCode()==KeyEvent.VK_SPACE) change();
else if(e.getKeyCode()==KeyEvent.VK_DOWN) down();
else if(e.getKeyCode()==KeyEvent.VK_UP) change();
repaint();
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void run()
{
while(true)
{
this.repaint();
down();
try{
Thread.sleep(1000/LEVEL);
}
catch (Exception e){}
}
}
public static void main(String[] args)
{
Els e=new Els();
Thread t=new Thread(e);
e.addKeyListener(e);
e.setVisible(true);
t.start();
}
private int o[][]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
}
;
private int MODE=(int)(Math.random()*18);
private int nextMODE=(int)(Math.random()*18);
private int LINE=0;
private int FEN=0;
private int CODE=0;
private int X=5;
private int Y=0;
private int LEVEL=1;
private int SCORE=0;
}
本文档为【java俄罗斯方块】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。