📄 ai.java
字号:
/* * Ai.java * * Created on June 19, 2007, 4:06 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */package hello;/** * * @author jiabei */public class Ai { public static final int TABLE_FRUIT = -2; public static final int TABLE_BLOCK = -1; public static final int TABLE_FREE = 0; /** Creates a new instance of Ai */ public Ai() { } public static int getDirection(Map map, int snakeNum) { int [][] table = new int[map.getWidth()] [map.getHeight()]; if (!map.canCollide()) { for (int i = 0; i < map.getSnakeNum(); i ++) { Snake snake = map.getCurSnake(i); for (int j = 0; j < snake.getLength(); j ++) { if (map.inBound(snake.getBody(j))) { table[snake.getBody(j).getX()][snake.getBody(j).getY()] = TABLE_BLOCK; } } } } for (int i = 0; i < map.getFruitNum(); i ++) table[map.getFruit(i).getPoint().getX()][map.getFruit(i).getPoint().getY()] = TABLE_FRUIT; int queueLen = map.getWidth() * map.getHeight() + 10; Point [] queue = new Point[queueLen]; queue[0] = new Point(map.getCurSnake(snakeNum).getHead()); int rear = 0; int front = 0; boolean exit = false; while (front <= rear && rear < queueLen) { for (int i = 0; i < 4; i ++) { Point newPoint = new Point( Snake.keepInRange(queue[front].getX() + Snake.directionOffsetX[i], 0, map.getWidth() - 1), Snake.keepInRange(queue[front].getY() + Snake.directionOffsetY[i], 0, map.getHeight() - 1) ); if (table[newPoint.getX()][newPoint.getY()] == TABLE_FRUIT || table[newPoint.getX()][newPoint.getY()] == TABLE_FREE) { rear ++; if (rear >= queueLen) break; if (table[newPoint.getX()][newPoint.getY()] == TABLE_FRUIT) { exit = true; } queue[rear] = newPoint; if (front == 0) { table[newPoint.getX()][newPoint.getY()] = i + 1; } else { table[newPoint.getX()][newPoint.getY()] = table[queue[front].getX()][queue[front].getY()]; } if (exit) { return table[newPoint.getX()][newPoint.getY()] - 1; } } } front ++; } return Fruit.getRandomInt(0, 3); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -