兰顿蚂蚁

来源:互联网 发布:延安广电网络商务宾馆 编辑:程序博客网 时间: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
原创粉丝点击