질문있습니다. 컴퓨터와 바위가위보 하는 게임을 만든것입니다. 사용자가 져야만 프로그램이 끝나도록 만들었습니다.
그런데 지는것을 리턴으로해서 프로그램을 짰는데... 잘한걸까요..???
저 그리고, 사용자가 져야끝나는데 첫판에 사용자와 컴퓨터가 비기면 끝나더라구요.. 두쨋판 세쨋판에서 비기면 아무이상
없는데... 흠...
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Input(int, int);
int Output(char*, char*, char*, int, int);
int main(void)
{
int user, computer, result;
while(1)
{
printf(\"주먹은 1, 가위는 2, 보는 3 \\n\");
printf(\"숫자하나를 입력하세요: \");
scanf(\"%d\", &user);
srand((int)time(NULL));
computer = (rand()%3)+1;
result=Input(user, computer);
if(result==1)
break;
}
return 0;
}
int Input(int user, int computer)
{
char *uStr, *cStr, *resStr;
int temp, result;
if(user==1)
uStr=\"주먹\";
else if(user==2)
uStr=\"가위\";
else
uStr=\"보\";
if(computer==1)
cStr=\"주먹\";
else if(computer==2)
cStr=\"가위\";
else
cStr=\"보\";
if(user==1 && computer==2)
{
temp=user;
user=computer;
computer=temp;
}
else if(user==2 && computer==1)
{
temp=user;
user=computer;
computer=temp;
}
else if(user==2 && computer==3)
{
temp=user;
user=computer;
computer=temp;
}
else if(user==3 && computer==2)
{
temp=user;
user=computer;
computer=temp;
}
if(user>computer)
resStr=\"승리하였습니다!!\";
else if(user<computer)
resStr=\"패배하였습니다!!\";
else
resStr=\"비겼습니다!!\";
result=Output(uStr, cStr, resStr, user, computer);
if(result==1)
return 1;
}
int Output(char* uStr, char* cStr, char* resStr, int user, int computer)
{
static int win, draw;
if(user>computer)
win+=1;
if(user==computer)
draw+=1;
printf(\"당신의 선택: %s, 컴퓨터의 선택: %s, %s\\n\\n\", uStr, cStr, resStr);
if(user<computer)
{
printf(\"\\n\\n게임의 결과: %d승, %d무 \\n\", win, draw);
return 1;
}
}
오... 바위가위보 게임이라니 시원한 냉수를 마신것 마냥 신선하군.
중복되는 루틴과 쓸대없는 부분이 너무 많아 소스가 너무 길어진 경향이 있네요.. 좀더 고민하셔서 더 간결하게 작성하시오.
ㄴ?
input에 있는 if들 switch ~ case로 개편 좀 하고, 암튼.. input 함수의 return이 1로 내주는 것이 있으니 비겨도 1 나오겠징. ㅇㅇ
그리고, 가위 바위 보 같이 명확한 결말이 나오는 것을 왜 버블소트할때나 사용하는 swap 걸었는지.. 좀 조잡해보임. ㅇㅇ
가위바위보인데 코드가 길다..
1, 2 하고 2, 3 은 있는데 1, 3 비교하는건 어디있소?