가위 바위 보 코드 작성
그대와나
&n176#include stdio.h#include stdlib.h
int main(void){ int wcount = 0; //승리 횟수 카운트 int dcount = 0; //무승부 횟수 카운트 int su; // 키보드로 입력받을 수 (바위는 1, 가위는 2, 보는 3) int rd; // 컴퓨터가 낸는 랜덤 수
while (1) // 패배할때 까지 무한 반복 { printf(바위는 1, 가위는 2, 보는 3 : ); scanf(%d, &su); if (su == 1) printf(당신은 바위를 선택, ); else if (su == 2) printf(당신은 가위를 선택, ); else printf(당신은 보를 선택, );
rd= rand() % ((3 - 1) + 1) + 1; // 1~3중 랜덤의 수가 sd 변수에 저장
if (rd == 1) printf(컴퓨터는 바위를 선택, ); else if (rd == 2) printf(컴퓨터는 가위를 선택, ); else printf(컴퓨터는 보를 선택, );
if (su == 1) // 1 바위를 냈을 경우 { if (sd == 1) { printf(비겼습니다! \n); dcount = dcount + 1; } else if (sd == 2) { printf(당신이 이겼습니다! \n); wcount = wcount + 1; } else { printf(당신이 졌습니다! \n\n); printf(게임의 결과 : %d승, %d무\n\n, wcount, dcount); break; //패배했을 경우 무한반복 탈출 } }
else if (su == 2) // 2 가위를 냈을 경우 { if (rd == 2) { printf(비겼습니다! \n); dcount = dcount + 1; } else if (rd == 3) { printf(당신이 이겼습니다! \n); wcount = wcount + 1; } else { printf(당신이 졌습니다! \n\n); printf(게임의 결과 : %d승, %d무\n\n, wcount, dcount); break;//패배했을 경우 무한반복 탈출 } }
else // 3 보를 냈을 경우 { if (rd == 3) { printf(비겼습니다! \n); dcount = dcount + 1; } else if (rd == 1) { printf(당신이 이겼습니다! \n); wcount = wcount + 1; } else { printf(당신이 졌습니다! \n\n); printf(게임의 결과 : %d승, %d무\n\n, wcount, dcount); break;//패배했을 경우 무한반복 탈출 } } } return 0;}
이렇게 작성했는데요.
rand() 함수를 이용했는데 전혀 랜덤 같지가 않아요.
1를 입력하면 무조건 0승 0패이고, 2를 입력하면 무조건 3승 3무가 되고, 3를 입력하면 0승 2무가 됩니다.
규칙도 똑같습니다. 2를 입력하면 승승무무승무패
어떤 방법을 써야지 될까요?..
-
봄해
아 그렇군요. 정말로 감사합니다!
-
FaintTears
srand 함수는 난수 생성의 시작점을 지정한다고 생각하시면 됩니다.
time 함수는 시간의 변화에 따라 반환값이 변하므로 좀더 정확한(?) 난수 값을 생성할 수 있는거죠