본문 바로가기

Coding/C++

명품 C++ Programming 6장 Open Challenge

Up & down 게임 만들기

 

Up & Down 게임 프로그램을 작성해보자. 게임에 참석하는 사람은 2명이며, 번갈아 가며 다음과 같이 숨겨진 답에 접근해 간다. Up & Down 게임은 전체적으로 UpAndDownGame 클래스로 작성하고 static 멤버로만 구성하라. 선수를 표현하기 위해 Person 클래스를 작성하고 main() 함수는 프로그램을 시작시키는 기능정도로만 구현하라.

 

소스코드

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
using namespace std;

class Person {
public:
	Person();
	~Person();
	string name;
	int num;
};

Person::Person() {};

Person::~Person() {};

int main() {
	cout << "Up & Down 게임을 시작합니다." << endl;

	Person p1;
	Person p2;

	p1.name = "김인수";
	p2.name = "오은경";

	srand((unsigned)time(0)); // 항상 다른 랜덤수를 발생시키기 위한 seed 설정
	int n = rand(); // 0에서 RAND_MAX(32767) 사이의 랜덤한 정수가 n에 발생
	n = n % 100; // n은 0에서 99 사이의 정수

	int start = 0, end = 99;
	int count = 0;

	bool tof = true;

	while (true) {
		cout << "답은 " << start << "과 " << end << " 사이에 있습니다." << endl << endl;
		
		if (count % 2 == 0) {
			cout << p1.name << ">> ";
			cin >> p1.num;

			if (p1.num < start || p1.num > end)
				tof = false;

			if (tof == true) {
				if (n < p1.num)			// n이 입력받은 숫자보다 작다면
					end = p1.num;		// n이 될 수 있는 최댓값은 p1.num
				else if (n > p1.num)	// n이 입력받은 숫자보다 크다면
					start = p1.num;		// n이 될 수 있는 최솟값은 p1.num
				else if (n == p1.num) {	// n과 입력받은 숫자가 같다면
					cout << p1.name << "가 이겼습니다!!";
					return 0;			// 프로그램 종료
				}
			}
			else {
				cout << p1.name << " 플레이어는 범위에 해당되지 않는 값을 입력했습니다. 다음 플레이어로 차례가 넘어갑니다." << endl << endl;
			}


		}
		else {
			cout << p2.name << ">> ";
			cin >> p2.num;

			if (p2.num < start || p2.num > end)
				tof = false;

			if (tof == true) {
				if (n < p2.num)			// n이 입력받은 숫자보다 작다면
					end = p2.num;		// n이 될 수 있는 최댓값은 p2.num
				else if (n > p2.num)	// n이 입력받은 숫자보다 크다면
					start = p2.num;		// n이 될 수 있는 최솟값은 p2.num
				else if (n == p2.num) {	// n과 입력받은 숫자가 같다면
					cout << p2.name << "가 이겼습니다!!";
					return 0;			// 프로그램 종료
				}
			}
			else {
				cout << p2.name << " 플레이어는 범위에 해당되지 않는 값을 입력했습니다. 다음 플레이어로 차례가 넘어갑니다." << endl << endl;
			}
		}

		tof = true;
		count++;
	}
}

 

문제를 해결하기는 했으나 문제의 목적인 '여러 클래스 만들기', 'static 멤버를 가진 클래스 만들기 및 활용'이라는 주제에서 벗어났다. 코드를 수정할 필요가 있겠다. 문제의 목적을 잘 파악하도록 하자.

'Coding > C++' 카테고리의 다른 글

C++ ios_base::sync_with_stdio(false); cin.tie(NULL);  (0) 2022.09.17
연산자 중복 - '숫자' + '객체'  (0) 2019.08.19