#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;
}
'C언어 프로그래밍' 카테고리의 다른 글
체스판위의 개미 (0) | 2009.09.22 |
---|---|
링크드 리스트 기본 골격 프로그램 (0) | 2009.09.22 |
성적 입력 출력 프로그래밍 (0) | 2009.09.15 |
최소,최대,평균,중간값 구하는 프로그래밍 (0) | 2009.09.15 |
버블 정렬 (0) | 2009.09.15 |