我正在用Java编写Conway的生活游戏,在代码中遇到了一个逻辑错误。如果您不熟悉游戏,以下是基本规则:
生命的游戏是一个简单的模拟,发生在一个网格的细胞。每个细胞可以是活的,也可以是死的,并且它与相邻的细胞相互作用(水平、垂直或对角)。在每次迭代中,都会做出决定,看看活细胞是否存活,或者死细胞是否存活。算法如下:
如果一个细胞是活的:如果它有少于两个活着的邻居,它会因为孤独而死亡。如果它有两个或三个活着的邻居,它会活到下一代如果它有三个以上活着的邻居,它会因为人口过剩而死亡。
如果一个细胞是死的:如果它正好有三个活着的邻居,它会因为繁殖而变得活着。
到目前为止,我掌握的死细胞和活细胞计数代码如下:
// Go through each dead cell and check all neighboring cells to see if it
// will be revived
// reviveDeadCells()
neighborCount = 0;
for (y = 0; y , 15; y++ ) {
for (x = 0; x < 15; x++) {
if (board[x][y] = 0 ) {
for ( i = x - 1; i = x + 1; i ++ ) {
for (j = y - 1; j = y + 1; j ++) {
if (board[i][j] = 1 ) {
neighborCount = neighborCount + 1;
}
}
if (neighborCount = 4) {
board[i][j] = 1;
}
}
}
}
}
// Go through each live cell and see if it should be executed
// killLiveCell()
for (y = 0; y , 15; y++ ) {
for (x = 0; x < 15; x++) {
if (board[x][y] = 1 ) {
for ( i = x - 1; i = x + 1; i ++ ) {
for (j = y - 1; j = y + 1; j ++) {
if (board[i][j] = 1 ) {
neighborCount = neighborCount + 1;
}
}
if (neighborCount < 3) || (nieghborCount > 4) {
board[x][y] = 0;
}
}
}
我现在意识到这段代码的问题在于存在逻辑错误。首先,我要计算死亡细胞的所有相邻细胞,然后计算有多少是活的。然后,如果正好有3个活着的邻居,我会让他们复活。唯一的问题是它现在会影响活细胞相邻细胞的计数器。如何在不影响另一个的计数器的情况下,同时改变死去和活着邻居的活细胞?我有一种感觉,我有所有的代码,但我可能不得不把它移动到for循环的某个地方。我只是不知道我需要把它放在哪里来纠正这个错误。任何帮助都将不胜感激,谢谢。
而不是杀死/复活的单元格,然后,存储坐标的单元格将改变状态元组中的一个新列表。有很多方法可以做到这一点,但作为一个例子;
// Create a simple tuple class for the co-ordinates
Class CoordPair(){
int x;
int y;
CoordPair(int x, int y){
this.x = x;
this.y = y;
}
}
// In your code, use Hash Set to prevent having two copies of the Coordinates
HashSet<CoordPair> changeSet = new HashSet<CoordPair>();
...
if (neighborCount = 4) {
CoordPair changePair = new CoordPair(i,j);
changeSet.add(changePair);
}
...
// After identifying all the changing pairs on the board
for(CoordPair pair : changeSet){
board[pair.x][pair.y] ^= 1; //XOR to flip the value
}
我试图为康威的生活游戏写一个计数邻居方法。如果一个死细胞与2或3个活细胞相邻,它应该会活过来。然而,我的代码没有正确计算所有的邻居。如果我给输入坐标(10, 10), (10, 11), (10, 12)这将产生 该程序将下一代打印为 坐标在(10,11)和(11,11)。但是,在(9,11)也应该有一个点。我知道问题发生在这个函数中,对于点(9,11),函数不包括3个邻居。
我正在制作康威的生活游戏,就像几乎所有其他初学者一样。我的主要问题是我不知道如何执行游戏规则,这些规则是:一个有三个活邻居的死细胞变成活细胞,一个有一个活邻居的活细胞变成死细胞,一个有三个以上活邻居的活细胞变得死了。我以前从未操纵过矩阵,所以我不知道从哪里开始。我所在的类还不允许我们使用非静态方法,而且我们也不能使用java库。这是我目前所拥有的: 我现在收到的输出是我最初一代游戏所需要的。我想我
我已经在谷歌表单中创建了一个自定义表单。当用户按键盘上的[Enter]或[Tab]时,表单上数据字段的顺序与我想跳转到(下一个单元格)的顺序不同。是否有一个方法可以在工作表上使用(不使用谷歌应用程序脚本),我可以指定移动到下一个单元格。
我的问题很难描述,所以我会尽可能简洁地解释。 在康威的《生活游戏》中,假设我有一张这样的地图: 与其在每个单元格上循环,包括不可能相关的死单元格,不如让我将第0代中的每个活单元格放在
我有一个有三个活动的应用程序。第一活动,第二活动,第三活动。 在第一个活动中有一个按钮,它启动第二个活动。在第二个活动中,有两种方法可以转到第三个活动。但是有一个方法有代码: 两个变体都使用此代码片段。 此代码在-12秒内自动运行 我的问题是:当用户按下Back键时,ThirdActivity会打开,但几秒钟后,ThirdActivity会从第一个变体再次打开。 那么,如何完全终止一个活动,使其在
我的项目涉及一个带有自定义表格模型的JTable。因为我希望用户能够修改表中的每个单元格,所以我选择让我的自定义TableModel(CSVModel)扩展DefaultTableModel。然而,由于某些原因,当我试图编辑表中的单元格时,CSVModel会抛出一个异常。我得到的唯一提示来自堆栈跟踪的最后一行: java线程“AWT-EventQueue-0”中出现异常。lang.ArrayInd