2

私は優れたプログラマーではないので、誰かが私を助けてくれるかどうか疑問に思っていました. 私の戦艦ゲームでは、Rect クラスから作成された船がありますが、それらが重複しているかどうかを確認する必要があります。これは私がこれまでに持っているものです。

編集: 正確に何が間違っているか: サイズ 2 と 5 の 2 つの船があります。つまり、船 1 の座標が (0,0)(0,1) で、船 2 の座標が (0,1) から (5,1) であるとします。ポイント(0,1)で船1の両方の座標をチェックするのに最適ですが、それだけです。これが理にかなっていることを願っています。したがって、(1,1) で (0,0) と (0,1) をチェックすると、エラーは表示されません

   public boolean contains(Ship ship) {
    int currentX = ship.getX();
    int currentY = ship.getY();
    int testX = xCoord;
    int testY = yCoord;

    if (rotated) {      //if ship is horizontal enter
        for (int j = 0; j < sizeOfShip; j++) {
            for (int k = 0; k < ship.getSize(); k++) {
                if (testX == currentX && testY == currentY) {
                    return false;
                }
                testX++;
            }
            if (ship.rotated)
                currentX++;
            else {
                currentY++;
            }
        }
    }
    //
    if (!rotated) {
        for (int j = 0; j < sizeOfShip; j++) {
            for (int k = 0; k < ship.getSize(); k++) {
                if (testX == currentX && testY == currentY) {
                    return false;
                }
                testY++;
            }
            if (ship.rotated)
                currentX++;
            else {
                currentY++;
            }           }
    }
    return true;

}
4

2 に答える 2

3

問題は、たとえば船 (0,1)(5,1) の場合、すべての値 (0,1)(1,1)(2,1)(3,1)(4,1) をチェックする必要があることです。 (5,1) すべての他の船の同様の値に対して (0,0)(0,1) (小さい船なのでこれ以上はありません)。

これを行うには、for ループを変更する必要があります。これらの currentX/currentY 値を出力して、これが実行されていることを確認することをお勧めします。特に、反復ごとに currentX/Y をインクリメントするのではなく、1 つの for ループで currentX を、もう 1 つの for ループで currentY を増やしたいとは思いません。

乾杯。

于 2013-04-07T00:33:04.230 に答える