つまり、基本的には、AP Comp Sci クラスで現在行っている GridWorld プロジェクトがあります。パックマンやってます。act メソッドのコードは次のとおりです (GridWorld に慣れていない方のために説明すると、act メソッドは、アクターが新しい動きをするたびに呼び出されます)。
public void act()
{
Location loc = getLocation();
if(direction==null) {
}
else if(direction.equals("NORTH")) {
Location next = loc.getAdjacentLocation(loc.NORTH);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(next);
direction = "NORTH";
}
}
else if(direction.equals("SOUTH")) {
Location next = loc.getAdjacentLocation(loc.SOUTH);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(getLocation().getAdjacentLocation(getLocation().SOUTH));
direction = "SOUTH";
}
}
else if(direction.equals("EAST")) {
Location next = loc.getAdjacentLocation(loc.EAST);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(getLocation().getAdjacentLocation(getLocation().EAST));
direction = "EAST";
}
else if(getLocation().getCol()==20 && getLocation().getRow()==9) {
moveTo(new Location(9,0));
direction = "EAST";
}
}
else if(direction.equals("WEST")) {
Location next = loc.getAdjacentLocation(loc.WEST);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
moveTo(getLocation().getAdjacentLocation(getLocation().WEST));
direction = "WEST";
}
else if(getLocation().getCol()==0 && getLocation().getRow()==9) {
moveTo(new Location(9,20));
direction = "WEST";
}
}
}
最後の 2 つの if ステートメントの奇妙な言い回しの理由は bc です。パックマンが実際のゲームでテレポートできるようにしたいのです。ゲームを実行すると、約 90% の時間で動作しますが、残りの 10% では IllegalArgumentException bc が発生し、ボード上にない場所に移動しようとしていることが示されます (例: (9,-1 ) および (9,21))。どうすれば捕まえたり投げたりできるか、またはこれを防ぐために必要なことは何でも知りたい. 私はキャッチやスローを使ったことがないので、あなたの理由を説明してみてください。