친구의 부탁으로 만들어 줬다. 뭐...이런거 하면 안되는 거겠지만 -_-;


#include<stdio.h> // scanf와 printf를 사용하기 위하여 포함됨
#include<string.h> // strcpy를 사용하기 위하여 포함됨
#include<stdlib.h> // exit를 사용하기 위하여 포함됨

int scissor(int); // 컴퓨터의 필승 전략 함수
int printing_choice(int , int ); // 누가 무엇을 골랐는지 알려주는 함수
void winner(int ,int ); // 승자가 누구인지 판정하는 함수

int main(void) // 명령줄 입력값 없음
{
    int g;
    printf("Input your choice : ");
    scanf("%d",&g); // 사람의 선택을 입력받아서 변수 g에 저장한다
    printing_choice(1,g); // 사람의 선택 g를 출력한다
    printing_choice(2,scissor(g)); // scissor 함수에서 넘겨받은 컴퓨터의 선택을 출력한다 
    winner(g,scissor(g)); // 사람의 선택과 컴퓨터의 선택을 비교하여 승자를 출력한다 
    system("PAUSE");
    return 1; // 프로그램 종료
}

int scissor(int p){
    return (p%3)+1;
    // 3으로 나눈 나머지에 1을 더하였으므로 이 함수는 1, 2, 3중의 하나를 반환한다.
    // 입력값 p보다 항상 1이 크기 때문에 승리 전략이 된다.
}

int printing_choice(int m, int p){
    char a[10],b[10];
    // 입력받은 값 m이 1이면 사용자의 입력값, 1이 아니면 컴퓨터의 입력값이다.

    if(m==1){
             strcpy(a,"You");
             }
    else {
         strcpy(a,"Machine");
         }
        
    // 입력받은 값 p가 3의 배수이면 가위, 3으로 나눈 나머지가 1이면 바위, 3으로 나눈 나머지가 2이면 보자기이다.
    if(p%3==0){
               strcpy(b,"SCISSOR");
               }
    else if(p%3==1){
         strcpy(b,"ROCK");
         }
    else {
         strcpy(b,"PLAIN");
         }
    // 누구의 입력값이 무엇인지 출력한다    
    printf("%s select %s\n",a,b);
}

void winner(int p,int q){
     char a[10];
     // 가위는 보자기에 이긴다. 그리고 보자기는 바위에 이기고 바위는 가위에 이긴다.
     if((p%3==0&&q%3==2)||(p%3>q%3)){
                                     strcpy(a,"You win");
                                     }
     if((q%3==0&&p%3==2)||(p%3<q%3)){
                                     strcpy(a,"You lose");
                                     }
     // 만약 값이 같으면 둘은 비긴다.
     if(p%3==q%3){
                  printf("No one win\n");
                  exit(1);
                  }
     // 누가 이겼는지 출력하고 끝낸다.
     printf("%s!\n");
}

by snowall 2008. 10. 11. 19:39