使用java模拟兰顿蚂蚁
时间: 2024-02-07 13:42:26 浏览: 162
兰顿蚂蚁(细胞自动机/生命游戏)java实现
兰顿蚂蚁是一种计算机模拟生物,其行为类似于真实的蚂蚁。在兰顿蚂蚁的模拟中,一只虚拟的蚂蚁在一个无限大的网格中行走,它会遇到黑色或白色的格子。如果它遇到的是白色的格子,它会向右转,并将当前的格子涂成黑色;如果它遇到的是黑色的格子,它会向左转,并将当前的格子涂成白色。下面是使用Java模拟兰顿蚂蚁的代码:
```java
public class LangtonAnt {
private int[][] grid;
private int antX, antY, antDir;
private final int ANT_UP = 0, ANT_RIGHT = 1, ANT_DOWN = 2, ANT_LEFT = 3;
public LangtonAnt(int width, int height) {
grid = new int[width][height];
antX = width / 2;
antY = height / 2;
antDir = ANT_UP;
}
public void step() {
if (grid[antX][antY] == 0) {
antDir = (antDir + 1) % 4;
grid[antX][antY] = 1;
} else {
antDir = (antDir + 3) % 4;
grid[antX][antY] = 0;
}
switch (antDir) {
case ANT_UP:
antY--;
break;
case ANT_RIGHT:
antX++;
break;
case ANT_DOWN:
antY++;
break;
case ANT_LEFT:
antX--;
break;
}
if (antX < 0) {
antX = grid.length - 1;
} else if (antX >= grid.length) {
antX = 0;
}
if (antY < 0) {
antY = grid[0].length - 1;
} else if (antY >= grid[0].length) {
antY = 0;
}
}
public void printGrid() {
for (int y = 0; y < grid[0].length; y++) {
for (int x = 0; x < grid.length; x++) {
if (x == antX && y == antY) {
System.out.print("*");
} else if (grid[x][y] == 0) {
System.out.print(" ");
} else {
System.out.print("#");
}
}
System.out.println();
}
}
public static void main(String[] args) {
LangtonAnt ant = new LangtonAnt(50, 50);
for (int i = 0; i < 10000; i++) {
ant.step();
}
ant.printGrid();
}
}
```
在上面的代码中,我们定义了一个`LangtonAnt`类来表示兰顿蚂蚁。在类的构造函数中,我们初始化了一个二维数组来表示网格,并将蚂蚁的初始位置设置在网格的中心。蚂蚁的初始方向为向上。
`step`方法是模拟蚂蚁的行走过程。首先,我们检查当前蚂蚁所在的格子的颜色。如果是白色的,我们将蚂蚁的方向向右转,并将当前的格子涂成黑色。否则,我们将蚂蚁的方向向左转,并将当前的格子涂成白色。然后,我们根据蚂蚁的方向更新蚂蚁的位置。如果蚂蚁走出了网格的边界,我们将它的位置重新设置到网格的另一侧。
`printGrid`方法用来输出当前的网格状态。我们使用`*`来表示蚂蚁的位置,使用空格表示白色的格子,使用`#`表示黑色的格子。
在`main`方法中,我们创建了一个`LangtonAnt`对象,并模拟了10000步蚂蚁的行走过程。最后,我们调用`printGrid`方法输出了模拟结束后的网格状态。
阅读全文