C++ 베스킨라빈스 게임 회고록

정형진·2023년 3월 4일
0

이 게임을 처음 만들 때는 FOR문을 2번 사용을 해서 만들었었다. 또한 배열을 사용했었다.

#include<iostream>
#include<ctime>
#include<vector>

using namespace std;

// 배스킨라빈스 31 게임
int main()
{
	std::srand(time(NULL));
	int BR31[31] = {};
	int num = 0, count = 0;
	int com = std::rand() % 3 + 1;
	bool is_dup = false;

	for (int i = 0; i < 31; i++)
	{
		BR31[i] = i + 1;
	}
	while (count < 32)
	{
		cout << "개수를 입력하세요. : ";
		cin >> num;
		if (num < 4 && num > 0 && is_dup == false)
		{
			cout << "사용자가 부른 숫자!! \n";
			for (int j = 0; j < num; j++)
			{
				cout << BR31[count + j] << endl;
				if (BR31[count + j] == 31)
				{
					cout << "게임 종료!! 컴퓨터의 승리입니다. \n";
					break;
				}
			}
			count = num + count;

			is_dup = true;
		}
		else
		{
			cout << "1 ~ 3의 숫자를 입력해주세요. \n";
		}
		if (is_dup == true)
		{
			cout << "컴퓨터가 부른 숫자!! \n";
			for (int j = 0; j < com; j++)
			{
				cout << BR31[count + j] << endl;
				if (BR31[count + j] == 31)
				{
					cout << "게임 종료!! 사용자의 승리입니다. \n";
					break;
				}
			}
			count = com + count;

			is_dup = false;
		}

	}

	return 0;
}

이런식으로 사용자가 입력한 숫자, 컴퓨터가 입력한 숫자를 따로따로 FOR문을 동작하게 했다.

하지만 선생님께서 FOR문을 한번만 사용해도 되며, 배열을 쓸 필요가 없다고 피드백을 해주셨다.

생각해낸 방법은 BOOL 변수를 설정하여 사용자와 컴퓨터가 입력할 때마다 체크할 수 있도록 했다. 배열은 그냥 삭제했다.
즉, 사용자가 입력한 숫자도 NUM, 컴퓨터가 입력한 숫자도 NUM에 저장하지만 BOOL 변수를 통해 구분이 가능하도록 한 것이다.

#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

// 배스킨라빈스 31 게임
int main()
{
	int num = 0, count = 1;
	bool turn = false;

	while (count < 32)
	{
		if (turn == true)
		{
			std::srand(time(NULL));
			int com = std::rand() % 3 + 1;

			cout << "컴퓨터가 부른 숫자!! \n";
			num = com;
			turn = false;
		}
		else
		{
			cout << "개수를 입력하세요. : ";
			cin >> num;

			if (num > 3 || num < 1)
			{
				cout << "1 ~ 3의 숫자를 입력해주세요. \n";
				num = 0;
			}
			else
			{
				cout << "사용자가 부른 숫자!! \n";
				turn = true;
			}
		}
		for (int i = 0; i < num; i++)
		{
			cout << count + i << endl;
		}
		count += num;
	}

	turn == true ? cout << "게임 종료!! 컴퓨터의 승리입니다. \n" : cout << "게임 종료!! 사용자의 승리입니다. \n";

	return 0;
}

그 결과 이처럼 FOR문을 한번만 동작하도록 할 수 있었다.

배열을 사용하지 않는 것은 간단하였으나, FOR문을 하나만 사용하는 방법을 생각하는 것이 조금 오래 걸렸다.
그러나 막상 생각해내니 너무나 간단했다.

마지막으로 승리 판결을 삼항연산자를 사용하여 코드를 더 짧게 만들 수 있었다.

0개의 댓글