⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tetris.java

📁 俄罗斯方块 Java游戏 按"Enter"键开始-暂停游戏;按"Backspace"结束游戏;按"左右"移动;按"上"改变;按"下"加速。
💻 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 + -