0

私はゲームに取り組んでおり、物事を最適化しようとしています。次のコードを短縮するために for ループを作成しました。

   // if near pb1

   if (pbMoveCheck_playerNearpb(pb1, pb2, b1, b2, b3, b4, m, p, x, y)
                & pbMoveCheck_doublepb(pb1, pb2, x, y)) {
            pb1Good = true;
            pGood = true;
        }

    // if near pb1
    if (pbMoveCheck_playerNearpb(pb1, pb3, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb1, pb3, x, y)) {
        pb1Good = true;
        pGood = true;
    }

    // if near pb1
    if (pbMoveCheck_playerNearpb(pb1, pb4, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb1, pb4, x, y)) {
        pb1Good = true;
        pGood = true;
    }

    // if near pb2
    if (pbMoveCheck_playerNearpb(pb2, pb1, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb2, pb1, x, y)) {
        pb2Good = true;
        pGood = true;
    }

    // if near pb2
    if (pbMoveCheck_playerNearpb(pb2, pb3, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb2, pb3, x, y)) {
        pb2Good = true;
        pGood = true;
    }

    // if near pb2
    if (pbMoveCheck_playerNearpb(pb2, pb4, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb2, pb4, x, y)) {
        pb2Good = true;
        pGood = true;
    }

    // if near pb3
    if (pbMoveCheck_playerNearpb(pb3, pb1, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb3, pb1, x, y)) {
        pb3Good = true;
        pGood = true;
    }

    // if near pb3
    if (pbMoveCheck_playerNearpb(pb3, pb2, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb3, pb2, x, y)) {
        pb3Good = true;
        pGood = true;
    }

    // if near pb3
    if (pbMoveCheck_playerNearpb(pb3, pb4, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb3, pb4, x, y)) {
        pb3Good = true;
        pGood = true;
    }

    // if near pb4
    if (pbMoveCheck_playerNearpb(pb4, pb1, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb4, pb1, x, y)) {
        pb4Good = true;
        pGood = true;
    }

    // if near pb4
    if (pbMoveCheck_playerNearpb(pb4, pb2, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb4, pb2, x, y)) {
        pb4Good = true;
        pGood = true;
    }

    // if near pb4
    if (pbMoveCheck_playerNearpb(pb4, pb3, b1, b2, b3, b4, m, p, x, y)
            & pbMoveCheck_doublepb(pb4, pb3, x, y)) {
        pb4Good = true;
        pGood = true;
    }

だから私はこれにそれを切り刻んだ:

    // Make lists of stuff
    pushBlock1[] listPushBlocksA = { pb1, pb2, pb3, pb4 };
    boolean[] pbGoodList = { pb1Good, pb2Good, pb3Good, pb4Good };


    // if near pb loop
    for (int i = 0; i < listPushBlocksA.length; i++) {
        for (int j = 0; j < listPushBlocksA.length; j++) {
            if (i != j & pbMoveCheck_playerNearpb(listPushBlocksA[i],
                    listPushBlocksA[j], b1, b2, b3, b4, m, p, x, y)
                    & pbMoveCheck_doublepb(listPushBlocksA[i],
                            listPushBlocksA[j], x, y)) {
                pbGoodList[i] = true;
                pGood = true;
            }
        }
    }

コードを書き直したときに何かが明らかに変換されませんでした。これは、これがテストしているゲームの衝突でそれを切り替えようとすると機能しなくなるためです。私の人生では、何が間違っている可能性があるのか​​ わかりませんか、何かアイデアはありますか?

4

2 に答える 2

0

演算子を使用して&います, に変更します&&

あなたのif状態は次のようになります。

if ((i != j) && (pbMoveCheck_playerNearpb(listPushBlocksA[i],
                listPushBlocksA[j], b1, b2, b3, b4, m, p, x, y)
                & pbMoveCheck_doublepb(listPushBlocksA[i],
                        listPushBlocksA[j], x, y))) 
于 2012-10-29T05:33:38.567 に答える
0
  1. ビットごとの & 演算子ではなく、論理 && を使用します。

  2. 検討

    boolean[] pbGoodList = { pb1Good, pb2Good, pb3Good, pb4Good }
    

    pbGoodList[i] = true;
    

    、、、、または表示されている元のコードで行っていたように変更pb1Goodしていません。これらの値で配列を初期化する間、それらの値の一意に異なるインスタンスを保持します。pb2Goodpb3Goodpb4GoodpbGoodListpbGoodList

    ループの後、値を配列から個々のブール変数にコピーできます。

    pb1Good = pbGoodList[0];
    ...
    
于 2012-10-29T05:40:56.057 に答える