-
명품 C++ 4장 14번C++ 2018. 10. 30. 02:32
14. 갬블링 게임을 만들어보자. 두 사람이 게임을 진행하며, 선수의 이름을 초기에 입력 받는다. 선수가 번갈아 자신의 차례에서 <Enter> 키를 치면 랜덤한 3개의 수가 생성되고 모두 동일한 수가 나오면 게임에서 이기게 된다. 숫자의 범위가 너무 크면 3개의 숫자가 일치할 가능성이 낮아 숫자의 범위를 0~2로 제한한다. 랜덤 정수 생성은 문제 3번의 힌트를 참고하라. 선수는 Player 클래스로 작성하고, 2명의 선수는 배열로 구성하라. 그리고 게임은 GamblingGame 클래스로 작성하라.
소스코드
#include <iostream>using namespace std;#include <cstdlib>#include <ctime>#include <string>class Player {string name;public:void setName(string name) { this->name = name; }string getName() { return name; }};class GamblingGame {Player *p;public:GamblingGame();~GamblingGame() { delete p; }void start();void game();bool drawCard();};GamblingGame::GamblingGame() {srand((unsigned)time == 0);p = new Player[2];cout << "***** 갬블링 게임을 시작합니다. *****" << endl;}void GamblingGame::start() {cout << "첫번째 선수 이름>>";string name;cin >> name;p[0].setName(name);cout << endl;cout << "두번째 선수 이름>>";cin >> name;p[1].setName(name);cout << endl;}bool GamblingGame::drawCard() {int card[3];for (int i = 0; i < 3; ++i) {int n = rand() % 3;card[i] = n;cout << card[i] << "\t";}if (card[0] == card[1] && card[0] == card[2])return true;elsereturn false;}void GamblingGame::game() {string n;int i = 0;for (;;) {cout << p[i % 2].getName()<<endl;getline(cin, n);if (this->drawCard()) {cout << p[i % 2].getName() << "님의 승리" << endl;break;}elsecout << "아쉽군요!"<<endl;++i;}}int main() {GamblingGame g;g.start();g.game();}실행결과
Player 에는 선수 이름을 넣고 GamblingGame 클래스에서 난수를 발생시켜 출력 후 세수가 같은지 판단하여 결과를 출력했습니다.
'C++' 카테고리의 다른 글
명품 C++ 5장 1번 (0) 2018.10.31 명품 C++ 4장 Open Challenge (3) 2018.10.30 명품 C++ 4장 13번 (0) 2018.10.30 명품 C++ 4장 12번 (0) 2018.10.30 명품 C++ 4장 11번 (0) 2018.10.30