📄 tetris.java
字号:
package crui;
import java.awt.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.*;
public class Tetris extends JFrame implements ActionListener,KeyListener{
private Container con=this.getContentPane();
Panel myp=new Panel();
Arithmetic amc=new Arithmetic();
private Random random=new Random();
//
private Image p_blue=Toolkit.getDefaultToolkit().getImage(getClass().getResource("/puyo_blue.png"));
private Image p_green=Toolkit.getDefaultToolkit().getImage(getClass().getResource("/puyo_green.png"));
private Image p_red=Toolkit.getDefaultToolkit().getImage(getClass().getResource("/puyo_red.png"));
private Image p_yellow=Toolkit.getDefaultToolkit().getImage(getClass().getResource("/puyo_yellow.png"));
// private Image[][] p_grid=new Image[row][col];
public void paint(Graphics g)
{
if(amc.go_flag!=0){
for(int i=0;i<amc.row;i++)
for(int j=0;j<amc.col;j++){
if(amc.grid[i][j]==1)
g.drawImage(p_blue,amc.mysize*j+5,amc.mysize*i+30,this);
else if(amc.grid[i][j]==2)
g.drawImage(p_green,amc.mysize*j+5,amc.mysize*i+30,this);
else if(amc.grid[i][j]==3)
g.drawImage(p_red,amc.mysize*j+5,amc.mysize*i+30,this);
else if(amc.grid[i][j]==4)
g.drawImage(p_yellow,amc.mysize*j+5,amc.mysize*i+30,this);
}
g.dispose();
}
}
//
public void update(Graphics g)
{
paint(g);
}
public void myupdate()
{
myp.setVisible(true);
myp.setVisible(false);
Graphics g=getGraphics();
update(g);
}
private void myrefresh(){
for(int i=0;i<amc.row;i++)
for(int j=0;j<amc.col;j++)
if(amc.fix[i][j]==0)
amc.grid[i][j]=0;
}
private void game_working(int now_x,int now_y){
// int temp;
if(amc.new_p==0){
amc.one_p=random.nextInt(4)+1;
amc.two_p=random.nextInt(4)+1;
amc.array=random.nextInt(2);
amc.new_p=1;
amc.fix_flag=0;
myrefresh();
myupdate();
}
if(amc.clear==1){
if(amc.array==0){//
amc.grid[now_x-1][now_y]=0;
amc.grid[now_x-1][now_y+1]=0;
}
else if(amc.array==1){
if(now_x-2>=0)
amc.grid[now_x-2][now_y]=0;
}
amc.clear=0;
myupdate();
}
if(amc.change_pic==1){
int temp_p=amc.one_p;
amc.one_p=amc.two_p;
amc.two_p=temp_p;
amc.change_pic=0;
}
amc.grid[now_x][now_y]=amc.one_p;
if(amc.array==0)
amc.grid[now_x][now_y+1]=amc.two_p;
if(amc.array==1){
if(now_x-1>=0)
amc.grid[now_x-1][now_y]=amc.two_p;
}
}
private void myrun(){
while(amc.go_flag==1){
int nx;
if(amc.fix_flag==1){
amc.myarithmetic();
amc.add_speed=0;
}
if(amc.new_p==0){
amc.now_x=amc.initrow;
amc.now_y=amc.initcol;
game_working(amc.now_x,amc.now_y);
}
else{
game_working(amc.now_x,amc.now_y);
}
myupdate();
if(amc.add_speed==0){
try{
Thread.sleep(amc.speed1);
}catch(Exception e){}
}
else if(amc.add_speed==1){
try{
Thread.sleep(amc.speed2);
}catch(Exception e){}
}
if(amc.now_x<amc.row-1){
nx=amc.now_x+1;
//////////////////////////////////////////////////
if(amc.fix[nx][amc.now_y]==0){
if(amc.array==0){//
if(amc.fix[0][amc.now_y+1]==1)
amc.go_flag=0;
else{
if(amc.fix[nx][amc.now_y+1]==1){
int temp=0;
amc.fix[amc.now_x][amc.now_y+1]=1;
for(int i=0;i<amc.row;i++){
if(amc.fix[i][amc.now_y]==1){
temp=1;
if(i==0)
amc.go_flag=0;
else{
amc.fix[i-1][amc.now_y]=1;
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[i-1][amc.now_y]=amc.one_p;
myupdate();
}
break;
}
}
if(temp==0){
amc.fix[amc.row-1][amc.now_y]=1;
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.row-1][amc.now_y]=amc.one_p;
myupdate();
}
amc.fix_flag=1;
amc.new_p=0;
}
else{
amc.now_x++;
amc.clear=1;
}
}
}
else{
amc.now_x++;
amc.clear=1;
}
}
else{
if(amc.fix[0][amc.now_y]==1)
amc.go_flag=0;
else{
amc.fix[amc.now_x][amc.now_y]=1;
if(amc.array==0){//
int temp=0;
for(int i=1;i<amc.row;i++){
if(amc.fix[i][amc.now_y+1]==1){
temp=1;
amc.fix[i-1][amc.now_y+1]=1;
amc.grid[amc.now_x][amc.now_y+1]=0;
amc.grid[i-1][amc.now_y+1]=amc.two_p;
myupdate();
amc.fix_flag=1;
amc.new_p=0;
break;
}
}
if(temp==0){
amc.fix[amc.row-1][amc.now_y+1]=1;
amc.grid[amc.now_x][amc.now_y+1]=0;
amc.grid[amc.row-1][amc.now_y+1]=amc.two_p;
myupdate();
amc.fix_flag=1;
amc.new_p=0;
}
}
else if(amc.array==1){
if(amc.fix[1][amc.now_y]==1)
amc.go_flag=0;
else{
amc.fix[amc.now_x-1][amc.now_y]=1;
amc.fix_flag=1;
amc.new_p=0;
}
}
}
}
}
else if(amc.now_x==amc.row-1){
if(amc.array==0){
amc.fix[amc.now_x][amc.now_y]=1;
amc.fix[amc.now_x][amc.now_y+1]=1;
}
else if(amc.array==1){
amc.fix[amc.now_x][amc.now_y]=1;
amc.fix[amc.now_x-1][amc.now_y]=1;
}
amc.fix_flag=1;
amc.new_p=0;
}
}
}
public void running(){
while(true){
myrun();
}
}
public Tetris(){
addKeyListener(this);
setTitle("Crui's Tetris");
setBounds((this.getToolkit().getScreenSize().width-192)/2,100,202,419);
setResizable(false);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
con.setLayout(null);
con.add(myp);
myp.setSize(202,419);
myp.setVisible(false);
setBackground(Color.white);
this.setVisible(true);
running();
}
public void actionPerformed(ActionEvent e){
}
public void keyPressed(KeyEvent evt) {
}
public void keyReleased(KeyEvent evt){
int keyCode=evt.getKeyCode();
if(keyCode==KeyEvent.VK_LEFT&&amc.fix_flag==0){
if(amc.now_y>0&&amc.fix[amc.now_x][amc.now_y-1]==0){
if(amc.array==0){//
amc.grid[amc.now_x][amc.now_y+1]=0;
amc.grid[amc.now_x][amc.now_y-1]=amc.one_p;
amc.grid[amc.now_x][amc.now_y]=amc.two_p;
}
else if(amc.array==1){
if(amc.now_x==0){
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y-1]=amc.one_p;
}
else if(amc.now_x>0&&amc.fix[amc.now_x-1][amc.now_y-1]==0){
amc.grid[amc.now_x-1][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y-1]=amc.one_p;
amc.grid[amc.now_x-1][amc.now_y-1]=amc.two_p;
}
}
amc.now_y--;
}
myupdate();
}
else if(keyCode==KeyEvent.VK_RIGHT&&amc.fix_flag==0){
if(amc.array==0){
if(amc.now_y<amc.col-2&&amc.fix[amc.now_x][amc.now_y+2]==0){
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y+1]=amc.one_p;
amc.grid[amc.now_x][amc.now_y+2]=amc.two_p;
amc.now_y++;
}
}
else if(amc.array==1){
if(amc.now_y<amc.col-1&&amc.fix[amc.now_x][amc.now_y+1]==0){
if(amc.now_x==0){
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y+1]=amc.one_p;
amc.now_y++;
}
else if(amc.now_x>0&&amc.fix[amc.now_x-1][amc.now_y+1]==0){
amc.grid[amc.now_x-1][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y]=0;
amc.grid[amc.now_x][amc.now_y+1]=amc.one_p;
amc.grid[amc.now_x-1][amc.now_y+1]=amc.two_p;
amc.now_y++;
}
}
}
myupdate();
}
else if(keyCode==KeyEvent.VK_UP){
amc.grid[amc.now_x][amc.now_y]=amc.two_p;
if(amc.array==0)
amc.grid[amc.now_x][amc.now_y+1]=amc.one_p;
else if(amc.array==1){
if(amc.now_x-1>=0)
amc.grid[amc.now_x-1][amc.now_y]=amc.one_p;
}
amc.change_pic=1;
}
else if(keyCode==KeyEvent.VK_DOWN){
amc.add_speed=1;
}
else if(keyCode==KeyEvent.VK_ENTER){
if(amc.go_flag==0||amc.go_flag==2)
amc.go_flag=1;
else if(amc.go_flag==1)
amc.go_flag=2;
}
else if(keyCode==KeyEvent.VK_BACK_SPACE){
amc.go_flag=0;
amc.initialize();
myupdate();
}
}
public void keyTyped(KeyEvent evt){
}
public static void main(String[] args) {
new Tetris();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -