- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚完成了 Conway's Game of Life 的实现.我想知道什么是可视化几代人进步的好方法。到目前为止,我有一个简单的打印语句:
System.out.println();
for (int j= 0; j < n; j++){
for (int k= 0; k < n; k++){
System.out.print(board[j][k] + "\t");
}
System.out.print("\n");
}
这对于测试来说还可以,但我真的很想看到一些复杂的结构。我的问题是:我应该如何推进可视化?也许我可以构建某种 GUI(尽管我还没有这样做)。
以下是我如何构建算法的总体思路:
int i= 0;
while (i < 3){
int[][] temp= board;
for (int j= 0; j < n; j++){
for (int k= 0; k < n; k++){
//Update temp array according to Conway's rules.
}
}
board= temp;
i++;
//Print statements
}
所以,我的确切问题是:我如何从中构建 GUI?
最佳答案
很久以前我就没碰过这个,这是我用 java 实现的,这很有趣。
基本上,我只是将活细胞绘制为 4x4 红色方 block 。 update 方法有一些可以优化的 if 测试,但我认为性能提升可以忽略不计。在下面的代码中,值为 1 的图 block 是活的,0 是死的。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Transient;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class ConwaysGameOfLife extends JPanel {
private int[][] grid;
private static final Random rnd = new Random();
private int generationCounter;
public ConwaysGameOfLife(int width, int height) {
this.grid = new int[width / 4][height / 4];
setupGrid();
}
private void setupGrid() {
for (int[] row : grid) {
for (int j = 0; j < row.length; j++) {
if (rnd.nextDouble() < 0.92)
continue;
row[j] = rnd.nextInt(2);
}
}
}
public void updateGrid() {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
applyRule(i, j);
}
}
}
private void applyRule(int i, int j) {
int left = 0, right = 0, up = 0, down = 0;
int dUpperLeft = 0, dUpperRight = 0, dLowerLeft = 0, dLowerRight = 0;
if (j < grid.length - 1) {
right = grid[i][j + 1];
if(i>0)
dUpperRight = grid[i - 1][j + 1];
if (i < grid.length - 1)
dLowerRight = grid[i + 1][j + 1];
}
if (j > 0) {
left = grid[i][j - 1];
if (i > 0)
dUpperLeft = grid[i - 1][j - 1];
if (i< grid.length-1)
dLowerLeft = grid[i + 1][j - 1];
}
if (i > 0)
up = grid[i - 1][j];
if (i < grid.length - 1)
down = grid[i + 1][j];
int sum = left + right + up + down + dUpperLeft + dUpperRight
+ dLowerLeft
+ dLowerRight;
if (grid[i][j] == 1) {
if (sum < 2)
grid[i][j] = 0;
if (sum > 3)
grid[i][j] = 0;
}
else {
if (sum == 3)
grid[i][j] = 1;
}
}
@Override
@Transient
public Dimension getPreferredSize() {
return new Dimension(grid.length * 4, grid[0].length * 4);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Color gColor = g.getColor();
g.drawString("Generation: " + generationCounter++, 0, 10);
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if (grid[i][j] == 1) {
g.setColor(Color.red);
g.fillRect(j * 4, i * 4, 4, 4);
}
}
}
g.setColor(gColor);
}
public static void main(String[] args) {
final ConwaysGameOfLife c = new ConwaysGameOfLife(800, 800);
JFrame frame = new JFrame();
frame.getContentPane().add(c);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.setVisible(true);
new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
c.updateGrid();
c.repaint();
}
}).start();
}
}
设法一次性得到像这样的漂亮图案
关于java - 在 Java 中可视化 Conway 的生命游戏(可能使用 GUI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972021/
我正在为一个学校项目开发康威的生命游戏。我不是直接寻找代码。我想找出我的代码有什么问题。 在康威的生命游戏中,如果一个细胞有 3 个存活的邻居,它就会从死亡状态变为存活状态。如果它有两个或三个活着的邻
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我构建了 Conways 生命游戏,但算法运行不正常。我为此混合使用了 Js 和 Jquery。我的程序所做的是逐个单元格地遍历整个棋盘,检查单元格的邻居,并通过检查它的邻居将游戏规则应用于每个单元格
这是一个有点理论性的问题。在编程作业中,约翰康威告诉我们要实现生命游戏。作为一项附加任务,我们被要求修改程序,以便它可以检测最多四代的模式重复。例如,给定这个特定的游戏“种子”,程序应该像这样: -
我目前正在使用 C++ 开发 Conway 的 Game of Life 的控制台版本。 Repo Link 问题是我的 Draw() 方法没有尽可能快地绘制下一代。 我记得在某处读到过,与获取控制台
我用 Java 编写了康威生命游戏的代码,现在我正在尝试将其转换为 C。代码非常简单,但是我在尝试创建适当的 结构时遇到了问题。 在 Java 中,如果我有实例变量: private boolean
我正在尝试制作康威生命游戏的简单版本,其中计算机生成矩形网格并填充代表“活”细胞的矩形。我遇到的问题是我无法在第一个图案之后清除网格,因此所有图案都在同一个网格上生成,它看起来像一大团彩色矩形。 这是
我的查询真的很难描述,所以我会尽量简洁地解释它。 在康威的生命游戏中,假设我有一张这样的 map : _ _ _ _ _ _ _ _ _ _ U _ R Y
我已经研究这段代码很长时间了,但我似乎无法弄清楚。我的代码的顶部部分用于预填充网格。但由于某种原因,我无法让我的形象按照预期移动和成长。请帮助我!! import java.util.Random;
所以我阅读了 Conways Game of Life 并尝试使用 PyGame 来实现它。 我试着让它面向对象。它的工作方式是我有一个细胞实例列表,然后检查它们有多少邻居,然后根据它们的邻居存活或死
这是康威用 Python 制作的生命游戏模拟的代码片段。出于检查它是否有效的目的,它非常简单 - 但它没有。无法弄清楚为什么,但据我所知,它与更新有关。 感谢任何关于它为什么更新它的方式的输入: py
我正在尝试完成 Hofstadter-Conway $10,000 sequence Scala 中的任务 Rosetta Code .我想尽可能地使用惯用的 Scala,但是我在不使用原始递归的情况
我在使用 C++ 为 Conway 的生命游戏编码时遇到了一些问题。我觉得我有一个好的开始,我只需要一些方向。首先,当我尝试运行该程序时,我总是得到一个空白的控制台。而且我也不太确定为板上没有完整八个
看上了康威的《生命游戏》,开始尝试用python写。目前我还没有为程序的边界编写任何代码,所以我只是在寻求帮助我现在拥有的东西。我似乎在初始化“信号灯”编队时遇到了麻烦。它没有像它应该的那样振荡,而是
我已经编写了 Conway's Game of Life 的简单实现使用 Store comonad(见下面的代码)。我的问题是网格生成从第五次迭代开始明显变慢。我的问题是否与我正在使用 Store
public void actionPerformed(ActionEvent e){ grid=new JButton[length+20][width+20];
我正在尝试用 Java 编写康威生活游戏,但它没有按预期运行。我的意思是,静物有效,但眼罩和轮船不有效。 这是我的算法的代码,播种由一个单独的鼠标监听器处理(按预期工作)。 int[][] s
I am trying to write a program that implements Conway's game of life on a 20x60 cell board. The grid
我正在使用在 involuntaryexercise.com 上找到的 reni2D 库构建这个程序我创建了一个由二维行列组成的网格,单击其中的每个方 block 即可打开和关闭。现在,我正在尝试制作
我正在尝试为 Conway 的人生游戏编写一个计算邻居的方法。如果一个死细胞与 2 或 3 个活细胞相邻,它应该会复活。但是,我的代码没有正确计算所有邻居。如果我给出输入坐标 (10, 10), (1
我是一名优秀的程序员,十分优秀!