2012-10-29 2 views
0

나는 게임을하고 있는데, 나는 물건을 최적화하려고 노력하고있어. 나는 다음과 같은 코드를 단축하기 위해 루프를 만든에게 :내 코드가 이전에 작성한 방식과 다르게 동작하는 이유는 무엇입니까?

// 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; 
      } 
     } 
    } 

뭔가 내가하려고 할 때 때문에 코드를 redid 때 분명히 이상 번역하지 않았다 테스트중인 게임 충돌로 전환하면 작동이 멈 춥니 다. 내 인생은 잘못 될 수있는 것을 볼 수 없습니까, 어떤 생각입니까?

+0

을 * 그냥 (!) 참고로 : * 방법에 10 개 매개 변수를 전달하는 것이하지 않는 것 좋은 연습이 될 수 있습니다. [Value Object] (http://en.wikipedia.org/wiki/Value_object) 클래스를 만들고 그 인스턴스를 전달하는 것이 좋습니다. – Sujay

+0

고마워, 나는 실제로 그 매개 변수의 대부분을 제거하고 제거하려고했는데, 나는 처음 두 개와 x와 y 만 필요로했다. – user1048723

+0

그런 다음 수정 사항을 적용하고 변경 사항의 작동 여부를 확인한 다음 다시 돌아와 질문을하십시오 (* 문제가 발생할 경우를 대비하여 *). 이렇게하면 막연한 질문보다는 구체적인 질문을하는 데 도움이됩니다. – Sujay

답변

0
  1. 사용 & &의 논리를하지 비트 단위 & 연산자.

  2. 당신은 변경하지 않는

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

    pbGoodList[i] = true; 
    

    고려 pb1Good, pb2Good, pb3Good, 또는 pb4Good 당신이 표시된 원래의 코드에하던 것처럼. 이러한 값으로 배열 pbGoodList을 초기화하는 동안 pbGoodList은 해당 값의 고유 한 인스턴스를 고유하게 유지합니다.

    당신은 루프 후, 개인 부울 변수로 배열의 출력 값을 복사 할 수 있습니다 :

    pb1Good = pbGoodList[0]; 
    ... 
    
+0

굉장합니다, 고마워요. && vs &에서 코드를 최적화해야합니다. – user1048723

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))) 
+0

게임 동작이 바뀌어도 여전히 문제는 아니지만 &와 &&의 차이점을 명심하십시오. 매우 감사합니다. – user1048723

관련 문제