兰顿蚂蚁
来源:互联网 发布:延安广电网络商务宾馆 编辑:程序博客网 时间:2024/06/02 11:56
From百度百科:
兰顿蚂蚁是由克里斯托夫·兰顿提出的细胞自动机的例子。
由来:
兰顿蚂蚁是由克里斯托夫·兰顿提出的细胞自动机的例子。
释义:
在平面上的正方形格被填上黑色或白色。在其中一格正方形有一只“蚂蚁”。它的头部朝向上下左右其中一方。
若蚂蚁在黑格,右转90度,将该格改为白格,向前移一步;
若蚂蚁在白格,左转90度,将该格改为黑格,向前移一步。
很多时,蚂蚁刚刚开始时留下的路线都会有接近对称、像是会重复。但不论起始状态如何,蚂蚁的路线必然是无限长的。
---------------------------------------
目前刚学多线程,还不知道如何将它改成多线程,以达到多只蚂蚁共同爬行,容后研究。
package king.lantonants;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Point;import java.awt.Toolkit;import java.util.Random;import javax.swing.JFrame;import javax.swing.JPanel;public class Ants extends JPanel { private final int GRID = 5; //每个格子的宽度 private final long TIME_CELL = 1L;//时间间隔 //------------------------------可以改变上面两个值来调整游戏-------------------------// private final double PER = 0.8; //占屏幕边长的比例 private final int WIDTH = (int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()*PER)/GRID*GRID; private final int HEIGHT = (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()*PER)/GRID*GRID; private boolean[][] grid = new boolean[WIDTH/GRID][HEIGHT/GRID];//每个小格子的左上角是它的格子坐标,也即对应的数组索引 private Random rand = new Random(); private Ant ant = new Ant("蚂蚁1", rand.nextInt(5)+(WIDTH/GRID)/2-5, rand.nextInt(5)+(HEIGHT/GRID)/2-5, rand.nextInt(5));// private Image[] img = new Image[4];// {// img[0] = Toolkit.getDefaultToolkit().getImage("./img/Ant0.png");// img[1] = Toolkit.getDefaultToolkit().getImage("./img/Ant1.png");// img[2]= Toolkit.getDefaultToolkit().getImage("./img/Ant2.png");// img[3] = Toolkit.getDefaultToolkit().getImage("./img/Ant3.png"); // } public Ants(){ JFrame f = new JFrame("兰顿蚂蚁"); setPreferredSize(new Dimension(WIDTH, HEIGHT)); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// repaint(); } public static void main(String[] args){ new Ants().newGame(); } // 开始游戏 public void newGame(){ while(true){ if(grid[(int)ant.getX()][(int)ant.getY()]){ //蚂蚁在黑格 ant.turnRight(); }else{ ant.turnLeft(); } grid[(int)ant.getX()][(int)ant.getY()] = !grid[(int)ant.getX()][(int)ant.getY()]; ant.advance(); repaint(); try { Thread.sleep(TIME_CELL); } catch (InterruptedException e) { e.printStackTrace(); } } } //内部类蚂蚁 private class Ant extends Point{ private String name; private int direction; //方向 public Ant(String name, int x, int y, int direction){ this.name = name; this.x = x; this.y = y; this.direction = direction; } public void setDirection(int n){ this.direction = n; } public int getDirection(){ return this.direction; } public void turnLeft(){ direction = direction==0?3:(direction-1); } public void turnRight(){ direction = direction==3?0:(direction+1); } public void advance(){ switch (direction) { case 0: y--; break; case 1: x++; break; case 2: y++; break; case 3: x--; break; } } } //把格子坐标转换成实际坐标 private int getXY(int X){ return X*GRID; } @Override public void paintComponent(Graphics g){ super.paintComponent(g); // 填充格子 for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[i].length; j++){ if (grid[i][j]){ g.setColor(Color.black); }else{ g.setColor(Color.white); } g.fillRect(getXY(i), getXY(j), GRID, GRID); } } //画格子线 g.setColor(Color.gray); for(int i = 1; i*GRID < WIDTH;i++) g.drawLine(i*GRID, 0, i*GRID, HEIGHT); for(int i = 1; i < HEIGHT; i++) g.drawLine(0, i*GRID, WIDTH, i*GRID); //画蚂蚁// g.drawImage(img[ant.getDirection()], getXY((int) ant.getX()), getXY((int) ant.getY()), GRID, GRID, this); g.fillRect(getXY((int)ant.getX()), getXY((int)ant.getY()), GRID, GRID); } }
0 0
- 兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁
- 蓝桥杯 兰顿蚂蚁
- 蓝桥杯:兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁
- 蓝桥杯 兰顿蚂蚁
- 蓝桥杯-兰顿蚂蚁
- 兰顿蚂蚁
- 蓝桥杯+兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁
- 蓝桥杯 兰顿蚂蚁
- 兰顿蚂蚁
- 兰顿蚂蚁 JAVA
- ubuntu14 安装apache和php环境
- Struts2(一)Struts2配置详解
- 自我发现,找到适合自己的职位
- poj3090 Visible Lattice Points(莫比乌斯反演)
- HDOJ 1800 Flying to the Mars
- 兰顿蚂蚁
- iOS开发的一些技巧
- A-8SQL Server 触发器
- 我的博客
- A-9SQL Server 数据库安全
- Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作
- A-10SQL Server 开发指南
- SQL2014内存表性能之内存中 OLTP 的性能改进测试
- 自己珍藏的数据库SQL基础练习题答案