1. 문제

 

11. 갬블링 게임을 만들어보자. 두 사람이 게임을 진행하며, 선수의 이름을 초기에 입력 받는다. 선수가 번갈아 자신의 차례에서 <Enter> 키를 치면 랜덤한 3개의 수가 생성되고 모두 동일한 수가 나오면 게임에서 이기게 된다. 숫자의 범위가 너무 크면 3개의 숫자가 일치할 가능성이 낮아 숫자의 범위를 0~2로 제한한다. 랜덤 정수 생성은 문제 3번의 힌트를 참고하라. 선수는 Player 클래스로 작성하고, 2명의 선수는 배열로 구성하라. 그리고 게임은 GamblingGame 클래스로 작성하라.

 

 

 

2. 결과

 

 

 

 

 

 

3. 코드

 

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

class Player {
	string name[2];
	int i;
public:
	Player() { i=0;}
	void setName(string namae) { name[i] = namae; i++; }
	string getName() {
		i++;
		if( i >= 2) {
			i=0;
			return name[i];
		}
		else 
			return name[i];
	}
};

class GamblingGame {
	int num[3];
public :
	GamblingGame(){ srand( (unsigned)time(0) ); }
	void Game();
};
void GamblingGame::Game() {
	cout << "***** 갬블링 게임을 시작합니다. *****" << endl;
	Player p; string name;
	cout << "첫번째 선수 이름>>";
	getline( cin, name);
	p.setName( name );
	cout << "두번째 선수 이름>>";
	getline( cin, name);
	p.setName( name );

	string named; 
	while(1) {
		named = p.getName();
		cout << named << ":<Enter>";
		getline( cin, name);
		for(int i=0; i<3; i++)
			num[i] = rand() % 3;
		cout << "\t\t" << num[0] << "\t" << num[1] << "\t" << num[2] << "\t";
		if( num[0] == num[1] && num[1] == num[2] ) {
			cout << named << "님 승리!!" << endl;
			break;
		}
		else
			cout << "아쉽군요!" << endl;
	}
}

int main() {
	GamblingGame g;
	g.Game();
}

 

 

 

4. 설명

 

Player 클래스는 선수들의 이름을 저장합니다.

 

멤버함수 setName(string name) 함수는 저장할 이름이 2명이란 것을 알고 있기 때문에 간단하게 만들었습니다.

 

또 다른 멤버함수 getName()함수는 호출할 때마다 다음 이름을 return합니다.

 

 

GamblingGame 클래스 생성자에서 srand( (unsigned)time(0) ); 을 선언하여서 실행 할 때 마다 다른 값을 구하도록 합니다.

 

멤버함수 Game()에서는 전체적인 게임이 진행되는 함수 입니다.

 

선수 이름을 각각 입력 받고 while(1)문으로 들어가 게임을 시작합니다.

 

Enter를 입력 받으 실 때는 getline으로 입력 받으셔야 합니다. cin을 사용하시면 입력 버퍼에 "\n"가 남게 되어서 오류가 발생합니다.

 

Enter를 입력 받으면 랜덤한 수 3개를 생성한 후 배열에 저장한 후 3개의 랜덤한 수를 출력합니다.

 

if문을 사용하여서 num[0] == num[1] && num[1] == num[2] 일 경우 즉, 3개의 값이 모두 같은 경우 승리하게 되고 게임이 끝나게 됩니다.

 

+ Recent posts