我开始在java中创建战舰游戏。我有5艘船长5,4,3,3,2和一个阵列int gameBoard[][] = new int[10][10];
我放船。我还创建了一个数组boolean BoardHits[][]= new boolean[10][10];
,我检查了播放器的命中。
现在我想创建一个方法boolean getBoardStrike(int[] hit)
,它将一个位置作为参数,并在BoardHits数组中添加一个命中,如果这个位置没有被再次命中。如果我们击中一艘船,我们必须检查所有船位是否都被击中(船沉没)。有没有有效的方法来实现这个?
(当我把一艘船放在数组游戏中时,我把船上的ID,所以如果我在船上有一个长度为5的船,我有5个单元格,数字为5)。
public boolean getBoardStrike(int[] hit) {
boolean flag = true;
if (boardHits[hit[0]][hit[1]] = false) {
hits[hit[0]][hit[1]] = true;
//check if the whole ship is hitted
return true;
}
else {
return false;
}
}
答案 0 :(得分:0)
我会尝试更多面向对象的方法,因为Java是面向对象的语言:
public interface Battleship {
public void hit(Point shot);
public List<Point> getCoordinates();
public boolean isSinked();
}
public class BattleshipPart {
private boolean hit;
private Point coordinate;
// getters and setters
}
public abstract class AbstractBattleship implements Battleship {
// these are for direction in constructors
public static int NORTH = 1;
public static int EAST = 2;
public static int SOUTH = 3;
public static int WEST = 4;
protected List<BattleshipPart> parts;
public void hit(Point shot) {
return parts.stream()
.findFirst(part -> part.coordinate.equals(shot))
.ifPresent(part -> part.setHit(true));
}
public List<Point> getCoordinates() {
return parts.stream()
.map(part -> part.getCoordinate())
.collect(Collectors.toList());
}
public boolean isSinked() {
return parts.stream()
.allMatch(BattleshipPart::isHit);
}
}
public final class SmallBattleship extends AbstractBattleship {
public SmallBattleship(Point start, int direction) {
// create parts or throw exception if parameters weren't valid
}
}
仅通过扩展AbstractBattleship
并在构造函数中创建新零件来创建新船类型。