0

Javaでチェスプログラムをコーディングしようとしていますが、 getColor() メソッドに問題があります。Gridworld のコードの一部に依存しています。各作品のクラスを作成しました。移動時に選択可能な場所の ArrayList を作成するメソッドがあるという意味で、作品を Gridworld のクリッターのように機能させたいと考えています。これは私が問題にぶつかったところです。getColor() メソッドを作成しようとしましたが、何らかの理由で機能しません。私は先生に助けを求めましたが、彼は私と同じように戸惑いました。デバッグしてみましたが、問題はありません。私が得る正確なエラーはこれです:

「シンボルが見つかりません - メソッド getColor()」

ここにすべてのコードがあります。記録のために BlueJ を使用しています。

import java.util.ArrayList;
import java.awt.Color;

public interface Piece
{
    public enum PieceType {pawn, rook, knight, bishop, queen, king}
}

次は ChessPiece 抽象クラスです。ただし、selectMoveLocation メソッドにはまだ取り組んでいません。

import java.util.ArrayList;
import java.awt.Color;
import info.gridworld.grid.Location;
import info.gridworld.grid.BoundedGrid;

public abstract class ChessPiece implements Piece
{
    Color colorOfPiece;
    PieceType typeOfPiece;
    public BoundedGrid<Object> board;
    public Location location;
    public ArrayList moveLocations;

    public ChessPiece( Color whiteOrBlack, PieceType selectedType)
    {
        if (whiteOrBlack == Color.BLACK || whiteOrBlack == Color.WHITE)
        {
            if ((selectedType == PieceType.pawn || selectedType == PieceType.rook || selectedType == PieceType.knight || selectedType == PieceType.bishop ||selectedType == PieceType.queen || selectedType == PieceType.king))
            {
                colorOfPiece = whiteOrBlack;
                typeOfPiece = selectedType;
                location = null;
            }
        }
    }

    public Color getColor()
    {
        return colorOfPiece;
    }

    public void makeMove(Location newLocation)
    {
        if (board == null)
            throw new IllegalStateException("This actor is not in a board.");
        if (board.get(location) != this)
            throw new IllegalStateException(
                "The board contains a different actor at location "
                + location + ".");
        if (!board.isValid(newLocation))
            throw new IllegalArgumentException("Location " + newLocation
                + " is not valid.");

        if (newLocation.equals(location))
            return;
        board.remove(location);
        location = newLocation;
        board.put(location, this);
    }

    public Location getLocation()
    {
        return location;
    }

    public BoundedGrid<Object> getBoard()
    {
        return board;
    }

    public Location selectMoveLocation(ArrayList<Location> moveLocations)
    {
        Location selection;
        selection = null;
        //mouse stuff
        return selection;
    }

}

そして最後に、コンパイラ エラーを引き起こすコードです。これは、King ピースの単なるコードですが、実装しようとしたすべてのピースでエラーが発生します。

import java.awt.Color;
import java.util.ArrayList;
import info.gridworld.grid.Location;
import info.gridworld.grid.BoundedGrid;

//must fix problem with getColor()
public class King extends ChessPiece
{
    ArrayList<Location> moveLocations;
   // private Color colorOfPiece;

    public King( Color whiteOrBlack )
    {
        super(whiteOrBlack, PieceType.king);
        //colorOfPiece = whiteOrBlack;
    }

    public void getMoveLocations()
    {
        moveLocations.clear();
        for (int i = 0; i < 360; i += 45)
        {
            if ((getBoard().isValid(getLocation().getAdjacentLocation(i))) && (((getBoard().get(getLocation().getAdjacentLocation(i))) == null) || (((getBoard().get(getLocation().getAdjacentLocation(i)))).getColor() == colorOfPiece)))
            {
                moveLocations.add(getLocation().getAdjacentLocation(i));
            }
        }
    }
}
4

1 に答える 1

1

getBoard().get(..) は、オンラインで見つけたドキュメントに従ってテンプレート タイプ E を返します。あなたの場合、E はオブジェクト タイプです (ChessPiece のボード データ メンバーはオブジェクトのコレクションであるため)。オブジェクトには getColor がありません。 () 方法。(((getBoard().get(getLocation().getAdjacentLocation(i)))) を getColor メソッドを持つクラスにキャストする必要があります (または、ボードを ChessPieces のコレクションに変更することもできます)。

于 2014-05-31T23:17:25.557 に答える