2016-10-17 4 views
0

첫 번째 게시물 및 noob 프로그래머, 그러니 나와 함께 맨발로. 현재 C++에서 "Wa-Tor Simulation"과제를 수행하고 있습니다. 아직도 코스의 초기 단계는 과제의 그래픽 부분이 아니라 오히려 물고기와 상어의 움직임과 기능이었습니다. Wa-Tor 시뮬레이션을 모른다면 제 질문에 중요하지 않다고 생각합니다. 내가 달성하기 위해 노력하고있어중첩 된 if 문, 옵션을 제거하는 동안

은 다음과 같습니다

내가 빈, 생선, 상어 구성된 두 개의 차원 배열을 가지고있다.

상어가 위, 아래, 왼쪽 또는 오른쪽으로 무작위로 이동합니다. 상어가 가장 먼 왼쪽 지점에있을 때 배열의 왼쪽으로 이동하면, 그것은 오른쪽 (위, 아래, 오른쪽뿐만 아니라)에 나타날 것입니다. 상어가 물고기가없는 위치로 이동하면 그 위치를 따라 잡을 것이지만 만약 다른 상어를 만나면 다른 곳으로 이동하려고 시도 할 것입니다.

상어가 다른 상어에 둘러싸여 있으면 움직이지 않습니다.

내가 지금까지 해왔 던 것은, for 루프를 실행하는 동안 상어가 두 번 움직이지 않도록 상어를 움직일 임시 배열을 만드는 것입니다.

for (int i = 0; i < MAX_X; i++) { 
    for (int j = 0; j < MAX_Y; j++) { 

     if (myOcean[i][j] == SHARK) { 
      int randNum = (rand() % 4 + 1); 

      switch (randNum) { 
      case 1: 
//This is where I don't know how to properly code to make my function work, so bare with me while I make fake code.. 
//if(myOcean[i+1][j] == SHARK){ GO BACK AND FIND A NEW RANDOM NUMBER, BUT THIS TIME REMOVE CASE 1. THUS NOT ALLOWING AN ATTEMPT TO MOVE [i+1] 
       if ((i + 1) == MAX_X) { tempArray[0][j] = SHARK; } 
       else { tempArray[i + 1][j] = SHARK; } 
       tempArray[i][j] = EMPTY; 
       break; 
      case 2: 
// Same as above. Remove Case 2 if it doesnt work. 
       if ((i - 1) < 0) { tempArray[MAX_X - 1][j] = SHARK; } 
       else { tempArray[i - 1][j] = SHARK; } 
       tempArray[i][j] = EMPTY; 
       break; 

      case 3: 
// Same as above. Remove Case 3 if it doesnt work. 
       if ((j + 1) == MAX_Y) { tempArray[i][0] = SHARK; } 
       else { tempArray[i][j + 1] = SHARK; } 
       tempArray[i][j] = EMPTY; 
       break; 
      case 4: 
// Same as above. Remove Case 4 if it doesnt work. 
       if ((j - 1) < 0) { tempArray[i][MAX_Y - 1] = SHARK; } 
       else { tempArray[i][j - 1] = SHARK; } 
       tempArray[i][j] = EMPTY; 
       break; 
      default: 
    // No cases worked, thus the shark remains still. 
       tempArray[i][j] = myOcean[i][j]; 

      } 
     } 
    } 
} 

이 때문에 내 문제를 종료 : 같은

따라서 내 코드 보인다. 나는 돌아가서 특정한 사건을 제거하는 법을 모릅니다. 필자는 아직 코딩 문제가 너무 많아서 문제를 충분히 설명했으면합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

이와 같이 코드를 디자인하십시오. 삭제할 사례를 추적하는 별도의 remove_me 변수가 있어야합니다. 또 다른 유용한 가치를 찾을 때까지 무작위 값을 계속 생성하십시오. 그런 다음 remove_me 변수를 null로 설정하십시오. 다시 이러한 사례를 발견하면이 변수를 사례 번호로 지정하십시오. 또한 루프의 다음 반복에서 동일한 실행을 가지려면 j를 1 씩 줄여야합니다. 코드는 첫 번째 경우에 대해 다음과 같습니다, 같은 논리를 사용하여 설계 할 수 있습니다 휴식 :

int remove_me = 0 
for (int i = 0; i < MAX_X; i++) { 
    for (int j = 0; j < MAX_Y; j++) { 

     if (myOcean[i][j] == SHARK) { 
      int randNum = (rand() % 4 + 1); 
      while (randNum == remove_me) 
       randNum = (rand() % 4 + 1); 
      remove_me = 0 
      switch (randNum) { 
       case 1: 
        if(myOcean[i+1][j] == SHARK){ 
         remove_me = 1; 
         j--; 
        } 
        if ((i + 1) == MAX_X){ 
         tempArray[0][j] = SHARK; 
        } 
        else{ 
         tempArray[i + 1][j] = SHARK; 
        } 
        tempArray[i][j] = EMPTY; 
        break; 

추신 : 코드의 들여 쓰기를 고려 마십시오.