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함수에서 가위, 바위, 보 중 랜덤한 것을 출력하도록 하였고
사람일 경우 값을 입력받아 가위, 바위, 보 중 하나가 아니면 무시하고 다시 한번 더 입력을 받고 이 중 하나라면 그 값을 저장, 컴퓨터와 비교하도록 하였다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 14번 (0) | 2019.05.14 |
---|---|
명품 C++ programming 실습문제 10장 13번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 12번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 11번 (0) | 2019.05.13 |
명품 C++ programming 실습문제 10장 10번 (0) | 2019.05.12 |