问题标签 [conways-game-of-life]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1861 浏览

c - 将位图/位数组渲染到 2d 平面的最佳方法(使用 OpenGL)

好的,这就是我所拥有的。我有一个 1d 位图(或位数组、位集、位串,但我现在称它为位图)包含来自康威生命生成游戏的活状态或死状态。at 的单元格(x, y)由 at 的位表示y * map_width + x

现在我的生活游戏“引擎”开始工作了,如果我现在可以渲染一些图形的东西就好了。我认为 OpenGL 将是一个不错的选择,但我不知道我应该如何开始,以及是否有任何特定的函数或着色器(我对着色器一无所知)可以有效地将位图渲染到具有黑色 'n 的 2d 平面白色像素。

如果您现在认为“不,您的白痴 opengl 很糟糕……”,请随意说出来,我愿意进行更改。

编辑

我忘了说我使用了一个紧凑的位数组,每个字节存储 8 位,并使用掩码来检索这些字节。这是我手工制作的图书馆东西:

0 投票
3 回答
1022 浏览

wolfram-mathematica - 优化生活游戏

我正在用数学编写一个生命游戏程序但是有一个警告,我需要能够将复制规则应用于一定百分比的单元格,我想尝试使用 MapAt 的新方法,但 liveNeighbors 不起作用elementwise,如果不完全按照我之前所做的(很多混乱的索引),我想不出一种修复它的方法,有人有什么建议吗?(我假设这会比下面列出的旧方法更有效,如果不是请告诉我,我只是一个初学者!)。

我正在尝试做的事情:

我已经做了什么:

谢谢!

0 投票
3 回答
329 浏览

terminology - 康威生命游戏的定义/元胞自动机

这实际上不是一个编程问题,而是编程社区可以帮助我解决的一个问题。

我需要写一个简短的句子,强调元胞自动机/康威的生活游戏对普通公众的影响或目的,以激发我对它的改编的兴趣。

我写了这个,这样对吗,我能说得更好吗?

尽管它的名字,康威的生命游戏不是游戏,而是显示混沌理论中出现的数学模型。

我知道这有点错误,但我不是科学家或数学家!

请帮忙。

谢谢

0 投票
4 回答
14724 浏览

java - 生命分配游戏

我的董事会正确地检测到少于 3 个邻居的组并将它们杀死,但似乎没有检测并产生具有 3 个邻居的单元格。

有什么想法吗?

如果我没有提供足够的信息,请告诉我,我可以粘贴更多代码,但我认为这是所有相关部分。

提前感谢您提供的任何建议。

这是请求的生命周期方法。

我附上了 LifeGUI 以供参考,但此代码是提供的,并不打算让我更改。

0 投票
5 回答
368 浏览

delphi - 排除重复项的快速线性列表

我有以下代码:

以上是计算康威生命游戏的测试程序的代码片段。
代码需要尽可能快。为此,我正在尝试不同的方法。

它穿过一个活跃的单元格,查看哪些单元格是活跃的,然后将它们放在堆栈上。
接下来,它处理堆栈上的项目并查看哪些单元格已更改。
如果一个单元格发生了变化,它会将这些变化更新到网格中以供下一代使用。

我将单元格存储在 32 位基数(4 位 Y,8 位 X)中,并且 P(偶数)代相对于 Q(奇数)代偏移 1,1 像素,这样我只需要考虑 3 个邻居而不是8.

问题
我想摆脱网格,我只想处理堆栈。
如何实现消除重复的堆栈?

请注意,它需要尽可能快,并且我不会使用肮脏的技巧来获得它。

0 投票
1 回答
781 浏览

optimization - 调整 MIT 的 bitcount 算法以并行计算单词?

我想使用著名的 MIT 位计数算法的一个版本,使用 SSE2 指令计算康威生命游戏中的邻居。

这是 c 中的 MIT 位计数,扩展到计数位计数 > 63 位。

这是帕斯卡的一个版本

我正在寻找并行计算此结构中的位。

注意这个结构中间有 16 位需要查找。我想使用 SSE2计算中间 16 位中的每一位的邻居计数。为了做到这一点,我将切片 A 放入 XMM0 低位双字中,切片 B 放入 XXM0-dword1 等。
我将 XMM0 复制到 XMM1 并屏蔽XMM0 的低位字中的012-456-89A5,对 XMM0 的字1 执行相同操作,等等。使用不同的切片和掩码来确保 XMM0 和 XMM1 中的每个单词都包含不同像素的邻居。

问题
如何调整 MIT-bitcount 以在每个 XMM 字中得到每个字/像素的位计数?

备注
我不想使用查找表,因为我已经有了这种方法,我想测试一下 SSE2 是否会通过不需要对查找表进行内存访问来加快进程。

使用 SSE 汇编的答案将是最佳的,因为我在 Delphi 中对此进行了编程,因此我使用的是 x86+SSE2 汇编代码。

0 投票
1 回答
1580 浏览

c# - 程序占用太多内存

我正在使用 WPF 开发康威生命游戏的模拟器。

由于某种原因,有时程序会占用高达 400,000K 的内存(当我非常快地绘制很多单元格时)。

如何减少内存使用和/或减少由此引起的滞后。

编辑 1: 主窗口代码: http: //pastebin.com/mz0z7tBu

网格类: http: //pastebin.com/ZHX1WBuK

细胞结构:

编辑 2: 我将尝试解释程序结构:单元格是一个结构,它包含 int 类型的 AutoProperty 邻居和 bool 类型的 AutoProperty IsAlive。

CellGrid 是一个包装二维单元格数组的类。每次迭代,每个 Cell 的 Neighbors 属性都会更新以包含活着的 Neighbors 的数量,然后将每个 Cell 的 IsALive 设置为 true 或 false,这取决于邻居的数量和之前的 IsAlive 状态。

MainWindow 类有一个 CellGrid 类型的对象。它将网格渲染到屏幕上。

编辑3:

XAML: http: //pastebin.com/Zp3dr8zc

资源.xaml:

0 投票
2 回答
361 浏览

perl - Perl 中的生命游戏——从 C++ 转换代码的问题

我最近开始尝试将我编写的康威生命游戏的 C++ 代码复制到 Perl 中,并且几乎是逐字复制。但是,C++ 代码的输出与 Perl 的输出有很大不同。C++ 代码运行完美,但 Perl 代码给出了奇怪的行为。任何看过生命游戏的人都应该知道,以下游戏状态很奇怪:

每个[]代表一个活细胞,而任何两个空白代表一个死细胞。奇怪的部分是在许多运行代码的尝试中出现的水平线和垂直线。我还没有看到预期的行为(滑翔机、振荡器等)。

我的代码如下;我将不胜感激任何帮助/澄清。提前致谢!

0 投票
1 回答
275 浏览

binary - I want to find the binary operations that transform an input to an output

Given the input and the output:

Are there any operations that can be performed on the rows / cols to get the result? For example, my best try was

((Y AND NOT Y-1) XOR (Y AND NOT Y+1)) OR ((X AND NOT X-1) XOR (X AND NOT X+1))

When no row/col exist, it is assumed to be false. A demonstration of my try:

For Y:

For X:

OR'ing those 2 results:

As you can see, it is almost identical as the output, but the COL 3, ROW 5 is 0 instead of 1. Is there any way I can do other operation to take that bit into account?

Thanks in advance.

0 投票
3 回答
223 浏览

java - 如何以编程方式调用作为独立任务运行的按钮?

我已经在 J​​ava swing 中实现了 Conway 的生命游戏问题。一切正常。正如您在下面的屏幕截图中看到的那样,只要单击“Tick”按钮,游戏就会进入下一个生命形式。现在,我计划在“勾选”按钮旁边添加一个“自动播放”按钮。这种自动播放的目的很简单。当我点击它时,自动操作应该会继续进行,就好像我每隔 1 秒按一次刻度按钮一样。

在此处输入图像描述

我试过这个。但这似乎阻止了所有其他操作。如何在单独的线程中执行此操作?一个小代码片段会让我继续前进。