📄 gamepanel.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 + -