티스토리 뷰

void playingRockPaperScissors() {

	string* sels = new string[3];
	sels[0] = "가위";
	sels[1] = "바위";
	sels[2] = " 보 ";

	int gameCount = 1;
	int win = 0;
	int draw = 0;
	int lose = 0;

	cout << "가위, 바위, 보 게임을 시작합니다." << endl;
	Sleep(1200);

	//플레이어한테 입력받은 값을 담아두는 변수
	int playerNum = 1;
	int cNum = 1;

	while (playerNum == 1)
	{
		system("cls");
		cout << "가위, 바위, 보 게임을 시작합니다." << endl;
		cout << "□■(가위 >> 바위 >> 보 >> 가위)□■" << endl;
		cout << "□■□■□■   1: 가위  □■□■□■" << endl;
		cout << "□■□■□■   2: 바위  □■□■□■" << endl;
		cout << "□■□■□■   3: 보    □■□■□■" << endl;
		cout << "□ (지면 게임을 계속해야 합니다.) ■\n" << endl;

		if (gameCount > 1)
			cout << "현재 " << gameCount << "Round [지금까지 " << win << " 승 / " << draw << " 무 / " << lose << " 패 ]" << endl;
		else {
			cout << "\n";
		}
		cout << "무엇을 내시겠습니까? : ";

		bool wrongAnswer = true;
		while (wrongAnswer)
		{
			cin >> playerNum;

			if (playerNum == 1 || playerNum == 2 || playerNum == 3)
			{
				wrongAnswer = false;
				break;
			}
			cin.clear();
			cin.ignore();
			cout << "\n제대로 된 값을 입력해주세요 : ";
			Sleep(700);
		}

		Sleep(1000);

		srand((unsigned int)time(NULL));
		int cNum = rand() % 3 + 1;

		cout << "\n     ┍─────┐  ┍─────┐" << endl;
		cout << "YOU  < " << sels[playerNum - 1] << "│  │ " << sels[cNum - 1] << " > COM" << endl;
		cout << "     └─────┘  └─────┘" << endl;

		gameCount++;

		////나 가위 컴퓨터 보 내가 이겨야함
		//if (playerNum == 1 && cNum == 3) cNum = 0;
		////나 보 컴퓨터 가위 내가 져야함
		//else if (playerNum == 3 && cNum == 1) playerNum = 0;

		switch (playerNum - cNum) {
		case 2:
		case -1:
			cout << "당신의 ' 패배 ' 입니다! " << endl;
			lose++;
			cout << "다시 덤벼보세요" << endl;
			playerNum = 1;
			system("PAUSE");
			break;

		case -2:
		case 1:
			cout << "당신의 ' 승리 ' 입니다! " << endl;
			win++;

			cout << "\n□■□■□■□■□■□■□■□■□■□" << endl;
			cout << "□■□■  게임을 다시 할까요? □■□■" << endl;
			cout << "□■□■  1 을 눌러 다시하기  □■□■" << endl;
			cout << "□■□■□■□■□■□■□■□■□■□" << endl;

			cin >> playerNum;
			break;

		default:
			cout << "무승부입니다!" << endl;
			draw++;
			cout << "다시 덤벼보세요" << endl;
			playerNum = 1;
			system("PAUSE");
			break;
		}
	}

	//위 while 문에서 나오면 게임이 끝났다는 뜻
	cout << "게임을 그만 둘게요\n" << endl;
	Sleep(700);

	//게임을 한 판이라도 했으면 결과를 보여주는 코드
	if (gameCount > 1) {
		cout << "게임 결과 : " << gameCount - 1 << " 전 " << win << " 승 " << draw << " 무 " << lose << " 패\n" << endl;
	}

	system("PAUSE");
}

 

코드의 전문.

 

 

가위는 1,

바위는 2,

보는 3 을 입력하기로 정했다.

 

가위는 바위에게 진다. 그 차이를 구분해서 승패를 결정하면 된다.

 

a는 내가 낸 값, b는 컴퓨터가 낸 값이라고 정했다면

a - b 의 결과는 음수, 혹은 양수가 나올 것이다.

그래서 양수가 나오면 내가 이긴 것이고

음수가 나오면 내가 진 것이다.

 

이것을 Switch문으로 바꾸면...

 

int playerNum = 1;
int cNum = 1;

switch (playerNum - cNum) {
		case -1:
			cout << "당신의 ' 패배 ' 입니다! " << endl;
			break;
            
		case 1:
			cout << "당신의 ' 승리 ' 입니다! " << endl;
			break;

		default:
			cout << "무승부입니다!" << endl;
			break;
		}
	}

 

 

문제는 가위와 보의 결과이다.

가위 (1) 에서 보 (3) 를 빼면 음수가 나온다.

음수가 나오면 패배로 판단하기로 했는데

가위는 보를 이긴다.

가위와 보의 결과를 정리하면,

1 - 3 = -2 (승리)

3 - 1 = 2 (패배)

로 나타낼 수 있다.

 

처음엔 case를 -1과 1, 그리고 그외의 결과로만 정의해야 하는 줄 알았다.

 

		//// 나 = 가위, 컴퓨터 = 보 / 내가 이겨야함
		//if (playerNum == 1 && cNum == 3) cNum = 0;
        
		////나 = 보, 컴퓨터 = 가위 / 내가 져야함
		//else if (playerNum == 3 && cNum == 1) playerNum = 0;

 

그래서 switch 문 앞에 위 식을 추가해 1 - 0 과 0 -1을 하도록 했지만...

switch 문의 특징을 생각해보니 전혀 필요 없는 짓이었다...

 

case 마다 break를 작성 해주지 않으면

다음 case의 작업까지 이어서 하므로,

 

if( 1 || -2 ) { }

else( -1 || 2 ) { } 대신에 아래와 같이 적을 수 있었다.

 

switch (playerNum - cNum) {
		case 2:
		case -1:
			cout << "당신의 ' 패배 ' 입니다! " << endl;
			break;

		case -2:
		case 1:
			cout << "당신의 ' 승리 ' 입니다! " << endl;
			break;

		default:
			cout << "무승부입니다!" << endl;
			break;
		}
	}

 

 

검색을 통해 찾아봤으면 금방 나올 수 있었던 코드였겠지만

나 혼자 생각해서 근사하게 나왔단 것에 의미를 둬야겠다....

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함