请参阅我正在尝试创建的蛇游戏的一些源代码:
package Snake;
import java.awt.*;
import Snake.GameBoard.*;
public enum TileType {
SNAKE(Color.GREEN),
FRUIT(Color.RED),
EMPTY(null),
private Color tileColor;
private TileType(Color color) {
this.tileColor = color;
}
// @ return
public Color getColor() {
return tileColor;
}
private TileType[] tiles;
public void GameBoard() {
tiles = new TileType[MAP_SIZE * MAP_SIZE];
resetBoard();
}
// Reset all of the tiles to EMPTY.
public void resetBoard() {
for(int i = 0; i < tiles.length; i++) {
tiles[i] = TileType.EMPTY;
}
}
// @ param x The x coordinate of the tile.
// @ param y The y coordinate of the tile.
// @ return The type of tile.
public TileType getTile(int x, int y) {
return tiles[y * MAP_SIZE + x];
}
/**
* Draws the game board.
* @param g The graphics object to draw to.
*/
public void draw(Graphics2D g) {
//Set the color of the tile to the snake color.
g.setColor(TileType.SNAKE.getColor());
//Loop through all of the tiles.
for(int i = 0; i < MAP_SIZE * MAP_SIZE; i++) {
//Calculate the x and y coordinates of the tile.
int x = i % MAP_SIZE;
int y = i / MAP_SIZE;
//If the tile is empty, so there is no need to render it.
if(tiles[i].equals(TileType.EMPTY)) {
continue;
}
//If the tile is fruit, we set the color to red before rendering it.
if(tiles[i].equals(TileType.FRUIT)) {
g.setColor(TileType.FRUIT.getColor());
g.fillOval(x * TILE_SIZE + 4, y * TILE_SIZE + 4, TILE_SIZE - 8, TILE_SIZE - 8);
g.setColor(TileType.SNAKE.getColor());
} else {
g.fillRect(x * TILE_SIZE + 1, y * TILE_SIZE + 1, TILE_SIZE - 2, TILE_SIZE - 2);
}
}
}
}
很多这样的工作正常。然而,在它说'private Color tileColor;'时,我得到'我得到'令牌tileColor上的'语法错误',请删除令牌'但是当我删除它时它会导致我的IDE上更多的红色(我是使用Eclipse)。
此外,每当出现MAP_SIZE和TILE_SIZE时,它表示无法将它们解析为变量,尽管它们存在于以下类中:
包Snake;
public class GameBoard {
public static final int TILE_SIZE = 25;
public static final int MAP_SIZE = 20;
}
在同一个包中,因此编译器应该很容易找到。
答案 0 :(得分:7)
你需要一个分号:
SNAKE(Color.GREEN),
FRUIT(Color.RED),
EMPTY(null); <--
enums
包含的不仅仅是常量定义。来自docs
当有字段和方法时,枚举常量列表必须以分号结尾。
MAP_SIZE
和TILE_SIZE
无法解析,因为它们存在于其他类GameBoard
中。以下是两个选项:
GameBoard.MAP_SIZE
&amp; GameBoard.TILE_SIZE
或
enums
可以实现接口:使GameBoard
成为接口并实现接口。然后变量将成为成员变量。