-
Notifications
You must be signed in to change notification settings - Fork 0
/
rcp_selector_ver.cpp
79 lines (71 loc) · 1.86 KB
/
rcp_selector_ver.cpp
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdexcept>
int main(void){
int playerCount;
int physicals[3][3] = { //행 [가위, 바위, 보] | 열 [비김, 이김, 짐]
{0, 2, 1},
{1, 0, 2},
{2, 1, 0}
};
int result[3] = {0, 0, 0};
printf("게임에 참가할 플레이어 인원수: ");
scanf("%d", &playerCount);
if(playerCount <= 1){
printf("2명 이하는 게임을 진행할 수 없습니다.\n");
return 1;
}
int playerToStatus[playerCount]; //playerId => statusId
int tmpCount = 0;
int tmpValue = 0;
while(tmpCount < playerCount){
printf("%d번 사용자 선택 (1: 가위, 2:바위, 3: 보) : ", (tmpCount + 1));
scanf("%d", &tmpValue);
if(tmpValue < 1 || tmpValue > 3){
printf("선택은 1: 가위, 2:바위, 3: 보\n");
continue;
}
playerToStatus[tmpCount] = tmpValue;
result[tmpValue-1] += 1;
++tmpCount;
}
printf("\n――――――――――――――――――――――\n\n"); //결과값 출력을 위한 선
/*
* 1. 게임 진행이 가능한지 확인함
* 방식: 같은 패를 낸 경우 (가위, 가위, 보 일 경우)
* 예외: 가위, 가위, 보 | 가위, 가위, 바위
*/
for(int i = 0; i < 3; i ++){
if(result[i] <= 1){ //1명이면 패스함
continue;
}
if(result[physicals[i][1]] > 0 || result[physicals[i][2]] > 0){
continue;
}
printf("게임 진행이 불가능합니다.\n");
return 0;
}
/**
* End. 게임 승패를 구분해야함
*
* 검사 단계
* 2-1. 졌는지 확인해야함 (이유: 졌으면 다음 배열을 검사해서 메모리를 효율적으로 사용해야함)
* 2-2. 이겼으면 이겼다고 멤버ID 출력하고 다음 참가자 검사해야함
*/
int inserted = 0;
for(int i = 0; i < playerCount; i ++){
int statId = playerToStatus[i] - 1;
int rootLoseId = physicals[statId][2]; //약한 패
if(result[rootLoseId] > 1){
continue;
}
int rootWinId = physicals[statId][1]; //강한 패
if(result[rootWinId] > 0){
printf("%d번 사용자가 이겼습니다.\n", (i + 1));
inserted++;
}
}
if(inserted == 0){
printf("승자가 없습니다.");
}
return 0;
}