1. 문제

 

사람과 컴퓨터의 가위바위보 대결

 

사람과 컴퓨터가 가위바위보 게임을 하는 프로그램을 작성하라. 선수 이름은 프로그램 실행 초기에 키 입력받는다. 컴퓨터가 무엇을 낼지는 독자가 마음대로 프로그래밍하면 된다. 저자는 컴퓨터가 랜덤하게 내도록 코딩하였다. 사람이 키보드로부터 입력받고 <Enter> 키를 치면 곧바로 결과가 나온다. 가위, 바위, 보가 아닌 다른 문자를 입력하면 다시 입력받는다.

 

 

2. 결과

 

 

3. 코드

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

class AbstractPlayer {
	string name;
protected:
	string gbb[3];
public:
	AbstractPlayer(string name) {
		this->name = name;
		gbb[0] = "가위"; gbb[1] = "바위"; gbb[2] = "보";
	}
	virtual string turn() = 0;
	string getName() { return name; }
};

class Human : public AbstractPlayer {
public:
	Human(string name) : AbstractPlayer(name) { ; }
	string turn() {
		string gg;
		while (1) {
			cout << getName() << ">>";
			getline(cin, gg);
			if (gg == "가위" || gg == "바위" || gg == "보")
				return gg;
		}
	}
};

class Computer : public AbstractPlayer {
public:
	Computer() : AbstractPlayer("Computer") {
		srand((unsigned)time(0));
	}
	string turn() {
		int num = rand() % 3;
		return gbb[num];
	}
};

int main() {
	string name;

	cout << "***** 컴퓨터와 사람이 가위 바위 보 대결을 펼칩니다. *****" << endl;
	cout << "선수 이름을 입력하세요>>";
	getline(cin, name);

	Human h(name);
	Computer c;

	while (1) {
		string temp = h.turn();
		string com = c.turn();
		cout << c.getName() << ": " << com << endl;
		if (temp == com)
			cout << "the same" << endl;
		else if (temp == "바위") {
			if (com == "가위")
				cout << h.getName() << " is winner." << endl;
			else
				cout << c.getName() << " is winner." << endl;
		}
		else if (temp == "가위") {
			if (com == "보")
				cout << h.getName() << " is winner." << endl;
			else
				cout << c.getName() << " is winner." << endl;
		}
		else if (temp == "보") {
			if (com == "바위")
				cout << h.getName() << " is winner." << endl;
			else
				cout << c.getName() << " is winner." << endl;
		}
	}
}

 

 

4. 설명

 

컴퓨터일 경우 turn함수에서 가위, 바위, 보 중 랜덤한 것을 출력하도록 하였고

 

사람일 경우 값을 입력받아 가위, 바위, 보 중 하나가 아니면 무시하고 다시 한번 더 입력을 받고 이 중 하나라면 그 값을 저장, 컴퓨터와 비교하도록 하였다.

 

+ Recent posts