gpt4 book ai didi

java - 我该如何用java制作这个Conways Life程序

转载 作者:行者123 更新时间:2023-12-01 05:32:35 25 4
gpt4 key购买 nike

我正在用java制作康威的生命游戏程序,并试图将其从命令行版本更改为GUI。从命令行,我刚刚打印了一个显示世代的数组( block 和闪光灯等对象显示为一系列 1 和 0,其中空白,在 GUI 中我将其显示为正方形(白色正方形为但我遇到困难的是,当我创建另一种方法(替换打印数组的方法)来检查网格数组时,如果有零,则正方形会从白色到蓝色,反之亦然。康威的生命规则在一个独立的单独类中处理,该方法所做的只是在规则更改数组后,该方法检查它。

规则在一个类的方法中完成,GUI 组件在另一个类中完成。但由于我需要这两个类的实例,我该如何去做呢?将这两个类合并(将所有 GUI 类合并到 Life 类中,以某种方式嵌入它们,我完全陷入了要做什么

public void runGUI() {
int x = getX(), y = getY();

x /= squareSize;
y /= squareSize;
for (int i = 0; i < LifeData.grid.length; i++) {
for (int j = 0; j < LifeData.grid[i].length; j++) {
if (LifeData.grid[i][j] == 0)
l.setCell(x, y, l.getCell(x, y) + 1);
else
l.setCell(x, y, l.getCell(x, y) - 1);
this.repaint();
}
}
}

这就是我现在将其更改为的内容,但是在编译时显示“无法从静态上下文引用非静态变量 grid”和“非静态方法 runGUI( ) 无法从静态上下文中引用”。当尝试运行该方法时。

最佳答案

创建一个单独的线程来执行生命游戏并更新 GUI。

类似这样的事情

public class GameExecutor implements Runnable {

private static final int DELAY = 1000;

private GameOfLife game;
private boolean stop = false;
private Gui gui;

public GameExecutor(Gui gui, GameOfLife game) {
this.gui = gui;
this.game = game;
};

public void run(){
game.start();

while (!stop) {
game.step(); //execute a step
gui.update(game.getState());
try {
Thread.sleep(DELAY);
} catch (InterruptedException e) {}
}
}

}

在启动时在线程中启动它并将其传递给您的 gui。不要忘记在正确的 Swing 线程中更新 gui。

显然,您还需要添加一些代码来阻止它:)

关于java - 我该如何用java制作这个Conways Life程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com