Truth, Branching, and the Game Loop : Guess My Number
1장의 프로그램들은 모두 선형적이었다. 위->아래로 순서대로 실행된다.
흥미로운 게임을 만들려면 어떤 조건에 따라 코드 섹션을 실행하거나 건너뛰는 프로그램을 작성해야 한다.
if문을 사용하여 코드 섹션으로 분기 / switch문을 사용하여 실행할 코드 섹션 선택 / while 및 do 루프를 사용하여 코드 섹션 반복
bool 변수로 참과 거짓 부울값 저장
0이 아닌 모든 값은 true로 해석될 수 있고, 0은 false로 해석될 수 있다.
// Score Rater
// Demonstrates the if statement
#include <iostream>
using namespace std;
int main()
{
if (true)
{
cout << "This is always displayed.\n\n";
}
if (false)
{
cout << "This is never displayed.\n\n";
}
int score = 1000;
if (score)
{
cout << "At least you didn’t score zero.\n\n";
}
if (score >= 250)
{
cout << "You scored 250 or more. Decent.\n\n";
}
if (score >= 500)
{
cout << "You scored 500 or more. Nice.\n\n";
if (score >= 1000)
{
cout << "You scored 1000 or more. Impressive!\n";
}
}
return 0;
}
첫번째 if문은 true가 참이기 때문에 출력되고, 두번째 if문은 출력되지 않는다.
score이 0이 아니기 때문에 참으로 해석된다.
// Score Rater 2.0
// Demonstrates an else clause
#include <iostream>
using namespace std;
int main() {
int score;
cout << "Enter your score: ";
cin >> score;
if (score >= 1000)
{
cout << "You scored 1000 or more. Impressive!\n";
}
else
{
cout << "You scored less than 1000.\n";
}
return 0;
}
else절은 if절의 표현식이 거짓일 경우에 프로그램이 분기할 문장을 제공한다.
if / else if / else
// Score Rater 3.0
// Demonstrates if else-if else suite
#include <iostream>
using namespace std;
int main() {
int score;
cout << "Enter your score: ";
cin >> score;
if (score >= 1000)
{
cout << "You scored 1000 or more. Impressive!\n";
}
else if (score >= 500)
{
cout << "You scored 500 or more. Nice.\n";
}
else if (score >= 250)
{
cout << "You scored 250 or more. Decent.\n";
}
else
{
cout << "You scored less than 250. Nothing to brag about.\n";
}
return 0;
}
만약 score가 500 이상이면, "You scored 500 or more. Nice."라는 메시지가 표시되고 컴퓨터가 return 문으로 분기한다. 그 표현식이 거짓이면, score가 500 미만임을 나타내며 컴퓨터는 시퀀스의 다음 표현식을 평가한다.
switch문
만약 choice가 값에 해당하는 경우, 프로그램은 해당하는 문장을 실행한다. 프로그램이 break문을 만나면 switch 구조를 종료한다. choice가 어떤 값과도 일치하지 않는 경우, 선택적인 default에 관련된 문장이 실행된다.
break와 default의 사용은 선택사항이다. 그러나 break를 생략하면 프로그램은 나머지 문장을 계속해서 진행한다.
switch문은 int(또는 char 또는 enumerator와 같은 int로 취급할 수 있는 값)를 테스트하는 데에만 사용할 수 있고 다른 유형과는 함께 작동하지 않는다.
// Menu Chooser
// Demonstrates the switch statement
#include <iostream>
using namespace std;
int main() {
cout << "Difficulty Levels\n\n";
cout << "1 - Easy\n";
cout << "2 - Normal\n";
cout << "3 - Hard\n\n";
int choice;
cout << "Choice: ";
cin >> choice;
switch (choice)
{
case 1:
cout << "You picked Easy.\n";
break;
case 2:
cout << "You picked Normal.\n";
break;
case 3:
cout << "You picked Hard.\n";
break;
default:
cout << "You made an illegal choice.\n";
}
return 0;
}
거의 항상 각 case를 break문으로 끝내는 게 좋다.
while문
while 루프를 사용하면 표현식이 true인 동안 코드 섹션을 반복할 수 있다.
false이면 프로그램은 루프 이후의 문으로 이동한다.
// Play Again
// Demonstrates while loops
#include <iostream>
using namespace std;
int main() {
char again = ’y’;
while (again == ’y’) {
cout << "\n**Played an exciting game**";
cout << "\nDo you want to play again? (y/n): ";
cin >> again;
}
cout << "\nOkay, bye.";
return 0;
}
'again'이라는 char 변수를 선언하고 'y'로 초기화
루프 식에서 사용되는 변수를 루프 이전에 초기화해야 한다.
while 루프는 루프 본문보다 식을 먼저 평가하기 때문에 루프가 시작되기 전에 표현식에 사용되는 모든 변수에 값이 있어야 한다.
while 루프와 마찬가지로, do 루프는 표현식을 기반으로 코드 섹션을 반복한다. 차이점은 do 루프가 각 루프 반복 후에 표현식을 테스트한다는 것이다. 즉 루프 본문이 항상 적어도 한 번 이상 실행된다는 것이다.
// Play Again 2.0
// Demonstrates do loops
#include <iostream>
using namespace std;
int main()
{
char again;
do
{
cout << "\n**Played an exciting game**";
cout << "\nDo you want to play again? (y/n): ";
cin >> again;
} while (again == ’y’);
cout << "\nOkay, bye.";
return 0;
}
do 루프가 시작되기 전에 char again을 선언하지만, 초기화할 필요는 없다. 이 변수가 루프의 첫 번째 반복 이후에만 테스트되기 때문이다.
대부분의 프로그래머는 while 루프를 사용한다. while 루프의 장점은 식이 루프의 맨 위에 바로 나타난다는 것이다.
'C++' 카테고리의 다른 글
beginning C++ through game programming / Chap 4 (0) | 2024.05.14 |
---|---|
beginning C++ through game programming / Chap 3-2 (0) | 2024.04.24 |
beginning C++ through game programming / chapter 3 (0) | 2024.04.10 |
beginning C++ through game programming / chapter 2-2 (0) | 2024.04.10 |
beginning C++ through game programming / chapter 1 (0) | 2024.04.03 |