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

📄 gamepanel.java

📁 一个Java的塔防小游戏
💻 JAVA
字号:
package gameoflife;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;
import javax.swing.Timer;

import com.axon7.jibu.CancelException;

import static java.lang.System.out;

/**************************************
 * A panel that runs and shows the game of life.
 **************************************/
public class GamePanel extends JPanel
{
	private static final long serialVersionUID = 1L;

	private int cellSize;
	private World world;
	private Timer drawTimer;
	private BufferedImage img;
	
	int		timeSlice;
	int		level;
	
	int  frames = 0;
	long t1 = 0;

	public GamePanel(int columns, int rows, int cellPadding, Xenomorph[] lifes, final boolean parallel)
	{
		cellSize = cellPadding;
		img = new BufferedImage(columns* cellSize, rows * cellSize, BufferedImage.TYPE_INT_ARGB);// .TYPE_INT_RGB);
		
		world = new World(columns, rows, cellSize);

		world.addXenos(lifes);
		//world.sequentialImageDraw(img, cellSize);

		// we create a timer that continuously paints the generations on the panel.
		
		drawTimer = new Timer(100, new ActionListener()
		{			
			public void actionPerformed(ActionEvent e)
			{
				frames ++;
				if(t1 == 0) {
					t1 = System.currentTimeMillis();
				}
				else {
					if(System.currentTimeMillis() - t1 >= 1000) {
						//System.out.println("================================" + frames);
						frames = 0;
						t1 = 0;
					}
				}
				if(parallel)
				{
					try
					{
						world.parallelOneTimeSlice();
						
						world.parallelImageDraw(img, cellSize);
					}
					catch (CancelException ex)
					{
						ex.printStackTrace();
					}
				}
				else
				{
					// transition to next generation
					// world.sequentialTransition();
					// draw current state
					//world.sequentialImageDraw(img, cellSize);
				}
				GamePanel.this.repaint();					
					
			}
		});


		setPreferredSize(new Dimension(columns * cellSize, rows * cellSize));
		
		this.addMouseListener( new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				world.onMouseClicked(e);
			}

			public void mousePressed(MouseEvent e) {
				world.onMousePressed(e);
			}
			
			public void mouseReleased(MouseEvent e) {
				world.onMouseReleased(e);
			}
		});
		
		this.addMouseMotionListener( new MouseMotionAdapter() {
			public void mouseMoved(MouseEvent e){
				world.onMouseMoved(e);
			}
		});
		
		this.setFocusable(true);
		this.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				//out.println(e.getKeyChar() + " " + e.getKeyCode() + " "+ e.getKeyLocation());
				world.onKey(e);
			}

			public void keyPressed(KeyEvent e) {
				world.onKeyPressed(e);
			}

			public void keyReleased(KeyEvent e) {
				world.onKeyReleased(e);
			}
		});
		
		drawTimer.start();
	}
	
	public void paint(Graphics g)
	{
		Graphics2D g2d = (Graphics2D)g;
		g2d.drawImage(img,0,0,img.getWidth(), img.getHeight(),this);
	}

}

⌨️ 快捷键说明

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