gameke.java

来自「一个俄罗斯方块游戏」· Java 代码 · 共 307 行

JAVA
307
字号
package iiist1;
import iiist2.Score;
import iiist2.Square;
import iiist2.State;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;


public class GameKe extends KeyAdapter implements KeyListener, Runnable,ActionListener
{
	//=============声明==================
	Square square;
	
	//////==========end==============
	JFrame frame;
	boolean start =false;
	Thread timerThread;
//	JMenuBar mb = new  JMenuBar();
//	JMenu file = new JMenu("File");
//	JMenuItem save = new JMenuItem("Save");
//	JMenuItem open = new JMenuItem("Open File");
//	JMenuItem close = new JMenuItem("Close");	
	public GameKe()
	{
		//==========初始化构造函数==================

		new Init();		
		//=======end==============
		frame = new JFrame();
		frame.addMouseListener(new DoubleClick());
		frame.addMouseMotionListener(new DoubleClick());
		frame.getContentPane().add(new Screen());			
		frame.addKeyListener(this);		
//		save.addActionListener(this);
//		open.addActionListener(this);
//		close.addActionListener(this);
//		mb.add(file);
//		file.add(save);
//		file.add(open);
//		file.add(close);
//		frame.setJMenuBar(mb);		
		frame.setSize(640+5*2, 480+5*2+25+30);
		frame.setVisible(true);
		frame.repaint(); 
	}

	public void run() 
	{		
		try 
		{
			timerThread.sleep(400);
		} 
		catch (InterruptedException e) 
		{			
			e.printStackTrace();
		}
		
		while(start)
		{
			//running
		}
	}
	
	public void keyPressed(KeyEvent e)
	{		
		switch(e.getKeyCode())
		{
		case KeyEvent.VK_ENTER:
			
			break;
		case KeyEvent.VK_ESCAPE:
			start =false;
			System.exit(1);
			break;
		case KeyEvent.VK_UP:
			
			break;
		case KeyEvent.VK_DOWN:
					
			break;
		case KeyEvent.VK_RIGHT:
					
			break;
		case KeyEvent.VK_LEFT:
			
			break;
		}
	}
	public class Screen extends JComponent
	{
		public void paint(Graphics g)
		{
			Graphics2D g2d =(Graphics2D)g;
			//=============draw picture=========
			showOther( g2d,this);
			square.showFirstSquare(g2d);
			square.showMergeSquare(this, g2d);
			square.showSecondSquare(g2d, this);
			//===============end draw picture===========
			frame.repaint();
		}
		
	}	
	public class ScrollBarExample extends JPanel
	{
		JLabel label;
		public ScrollBarExample()
		{
			super(true);
			label = new JLabel();
			setLayout(new BorderLayout());
			JScrollBar hbar =new JScrollBar(JScrollBar.HORIZONTAL, 30,20,0,3000);
			JScrollBar vbar =new JScrollBar(JScrollBar.VERTICAL,30,40,0,3000);
			hbar.setUnitIncrement(2);
			vbar.setUnitIncrement(1);
			
			hbar.addAdjustmentListener(new MyAdjustmentListener());
			vbar.addAdjustmentListener(new MyAdjustmentListener());
			add(hbar,BorderLayout.SOUTH);
			add(vbar,BorderLayout.EAST);
			add(label,BorderLayout.CENTER);
		}
		public class MyAdjustmentListener implements AdjustmentListener
		{
			public void adjustmentValueChanged(AdjustmentEvent e) 
				
			{	
				label.setText("" + e.getValue());
				repaint();				
			}
		}
	}
	
	public class DoubleClick implements MouseListener, MouseMotionListener
	{
		private  boolean flag = false;
		//用来判断是副已经执行doubleClick Event
		private  int clickNum =0;
		//涌来判断是夫执行double Click Event
		
		public void mouseClicked (MouseEvent e)
		{
			final MouseEvent  me = e; //Source Event 
			flag = false;
			//每次点击鼠标初始化事件执行标志为false;
			if(clickNum==1) // 当clickTime ==1 时执行事件
			{
				mouseDoubleClicked(me);//执行double Click event 
				clickNum=0; //初始化double Click Event 执行标志为0;
				this.flag=true; // double Clicke Event 已执行事件标志为true;
				return ;
			}
			
			java.util.Timer  timer= new java.util.Timer();
			timer.schedule(new java.util.TimerTask()
			{
				private int n=0;//纪录定时器执行次数
				
				//定时器开始执行, 延时0,2秒后确定是夫执行单击事件
				public void run()
				{
					if(flag)
					{
						n=0;
						clickNum=0;
						this.cancel();
						return ;
					}				
					if(n==1) // 定时器等待0,2秒后, double click event 仍未发生, 执行单击事件
					{
						mouseSingleClicked(me); //执行单击事件;
						flag=true;
						clickNum=0;
						n=0;
						this.cancel();
						return ;
					}
					clickNum++; n++;
				}
			}, new java.util.Date(),400
				);
		}
		
		public void mouseSingleClicked(MouseEvent e)
		{
			if(e.getButton()==MouseEvent.BUTTON1)
			{
				System.out.println("single Left Clicked!!!!");
			}
			else if(e.getButton() == MouseEvent.BUTTON3)
			{
				System.out.println("single Right Click");
			}
			frame.repaint();
		}		
		public void mouseDoubleClicked(MouseEvent e)
		{
			System.out.println("Double Clicked!!");
			frame.repaint();
		}

		public void mouseEntered(MouseEvent arg0) {	}
		public void mouseExited(MouseEvent arg0) {}
		public void mousePressed(MouseEvent arg0) {	}
		public void mouseReleased(MouseEvent arg0) {}
		public void mouseDragged(MouseEvent arg0) {	}
		public void mouseMoved(MouseEvent arg0) {}		
	}
	
	
	public static void main(String [] e)
	{
		new GameKe();
	}
	
	public int rand(int from ,int to)
	{
		return (int)(from+(to-from+1)*Math.random());
	}
	
	public void showPic(Graphics2D g2d, Screen s,String file ,int x, int y)
	{
		java.io.File files = new java.io.File(file);
		if(files.exists())
		{
			Image phto = (new ImageIcon(file)).getImage();
			g2d.drawImage(phto,x,y,s);
		}
		else
		{
			System.out.println("The file path does not exist");
		}
	}
	
	public boolean join(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
	{
		Rectangle r1 = new Rectangle(x1,y1, w1, h1);
		Rectangle r2 = new Rectangle(x2,y2, w2, h2);
		return r1.intersects(r2);
	}

	public void actionPerformed(ActionEvent e) 
	{
//		if(e.getSource()==save)
//		{
//			new Init();
//		}
//		
//		if(e.getSource()==open)
//		{
//			
//		}
//		if(e.getSource()==close)
//		{
//			System.exit(1);
//		}
	}
	
	public class Init
	{
		public Init()
		{
			square = new Square();					
			square.createFirstSquare();	
			square.createSecondSquare();
		}
	}
	
	public void gameOver()
	{
		start=false;
		System.exit(1);
	}

	public void showOther(Graphics2D g2d,Screen s)
	{
		showPic(g2d,s,"pic/kk.png",0,0);
	}
		
}

⌨️ 快捷键说明

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