티스토리 뷰
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;
}
}
검색을 통해 찾아봤으면 금방 나올 수 있었던 코드였겠지만
나 혼자 생각해서 근사하게 나왔단 것에 의미를 둬야겠다....
'유니티 > C# Code' 카테고리의 다른 글
GPT >> Application의 path 종류에 대해 설명해줘 (0) | 2024.06.19 |
---|---|
(학원과제) Array vs List vs ArrayList (0) | 2024.05.20 |
포켓몬 상성 계산 구현 x 이차원 배열 (20240519 c#으로 업데이트) (0) | 2024.05.14 |
[C#]List용법을자꾸자꾸까먹는벌레가적는글 (0) | 2020.07.09 |
특정애니메이션이끝날때까지기다리는코루틴 (수정) (0) | 2020.07.09 |