📄 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.image.BufferedImage;
import javax.swing.JPanel;
import javax.swing.Timer;
import com.axon7.jibu.CancelException;
/**************************************
* A panel that runs and shows the game
* of life.
**************************************/
public class GamePanel extends JPanel
{
private static final long serialVersionUID = 1L;
private int cellSize = 2;//////////////////////// [1..]
private World world;
private Timer drawTimer;
private BufferedImage img;
public GamePanel(int columns, int rows, int cellPadding, LifeForm[] lifeForms, final boolean parallel)
{
img = new BufferedImage(columns* cellSize, rows * cellSize, BufferedImage.TYPE_INT_RGB);
cellSize = cellPadding * 2;
world = new World(columns, rows);
world.addLifeForms(lifeForms);
world.sequentialImageDraw(img, cellSize);
// we create a timer that continuously
// paints the generations on the panel.
drawTimer = new Timer(0, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(parallel)
{
try
{
// transition to next generation
world.parallelTransition();
// draw current state
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));
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 + -