📄 map.java
字号:
/* * Map.java * * Created on June 19, 2007, 1:52 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */package hello;/** * * @author jiabei */public class Map { private final int width; private final int height; private final int pixelWidth; private final int pixelHeight; private final int snakeNum; private final boolean canCollide; private final int maxFruitNum; private final int victoryFruitNum; private Snake[] currentSnake; private int fruitNum; private int aliveSnakeNum; private int[][] currentMap; private Fruit[] fruit; /** Creates a new instance of Map */ public Map(int maxFruitNum, int victoryFruitNum, int pixelWidth, int pixelHeight, int width, int height, int snakeNum, Snake[] snake, boolean canCollide) { this.pixelWidth = pixelWidth; this.pixelHeight = pixelHeight; this.width = width; this.height = height; this.currentMap = new int[height][width]; this.snakeNum = snakeNum; aliveSnakeNum = snakeNum; this.currentSnake = snake; this.canCollide = canCollide; this.maxFruitNum = maxFruitNum; this.victoryFruitNum = victoryFruitNum; fruit = new Fruit[maxFruitNum]; } public int getPixelWidth() { return pixelWidth; } public int getPixelHeight() { return pixelHeight; } public boolean decressSnake() { if (aliveSnakeNum > 0) { aliveSnakeNum --; } return aliveSnakeNum > 0; } public boolean canCollide() { return canCollide; } public boolean isOver() { boolean isOver = false; for (int i = 0; i < getSnakeNum(); i ++) if (currentSnake[i].getEatedFruitNum() >= victoryFruitNum) { isOver = true; break; } return (aliveSnakeNum <= 1 || isOver); } private int key2Direction(int keyState) { if ((keyState & GamingCanvas.LEFT_PRESSED) != 0) { //System.out.println("Left!"); return Snake.DIRECTION_LEFT; } else if ((keyState & GamingCanvas.RIGHT_PRESSED) != 0) { //System.out.println("Right!"); return Snake.DIRECTION_RIGHT; } else if ((keyState & GamingCanvas.UP_PRESSED) != 0) { //System.out.println("Up!"); return Snake.DIRECTION_UP; } else if ((keyState & GamingCanvas.DOWN_PRESSED) != 0) { //System.out.println("Down!"); return Snake.DIRECTION_DOWN; } return Snake.DIRECTION_NOCHANGE; } public void deleteFruit(int k) { for (int i = k; i < fruitNum - 1; i ++) { fruit[i] = fruit[i + 1]; } fruitNum --; } public int update(int keyState) { if (fruitNum < maxFruitNum) { fruit[fruitNum] = Fruit.getRandomFruit(this); fruitNum ++; } for (int i = 0; i < snakeNum; i ++) if (currentSnake[i].isAlive()) { if (currentSnake[i].getControl() == Snake.CONTROL_KEYBOARD) { currentSnake[i].setDirection(key2Direction(keyState)); } else { currentSnake[i].setDirection(Ai.getDirection(this, i)); } } int state = 0; for (int i = 0; i < snakeNum; i ++) if (currentSnake[i].isAlive()) { state = Snake.update(this, i, canCollide); } return state; } public int getWidth() { return width; } public int getHeight() { return height; } public int getSnakeNum() { return snakeNum; } public Snake getCurSnake(int i) { if (i >= 0 && i < snakeNum) { return currentSnake[i]; } return null; } public int getFruitNum() { return fruitNum; } public boolean inBound(Point p) { return (p.getX()>= 0 && p.getX() < width && p.getY() >= 0 && p.getY() < height ); } public Fruit getFruit(int i) { if (i >= 0 && i < fruitNum) { return fruit[i]; } return null; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -