2017-04-03 6 views
2

그래서 저는 게임을 만들고 있고 OR을 AND로 변경하여 문제를 해결할 수있었습니다. 확실하지 않습니다. 나는 논리적 인 것과는 반대로 작동하는 이유를 이해한다. 나는 전에 거기에 있었다.왜 while 루프는 AND와 반대로 작동합니까?

//while user doesn't press quit, hasn't crashed into a bomb or hasn't saved all bears the game continues 
while (((!wantsToQuit(key)) && (hasLost == false)) && (bearsSaved !=3)) 
{ 
    if (isArrowKey(key)) 
    { 
     updateGameData(grid, bears, bombs, detonator, exit, key, message, bearsSaved, bombsActive, moves, hasLost); //move bear in that direction 
     updateGrid(grid, maze, bears, bombs, detonator, exit); //update grid information 
    } 
    else if (toupper(key) == CHEAT) //pressing c enables cheat mode; disables bombs and sets the users moves to 500 
    { 
     cheatMode(message, moves, cheatActive, bombsActive); 
    } 
    else 
     message = "INVALID KEY!"; //set 'Invalid key' message 
    paintGame(grid, message, bearsSaved, moves); //display game info, modified grid & messages 
    key = getKeyPress();   //display menu & read in next option 
} 
endProgram();      //display final message 
return(0); 

기본적인 아이디어는 사용자가 미로를 통과하고 폭탄을 피함으로써 3 마리의 곰을 구해야한다는 것입니다.

  • 폭탄에 걸리면 hasLost가 true로 설정되어 endProgram이 실행됩니다.
  • Q 키를 누르면 while 루프가 더 이상 true가 아니며 endProgram이 실행됩니다.
  • 그러나 모든 곰이 저장되면 게임도 종료됩니다.

    플레이어는 종료하지 않고 플레이어가 손실되지 가지고 있으며, 플레이어는 3 곰을 저장하지 않은 :이 while 루프는 동안 작동하는 이유

는 내가 이해하지 못하는 것은. 반대로

는 :

플레이어는 종료하지 않고 플레이어가 손실되지 않았거나 플레이어가 3 곰 저장되지 않았습니다.

내게있어 후자는 논리적으로 말하면 더 의미가 있습니다. 게임을 종료하고 싶지 않고 잃어 버리지 않고 게임을 계속하거나, 곰을 모두 저장하지 않았다고 기대하기 때문입니다.

플레이어가 종료하고 싶지 않은 설명

+1

"게임을 잃지 않았거나 곰을 저장하지 않은 경우 게임이 계속 실행 중입니다"라고 상상해보십시오. 그런 다음 그들이 곰들을 구한다고 가정 해보십시오. 이것은 게임이 계속 실행된다는 것을 의미합니다. "또는"은 어느 하나 또는 다른 하나 또는 둘 다를 의미한다. 곰을 구한 후에도 잃어 버리지 않았다는 것은 여전히 ​​사실입니다. 그래서 게임은 계속됩니다. –

+0

@A Busy Programmer @ M.M – casperf1

답변

1

에 감사 드리며, 귀하의 동안 루프를 플레이어가 손실되지 않았거나 플레이어가 3 곰

이 시나리오에서는

를 저장하지 않은

while (((!wantsToQuit(key)) && (hasLost == false)) || (bearsSaved !=3)) 

가의 플레이어가 하지를 손실이 있다고 가정하자, 그는 D : 같은 조건이 보일 것이다 oes 아니요 게임을 종료하고 싶습니다. 이제 플레이어가 3 마리의 곰을 구한다면 bearsSaved !=3 조건이 위조됩니다. 그러나 ||, 두 번째 진술이 위조 된 경우에도 첫 번째 진술은 여전히 ​​이므로 게임은 계속됩니다. 당신이 원하기 때문에이, 당신의 논리에 반하는 모든 곰이 다음 저장하는 경우

그러나 이 게임은 또한을 종료합니다. || 문으로

, 당신은 루프가 종료하기 위해서는 (내가 처음이 하나의 중요한 하나의 조건을 괄호 소요) 두 조건을 위조해야합니다.

그래서 지금 당장 사용하는 논리가 합리적입니다. 사용자가이기 자마자 AND 조건이 위조되고 AND 조건이 위조되면 즉시 루프가 종료됩니다.

+1

@A Busy Programmer에게 감사의 말을 전하면서 ​​감사합니다. 논리 게이트 나 0 또는 1로 볼 때 논리가이를 보면서 완벽하게 이해할 수 있습니다.이 경우 더 잘 이해할 수 있습니다. 고맙습니다 – casperf1