2

私が作成しようとしているヘビのゲームのソースコードのいくつかを添付してください。

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が表示される場合は常に、それらが次のクラスに存在するにもかかわらず、変数に解決できないことを示しています。

パッケージスネーク;

public class GameBoard {
  public static final int TILE_SIZE = 25;
  public static final int MAP_SIZE = 20;
}

同じパッケージ内にあるため、コンパイラーが簡単に見つけることができます。

4

1 に答える 1

7

ここにセミコロンが必要です:

SNAKE(Color.GREEN),
FRUIT(Color.RED),
EMPTY(null); <--

これはenums、単なる定数定義以上のものを含むために必要です。ドキュメントから

フィールドとメソッドがある場合、列挙型定数のリストはセミコロンで終わる必要があります。


MAP_SIZE別のクラスに存在するため、TILE_SIZE解決できませんGameBoard。2つのオプションがあります:

  • 修飾名を使用します。つまり、GameBoard.MAP_SIZEGameBoard.TILE_SIZE

また

  • インターフェイスを実装できるようにenums:インターフェイスを作成GameBoardし、インターフェイス実装します。その後、変数はメンバー変数になります。
于 2013-03-05T21:18:06.653 に答える