java - 2D 元胞自动机故障
问题描述
我想让它让我的代码在游戏中生成一个洞穴系统。我的代码有问题;似乎它在洞穴之间的部分制作了网格,我不想要网格,我想要一个开放区域。这是我的代码:
package CATest;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CATest extends JPanel{
static CATest w;
static Random rand=new Random();
JFrame jf=new JFrame();
boolean tileMap[][];
public static void main(String argsp[]){
w=new CATest();
w.jf.add(w);
w.jf.setSize(100,400);
w.jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w.jf.setVisible(true);
w.tileMap=new boolean[100][400];
for(int x=0;x<w.tileMap.length;x++)
for(int y=0;y<w.tileMap[0].length;y++)
if(rand.nextFloat()<0.7)
w.tileMap[x][y]=true;
for(int step=0;step<7;step++){
boolean newMap[][]=new boolean[100][400];
for(int x=0;x<w.tileMap.length;x++)
for(int y=0;y<w.tileMap[0].length;y++){
int count=0;
if(x-1>=0&&y-1>=0&&x+1<w.tileMap.length&&y+1<w.tileMap[0].length){
if(w.tileMap[x-1][y])
count++;
if(w.tileMap[x+1][y])
count++;
if(w.tileMap[x][y-1])
count++;
if(w.tileMap[x][y+1])
count++;
newMap[x][y]=count<=3;
}
}
w.tileMap=newMap;
}
w.repaint();
}
@Override
public void paintComponent(Graphics g){
for(int x=0;x<tileMap.length;x++)
for(int y=0;y<tileMap[0].length;y++){
if(tileMap[x][y])
g.setColor(Color.black);
else g.setColor(Color.white);
g.drawRect(x,y,1,1);
}
}
}
这是发生了什么的图片:元胞自动机 如您所见,应该有一个洞穴的地方有一个网格。请帮忙。
解决方案
我忽略了需要考虑中心图块的事实。所以而不是
if(w.tileMap[x-1][y])
count++;
if(w.tileMap[x+1][y])
count++;
if(w.tileMap[x][y-1])
count++;
if(w.tileMap[x][y+1])
count++;
它应该是
if(w.tileMap[x][y])
count++;
if(w.tileMap[x-1][y])
count++;
if(w.tileMap[x+1][y])
count++;
if(w.tileMap[x][y-1])
count++;
if(w.tileMap[x][y+1])
count++;
推荐阅读
- python - Pandas:从多个列子集非零的数据框中返回行
- javascript - 通过网站上的按钮向我的 Android 发送通知 (JavaScript)
- regex - SAS PRXPARSE 模式优先级
- validation - 如何删除 @ManyToOne @NotNull 引用?
- r - 如何在放大 R dygraph 时加载下采样数据?
- kotlin - 使用 Kotlin 的 Polymer 3.0 元素
- ios - LLVM 标头错误:全局命名空间中没有名为“xxxxxx”的成员(iOS、C++Builder)
- python - Python多处理:如何安全地更改其中一个进程的工作目录
- laravel - Laravel 多对多关系说没有方法用户
- ruby - 从 000 开始递增一个计数器