C언어 컴퓨터와 가위바위보 게임 질문이요!

C언어 컴퓨터와 가위바위보 게임 질문이요!

작성일 2017.05.08댓글 1건
    게시물 수정 , 삭제는 로그인 필요

가위 바위 보 게임을 만들어 보자. 사용자로부터 가위 바위 보 중에서 하나를 입력받는다. 그리고 컴퓨터는 난수 생성을 통해서 가위바위 보 중에서 하나를 선택하게 한다. 이 둘을 비교해서 승자와 패자를 가려주는 프로그램을 작성해 보자. 단 프로그램이 진행은 사용자가 질 떄까지 계속되어야 하고, 마지막에 가서는 게임의 결과(예 : 4승 3무)까지 출력해 주도록 하자.

인데요.. 일단은 소스코드를 만들긴 했는데 결과값이 이긴횟수 + 비긴횟수 만큼 나옵니다.. 해결책 없나요??..
아 그리고 소스코드를 좀 더 간결하게 해주신다면 감사하겠습니다! ㅜㅜ 아직 초보자라서 전역변수도 사용해버렸네요..

#include <stdio.h>
#include <stdlib.h>
int winCount1 = 0;
int tieCount1 = 0;


int computerNumber(void); // 컴퓨터 난수 설 정  
void rpsResult(int computer, int user); // 실제 비교, 결과값 출 력  
void winCount(int * win);
void tieCount(int * tie);


int main(void)
{
int userNumber; 
printf("바위는 1, 가위는 2, 보는 3\n 가위바위보를 선택하시오 : ");
scanf("%d", &userNumber);
rpsResult(computerNumber(), userNumber);
fflush(stdout);
printf("게임의 결과 : %d승, %d무\n", winCount1, tieCount1);
return 0;
}


int computerNumber(void)
{
int computerNumber = ((rand() % 3) + 1);
return computerNumber;
}


void rpsResult(int computer, int user)
{
switch (user)
{
case 1:
printf("당신은 바위를 선택");
switch(computer)
{
case 1:
printf(", 컴퓨터는 바위 선택 ");
break;
case 2:
printf(", 컴퓨터는 가위를 선택 ");
break;
case 3:
printf(", 컴퓨터는 보를 선택 ");
break;
}
break;
case 2:
printf("당신은 가위를 선택");
switch(computer)
{
case 1:
printf(", 컴퓨터는 바위 선택 ");
break;
case 2:
printf(", 컴퓨터는 가위를 선택 ");
break;
case 3:
printf(", 컴퓨터는 보를 선택 ");
break;
}
break;
case 3:
printf("당신은 바위를 선택");
switch(computer)
{
case 1:
printf(", 컴퓨터는 바위 선택 ");
break;
case 2:
printf(", 컴퓨터는 가위를 선택 ");
break;
case 3:
printf(", 컴퓨터는 보를 선택 ");
break;
}
break;
}
if(user == computer)
{
printf("비겼습니다! \n");
tieCount(&tieCount1);
main();
}
else if((user - computer) == -1)
{
printf("이겼습니다! \n");
winCount(&winCount1);
main();
}
else if((user - computer) == -2)
{
printf("당신이 졌습니다! \n");
}
else if((user - computer) == 1)
{
printf("당신이 졌습니다 ! \n");
}
else if((user - computer) == 2)
{
printf("이겼습니다! \n");
winCount(&winCount1);
main();
}


void winCount(int * win)
{
(*win)++;
}

void tieCount(int * tie)
{
(*tie)++;
}



profile_image 익명 작성일 -

일단 소스를 간략화 해보았습니다.

#include <stdio.h>
#include <stdlib.h>
int winCount1 = 0;
int tieCount1 = 0;

int computerNumber(void); // 컴퓨터 난수 설 정  
int rpsResult(int computer, int user); // 실제 비교, 결과값 출 력  
void winCount(int * win);
void tieCount(int * tie);


int main(void)
{
int userNumber;

do{

printf("바위는 1, 가위는 2, 보는 3\n 가위바위보를 선택하시오 : ");
scanf("%d", &userNumber);
}
while(rpsResult(computerNumber(), userNumber) == 1);

printf("게임의 결과 : %d승, %d무\n", winCount1, tieCount1);
return 0;
}


int computerNumber(void)
{
int computerNumber = ((rand() % 3) + 1);
return computerNumber;
}


int rpsResult(int computer, int user)
{
switch (user)
{
case 1:
printf("당신은 바위를 선택");
break;

case 2:
printf("당신은 가위를 선택");
break;

case 3:
printf("당신은 바위를 선택");
break;

}

switch(computer)
{
case 1:
printf(", 컴퓨터는 바위 선택 ");
break;
case 2:
printf(", 컴퓨터는 가위를 선택 ");
break;
case 3:
printf(", 컴퓨터는 보를 선택 ");
break;
}

if(user == computer)
{
printf("비겼습니다! \n");
tieCount(&tieCount1);
return 1;
}
else if((user - computer) == 2 || (user - computer) == -1)
{
printf("이겼습니다! \n");
winCount(&winCount1);
return 1;
}
else if((user - computer) == -2 || (user - computer) == 1)
{
printf("당신이 졌습니다! \n");
return 2;
}


void winCount(int * win)
{
(*win)++;
}

void tieCount(int * tie)
{
(*tie)++;
}
일단 질문자님의 문제가 발생한 이유는 main()을 계속 호출했기 때문인것 같습니다.
일단 이런 알고리즘을 코딩 할때는 반복문을 사용하는게 흐름을 파악하기 쉽고 간결하고 편합니다.

c언어 가위바위보 게임 질문좀요...

... 바위 3.) : 사용자 : 바위 컴퓨터 : 가위 결과 : 승리 10번째 게임 : 가위 바위 보를 선택하세요... h> void main() { int n,w=0,r=0,a=0 ,c,c2; // n 횟수 , w...

c언어 가위바위보 질문요 ㅠ

제가 지금 c언어 공부하고있는데 c언어 가위바위보... 조건은 “가위 바위 보게임컴퓨터와 할 수 있도록 C 프로그램을 작성하시오. 게임은...

C언어 가위바위보 게임 질문좀요!

... 게임 끝내겠습니다.\n"); break; } if(c == 1) strcpy(conductc, "가위"); else if(c == 2) strcpy(conductc, "바위"); else strcpy(conductc, ""); printf("user: %s...

c언어 가위바위보 게임 수정

... // 컴퓨터가 낸 값을 저장합니다. int user;... printf("/ 가위바위보게임을 시작하겠습니다 /\n... c언어게임을 짜봣는데 몇판을하면 끝나게하는...

C언어 가위바위보 게임 주석

... printf("\n | 가위 바위 보 프로그램 |"); printf... /*컴퓨터가 묵찌빠중에 어떤것을 고를지를... // 반목문 탈출 그렇지 않으면 게임 계속 실행 }