본문 바로가기

C언어 프로그래밍

틱택토


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void pan(char pos[3][3]);
char gyul(char pos[3][3]);
int err(char pos[3][3],char he,int ho);

int main(int argc, char *argv[])
{
 int i=0,j=0,num=0,win=0,cnt=0;
 int ho=0;
 char user[2] = {'O','X'};
 char he=0;
 char pos[3][3];
 for(i=0;i<3;i++){
   for(j=0;j<3;j++){
   pos[i][j]=0;
   }
 }
 
 pan(pos);

 while(1){
  
  printf("[user%c] 돌을 놓을 자리를 정하세요 : ",user[num]);
     //scanf특성상 때문에 enter키를 잡아주는 getchar();를 넣어줘야 한다.
  scanf("%c %d",&he,&ho); 
  if(err(pos,he,ho)==1){
   printf("값의 범위를 넘어섰습니다. 다시 입력하십시오\n");
   getchar();continue;
  }
  else if(err(pos,he,ho)==2) printf("이미 돌이 두어져 있습니다. 다시 입력하심시오\n"); 
  else{
    pos[he-65][ho-1]=user[num];
    cnt++;
    num++;
    system("cls");   
    pan(pos);
     }
  win = gyul(pos);   
  getchar();   
  
  if(num>1) num=0;
  if(cnt >8 && win==3){
   printf("승부가 나지 않았습니다. 게임을 종료합니다.\n");
   return 0;
  }
  if(cnt>8 || win!=3) break;
 }
 num--; 
 printf("승자는 %c플레이어 입니다\n", user[num]);
 return 0;
}

void pan(char pos[3][3]){
  printf("\t   ############################\n");
  printf("\t   #     틱택토 게임 시작     #\n");
  printf("\t   ############################\n");
  printf("\t\t   1   2   3\n");
  printf("\t\t +---+---+---+\n");
  printf("\t\tA| %c | %c | %c |\n",pos[0][0],pos[0][1],pos[0][2]);
  printf("\t\t +---+---+---+\n");
  printf("\t\tB| %c | %c | %c |\n",pos[1][0],pos[1][1],pos[1][2]);
  printf("\t\t +---+---+---+\n");
  printf("\t\tC| %c | %c | %c |\n",pos[2][0],pos[2][1],pos[2][2]);
  printf("\t\t +---+---+---+\n"); 
}

int err(char pos[3][3],char he,int ho){
 if(ho<1 || ho>3 || he<65 || he>68) return 1;
 else if(pos[he-65][ho-1] != 0) return 2;
 else return 0;
}

char gyul(char pos[3][3]){
 if(pos[0][0] != 0){
  if(pos[0][0] == pos[0][1] && pos[0][0] == pos[0][2]) return pos[0][0];// 가로방향
  if(pos[0][0] == pos[1][0] && pos[0][0] == pos[2][0]) return pos[0][0];// 세로방향
  if(pos[0][0] == pos[1][1] && pos[0][0] == pos[2][2]) return pos[0][0];// 5시방향
 }
 if(pos[1][1] != 0){
  if(pos[1][1] == pos[1][0] && pos[1][1] == pos[1][2]) return pos[1][1];// 가로방향
  if(pos[1][1] == pos[0][1] && pos[1][1] == pos[2][1]) return pos[1][1];// 세로방향
  if(pos[1][1] == pos[0][2] && pos[1][1] == pos[2][0]) return pos[1][1];// 7시방향

 }
 if(pos[2][2] != 0){
  if(pos[2][2] == pos[2][0] && pos[2][2] == pos[2][1]) return pos[2][2];// 아랫줄
  if(pos[2][2] == pos[0][2] && pos[2][2] == pos[1][2]) return pos[2][2];// 오른쪽 줄
 }
 return 3;
 
}