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

📄 myeluosi.java

📁 完全自己做的俄罗斯方块
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/**
* Created by Abiao.
* User: student
* Date: 2005-1-28
* Time: 14:02:45
* To change this template use Options | File Templates.
*/
package classes;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
/*---------------------------------------------------------------------------*/

public class MyELuoSi extends JFrame{
	Container c = this.getContentPane();
	boolean flag = true;    	//一点变色标志
	
	int x,y;					//记录主动方块移动后的位置
    int xx,yy;					//记录主动方块移动前的位置
    int x2,y2,x3,y3,x4,y4,x5,y5;//从动点
    
    boolean bombFlag = false;   //两点爆炸标志
    boolean produce = true;
    int scores = 0;  			//积分
    
    long slep = 800;					//睡觉时间

/*---------------------------------------------------------------------------*/
	public MyELuoSi(){
		c.setLayout(null);		//不用布局管理器,自定义元件位置
		Font font = new Font("宋体",Font.BOLD,30);
		
		JMenuBar menuBar = new JMenuBar();    //建立菜单栏
        this.setJMenuBar(menuBar);
        menuBar.setBackground(Color.lightGray);//设置菜单栏的背景色
        
        JMenu game = new JMenu("游戏(G)");          //增加菜单项"工具"
        game.setMnemonic('G');						//设置快捷键
        menuBar.add(game);							//把游戏菜单加到菜单条上
        
        //游戏菜单的各个菜单项
		JMenuItem start = new JMenuItem("开始(S)");
		JMenuItem restart = new JMenuItem("重新开始(R)");
		JMenuItem ext = new JMenuItem("退出游戏(Q)");
		
		//把游戏菜单的菜单项加到菜单上去
        game.add(start);
        game.add(restart);
		game.addSeparator();
		game.add(ext);
		
		//游戏菜单的各个菜单项的加速键
        start.setAccelerator(
            KeyStroke.getKeyStroke(
                KeyEvent.VK_S,InputEvent.CTRL_MASK));
        restart.setAccelerator(
            KeyStroke.getKeyStroke(
                KeyEvent.VK_R,InputEvent.CTRL_MASK));  
        ext.setAccelerator(
            KeyStroke.getKeyStroke(
                KeyEvent.VK_Q,InputEvent.CTRL_MASK));
         
        
        //为开始按钮设置监听器 
        start.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		produce=true;
        		getRandomDiamonds();
        	}
        });
        //为重新开始按钮设置监听器 
        restart.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		produce=false;
        		dispose();
        		MyELuoSi other = new MyELuoSi();
        		other.getRandomDiamonds();
        	}
        });
        //为退出菜单设置监听器
        ext.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		produce=false;
        		dispose();
        	}
        });
        
        //游戏秘技
        JMenu secretSkill = new JMenu("秘技(K)");
        secretSkill.setMnemonic('K');
        menuBar.add(secretSkill);
        
        JMenuItem bomb = new JMenuItem("激活(取消)炸弹(B)");
        secretSkill.add(bomb);
        
        bomb.setAccelerator(
        	KeyStroke.getKeyStroke(
        		KeyEvent.VK_B,InputEvent.CTRL_MASK));
        	
        bomb.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		if(bombFlag) bombFlag = false;	//取消炸弹
        		else bombFlag = true;			//激活炸弹
        	}
        });
        
        //速度
        JMenu speed = new JMenu("速度(S)");
        speed.setMnemonic('S');
        menuBar.add(speed);
        
        JMenuItem less = new JMenuItem("减速(L)");
        JMenuItem accelerate= new JMenuItem("加速(A)");
        
        speed.add(less);
        speed.add(accelerate);
        
        less.setAccelerator(
        	KeyStroke.getKeyStroke(
        		KeyEvent.VK_L,InputEvent.CTRL_MASK));
        	
        less.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		if(slep<2000) slep+=50;
        	}
        });
        accelerate.setAccelerator(
        	KeyStroke.getKeyStroke(
        		KeyEvent.VK_A,InputEvent.CTRL_MASK));
        	
        accelerate.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
        		if(slep>400) slep-=50;
        	}
        });
        
        //窗口监听器
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				produce=false;
				dispose();
			}
		});
		
/*---------------------------------------------------------------------------*/
		this.setBounds(175,0,668,720);    //设置窗口大小
		this.setTitle("俄罗斯方块");	  //设置窗口标题
		this.setVisible(true);			  //设置窗口可视
		this.setResizable(false);		  //不允许调整窗口大小
	}
	
/*---------------------------------------------------------------------------*/
	//随机产生各种类型方块
	public void getRandomDiamonds(){
		Random rand = new Random();
		int d = rand.nextInt();
		int r = Math.abs(d%5)+1;
		if(produce){
			switch(r){
				case 1:
				getOnePoint();break;
				case 2:
				int rr2 = Math.abs(rand.nextInt())%2;
				getTwoPoints(rr2);break;
				case 3:
				int rr3 = Math.abs(rand.nextInt())%4;
				getThreePoints(rr3);break;
				case 4:
				int rr4 = Math.abs(rand.nextInt())%7;
				getFourPoints(rr4);break;
				case 5:
				int rr5 = Math.abs(rand.nextInt())%3;
				getFivePoints(rr5);break;
			}
		}
	}
			
/*---------------------------------------------------------------------------*/

    //一点
    public void getOnePoint(){
    	final JButton onepoint = new JButton("1");
    	
    	onepoint.setBounds(300,0,60,60);
    	onepoint.setBackground(Color.red);
    	c.add(onepoint);
    	this.setTitle("俄罗斯方块   一点"+"      现在积分:"+(scores*11));
    	onepoint.requestFocus();
    	
        final Thread thread=new Thread(){
			public void run(){
				x = onepoint.getX();
				y = onepoint.getY();
				
				while(y<600&&c.getComponentAt(x,y+60).isEnabled()){
					x = onepoint.getX(); y = onepoint.getY()+60;
        			try{
            			Thread.sleep(slep);
            			onepoint.setLocation(x,y);
        			}catch(InterruptedException e){}      
        		}
        		//当方块遇到障碍物时不可再用
                int oney = onepoint.getY()+60;
                int onex = onepoint.getX();
                boolean sigh = false;
                int i = 0,j = 0;
                
                if(oney==660){
                	onepoint.setEnabled(false);
                	onepoint.setBackground(Color.magenta);
                	ClearRows();
                	getRandomDiamonds();
                }
                else{
                	//一点穿透效果
                	for(i =600;i>oney;i-=60){
	                	if( !c.getComponentAt(onex,oney).isEnabled()&&
	                		c.getComponentAt(onex,i).isEnabled() ){
	                		onepoint.setLocation(onex,i);
	                		onepoint.setBackground(Color.magenta);
                			onepoint.setEnabled(false);
                			ClearRows();
                			getRandomDiamonds();
                			sigh = true;
                			break;
                		}
                	}
                	if(!c.getComponentAt(onex,oney).isEnabled()&&!sigh){
                		onepoint.setBackground(Color.magenta);
                		onepoint.setEnabled(false);
                		ClearRows();
                		getRandomDiamonds();
                	}
            	}
            	DefineOver();
			}
		};
		thread.start();
		
    	KeyAdapter k;
    	
    	onepoint.addKeyListener(k = new KeyAdapter(){
            public void keyPressed(KeyEvent e){
                int key = e.getKeyCode();
                int xx,yy;
                //使onepoint相应移动
                if(e.getKeyText(key).equals("Right")){
                	xx = x;
                	x+=60;
                	int oney = onepoint.getY();
                	int onex = onepoint.getX()+60;
                	if(x>=0&&x<=600&&c.getComponentAt(onex,oney).isEnabled()) 
                		onepoint.setLocation(x,y-60);
                	else x = xx;
                	if(flag){
                		onepoint.setBackground(Color.cyan);
                		flag = false;
                	}
                	else{
                		onepoint.setBackground(Color.red);
                		flag = true;
                	}
                }
                else if(e.getKeyText(key).equals("Left")){
                	xx = x;
                	x-=60;
                	int oney = onepoint.getY();
                	int onex = onepoint.getX()-60;
                	if(x>=0&&x<=600&&c.getComponentAt(onex,oney).isEnabled()) 
                		onepoint.setLocation(x,y-60);
                	else x = xx;
                	if(flag){
                		onepoint.setBackground(Color.cyan);
                		flag = false;
                	}
                	else{
                		onepoint.setBackground(Color.red);
                		flag = true;
                	}
                }
                else if(e.getKeyText(key).equals("Down")){
                	yy = y;
                	y+=60;
                	if(y>=0&&y<=600) onepoint.setLocation(x,y-60);
                	else y = yy;
                	if(flag){
                		onepoint.setBackground(Color.cyan);
                		flag = false;
                	}
                	else{
                		onepoint.setBackground(Color.red);
                		flag = true;
                	}
                }
                //快速下降
                else if(e.getKeyText(key).equals("F")){
                	int onex = onepoint.getX();
                	int oney = onepoint.getY();
                	
                	while(c.getComponentAt(onex,oney+60).isEnabled()&&
                			oney<600){
                		oney+=60;
                	}
                	onepoint.setLocation(onex,oney);
                	x = onex;y = oney;
                }
                
            }
        });
        
    }

/*---------------------------------------------------------------------------*/
    //两点
    public void getTwoPoints(int r){
    	final JButton twopoint1 = new JButton("1");
    	final JButton twopoint2 = new JButton("2");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -