IT/C and C++

가위바위보 프로그램

KSI 2005. 7. 13. 06:53

제가 가르치는 학생들 참고자료로 만든 가위바위보 게임입니다.


1인칭이고요. 컴퓨터 플레이어는 최소 1명부터 최대 255명(char)까지로
조정해서 할수 있습니다.(4명만되도 거의 비김 ^^ 아시죠)
승패는 나의 관점에서만 처리하도록 했습니다.
로직 자체는 기초과정중심으로 if, for, while문으로만 만들었습니다.
다른곳은 볼꺼없고 여러명의 컴퓨터 유저들과의 승패 처리부분만 참고하세요.
워낙 기본적로직으로만 구현해놓았습니다. 초보자 입장에서 볼수있도록.
버그신고는debuger@gmail.com으로 보내주시고요. 이거 할당시 워낙
실력이 허접해서 문제가 있을수도 있습니다. 127기 님들에게 조금이나마
도움이 될까 걍 올립니다. 그럼 열심히들 하시고 저희보다 훨씬낳은 실력을
가지실거라 믿습니다. 그럼 즐코딩 하세요.(장샘이 즐쓰지말랬는데....ㅈㅅ OTL)


wikix 문법을 잘몰라 주석등은 고치기 해서 보세요. ㅈㅅ.

127기 (if, for, while)참고자료 [제작 : 김경진]

[소스]==================================================================

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>


#define GAWE 1 // 가위
#define BAWE 2 // 바위
#define BOWOO 3 // 보
#define MAXUSER 4 // 최대 컴퓨터 유저
#define OUTFLAG 4 // 나가기
#define GAMECNT 3 // 1 가위 2 바위 3 보 (전체 3가지 경우의 수)


unsigned char me; // 내가 낸 가위바위보
unsigned char p[MAXUSER]; // 컴퓨터들이 낸 가위바위보
unsigned char win, moo, lose; // 나의 승패값을 가진 변수들
unsigned char Twin, Tmoo, Tlose; // 한판이 진행되는동안의 상황의 승부값을 가지는 임시변수


void main() {

 srand((unsigned)time(NULL));


 while(1)
 {
  system("cls"); // 화면갱신
  // 가위 바위 보 입력 (나, 플레이어 1~3)
  printf("입력1.가위/ 2.바위/ 3.보/ 4.나가기 : ");
                scanf("%d", &me);
  
  if (me == OUTFLAG) // 나가기
  {
   printf("나가기를 누르셨습니다.\n");
   break;
  }
  
  for(int cnt=0; cnt < MAXUSER; cnt++)
  {
   p[cnt] = (rand()%GAMECNT) + 1; // 컴퓨터들의 가위바위보 값 셋팅
  }


  // 승패 판정
  for(cnt=0; cnt < MAXUSER; cnt++)
  {
   if(me == GAWE) // 내가 가위 를 냈을경우
   {
    if(cnt < 1) printf("당신은 가위를 내셨습니다.\n");
    switch(p[cnt])
    {
    case GAWE: // 컴퓨터가 가위를 냈을경우
     ++Tmoo;
     break;
    case BAWE: // 컴퓨터가 바위를 냈을경우
     ++Tlose;
     break;
    case BOWOO: // 컴퓨터가 보를 냈을경우
     ++Twin;
     break;
    }
   }
   else if(me == BAWE) // 내가 바위 를 냈을경우
   {
    if(cnt < 1) printf("당신은 바위를 내셨습니다.\n");
    switch(p[cnt])
    {
    case GAWE: // 컴퓨터가 가위를 냈을경우
     ++Twin;
     break;
    case BAWE: // 컴퓨터가 바위를 냈을경우
     ++Tmoo;
     break;
    case BOWOO: // 컴퓨터가 보를 냈을경우
     ++Tlose;
     break;
    }
   }
   else if(me == BOWOO) // 내가 보 를 냈을경우
   {
    if(cnt < 1) printf("당신은 보를 내셨습니다.\n");
    switch(p[cnt])
    {
    case GAWE: // 컴퓨터가 가위를 냈을경우
     ++Tlose;
     break;
    case BAWE: // 컴퓨터가 바위를 냈을경우
     ++Twin;
     break;
    case BOWOO: // 컴퓨터가 보를 냈을경우
     ++Tmoo;
     break;
    }
   }
  }


  //가위 바위 보 승패 판정[학생들이 제일 어려워했던부분]
  if(((Twin > 0) && (Tmoo >= 0)) && (Tlose == 0)) ++win; /// 나의 승리조건
  else if((Twin == 0) && ((Tmoo >= 0) || (Tlose > 0))) ++lose; // 나의 패 조건
  else ++moo; // 나의 무승부__
  
  printf("승 : %d / 패 : %d / 무 : %d \n", win, lose, moo); // 결과 출력


  Twin = Tmoo = Tlose = 0; // 임시 승패상황변수 초기화


  //컴퓨터들이 낸 가위 바위 보출력 화면
  for(cnt=0; cnt < MAXUSER; cnt++)
  {
   switch(p[cnt])
   {
   case GAWE:
    printf("플레어어%d께서 가위를 내셨습니다.\n", cnt+1);
    break;
   case BAWE:
    printf("플레어어%d께서 바위를 내셨습니다.\n", cnt+1);
    break;
   case BOWOO:
    printf("플레어어%d께서 보를 내셨습니다.\n", cnt+1);
    break;
   }
  }
  getch();


 }

}