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개의 값이 모두 같은 경우 승리하게 되고 게임이 끝나게 됩니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 5장 1번 (1) | 2019.04.07 |
---|---|
명품 C++ programming 4장 Open Challenge (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 10번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 9번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 8번 (0) | 2019.04.06 |