gamepanel.java
来自「采用jibu实现的Java并行编程的一个例子。 演示的是生命游戏。」· Java 代码 · 共 86 行
JAVA
86 行
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 + =
减小字号Ctrl + -
显示快捷键?