我正在寫一個可以採用控制檯參數來決定使用哪種策略的不相關代碼(不同的AI類)。如果用戶選擇'ultimatecomputerplayer',那麼這個實現爲p1/p2,具體取決於他們輸入的順序和其他策略(可能是'humanplayer'等) 我的問題是終極類需要知道它是哪個符號,目前遊戲運行類只是將p1分配給X,將p2分配給O,但是我的終極類是假設它是X,所以這會帶來問題。如何在兩個類之間傳輸局部變量?
這是分配策略和符號的代碼:
NCGridV3 theGrid = new NCGridV3(gridSize, gridSize);
GameRunnerV3 theGame = new GameRunnerV3();
Scanner sc = new Scanner(System.in);
ArrayList <NCPlayer> ret = new ArrayList <NCPlayer>();
for (int i = 1; i < args.length; i++)
{
switch (args[i])
{
case "RandomComputerPlayer":
ret.add(new RandomComputerPlayer());
break;
case "SimpleComputerPlayer":
ret.add(new SimpleComputerPlayer());
break;
case "UltimateComputerPlayer":
ret.add(new UltimateComputerPlayer());
break;
case "HumanPlayer":
ret.add(new HumanPlayer(sc, theGame));
break;
}
}
NCPlayer p1 = ret.get(0);
NCPlayer p2 = ret.get(1);
p1.setMySymbol(SquareStatus.CROSS);
p2.setMySymbol(SquareStatus.NOUGHT);
我試圖分配策略的符號,像這樣:
public class UltimateComputerPlayer extends GenericPlayer implements NCPlayer
{
public UltimateComputerPlayer()
{
super();
}
@Override
public GridCoordinate getNextMove(NCGridV3 currentGrid)
{
SquareStatus symbol = GenericPlayer.getMySymbol();
但是Eclipse告訴我,我不能讓一個靜態引用一種非靜態方法。
另一種選擇我試圖路過的整數到UltimateComputer類這將是「i」的從在遊戲轉輪類的環,然後將具有符號分配依賴於哪個地方的類被稱爲像這樣:
public UltimateComputerPlayer()
{
super();
SquareStatus mysymbol;
if (NC == 1)
mysymbol = NCGridV3.SquareStatus.CROSS;
if (NC == 2)
mysymbol = NCGridV3.SquareStatus.NOUGHT;
}
@Override
public GridCoordinate getNextMove(NCGridV3 currentGrid)
{
.......
但是這個變量沒有在GridCoordinate類中分配,我不知道如何製作它。
任何幫助,非常感謝,謝謝。
嘗試'getMySymbol()',而不是'GenericPlayer.getMySymbol()':) –
AAAAH非常感謝你不敢相信我沒有嘗試過 – liamw