我正在构建一个经典项目,是时候在此游戏中实现AI播放器了。因此,我的想法是创建一个名为NimAIPlayer
的类和另一个名为NimHumanPlayer
的类。它们都继承了抽象类NimPlayer
。
AI播放器正在自动播放,我在NimPlayer
中定义了一种称为moveStone()
的抽象方法。我为NimHumanPlayer
和NimAIPlayer
类定义了不同的方法来覆盖。
如果玩家是人类,则输入来自用户;另一方面,如果玩家是AI,则它会根据某些规则自动生成一个随机整数。
我尝试过的是,但是它不起作用:
if (player1 instanceof NimHumanPlayer) {
player1.moveStone();
} else {
player1.moveStone();
感谢您的帮助!我看了很多教程,似乎有一种方法可以选择要覆盖的子类。
这是我的NimPlayer
课程的一部分:
import java.io.Serializable;
abstract class NimPlayer extends Nimsys implements Serializable {
private String userName;
private String familyName;
private String givenName;
private int gamesPlayed;
private int gamesWon;
public NimPlayer(String userName, String familyName, String givenName) {
this.userName = userName;
this.familyName = familyName;
this.givenName = givenName;
this.gamesPlayed = 0;
this.gamesWon = 0;
}
public abstract int moveStone();
}
//getters and setters
}
我的NimHumanPlayer
的一部分:
public class NimHumanPlayer extends NimPlayer{
public NimHumanPlayer(String userName, String familyName, String givenName) {
super(userName, familyName, givenName);
}
public int moveStone() {
int stoneTaken = in.nextInt(); // in is the scanner inherited from super class
return stoneTaken;
}
}
我的NimAIPlayer
的一部分:
public class NimAIPlayer extends NimPlayer {
private NimGame nimGame = new NimGame(); // create a obj to call the field
public NimAIPlayer(String userName, String familyName, String givenName) {
super(userName, familyName, givenName);
}
public int moveStone(int upperBound, int stoneBalance) {
stoneBalance = nimGame.stoneBalance; // for calculation
upperBound = nimGame.upperBound; // for calculation
int stoneTaken = ThreadLocalRandom.current().nextInt(1, upperBound +1 );
if (stoneTaken > stoneBalance) {
stoneTaken = ThreadLocalRandom.current().nextInt(1, stoneBalance +1 );
}
return stoneTaken;
}
NimGame
字段的一部分以供参考:
public class NimGame extends Nimsys {
NimPlayer player1;
NimPlayer player2;
String initialStoneInput;
String dataRemoval;
int stars;
int stoneBalance;
int initialStone;
int upperBound;
public NimGame() {
}
public NimGame(NimModel nimModel, String initialStoneInput, String dataRemoval, NimPlayer player1, NimPlayer player2) {
this.initialStoneInput = initialStoneInput;
this.dataRemoval = dataRemoval;
this.player1 = player1;
this.player2 = player2;
}