파일 목록
- 1-Time1-.c
- 1-로또 프로그램 만들기.c
- 1-성적 평균 계산.c
- 1-소스.c
- 1-예제1.c
- 10-1.c
- 10-2.c
- 10-3.c
- 10-4.c
- 10-5.c
- 10-6.c
- 11-1.c
- 11-2.c
- 11-3.c
- 11-4.c
- 11-5.c
- 11-6.c
- 11-make.c
- 12-1-1.c
- 12-1-2.c
- 12-1-3.c
- 12-1-4.c
- 12-2-1.c
- 12-2-2.cpp
- 12-2-3.c
- 12-2-4.c
- 12-2-5.c
- 13-1.c
- 13-2.c
- 13-3.c
- 13-4.c
- 13-5.c
- 13-6.c
- 13-make.c
- 14-1-main.c
- 14-1-power.c
- 14-1-power.h
- 14-2-rect.c
- 14-2-rect.h
- 14-2-rect_main.c
- 14-2-소스.c
- 14-2-소스1.c
- 14-main.c
- 14-reserv.c
- 14-reserv.h
- 2-DICE.c
- 2-minimum.c
- 3-TIC_TAC_TOE.c
- 4-1.c
- 4-2.c
- 4-3.c
- 4-Point.c
- 4-주소.c
- 5-1.cpp
- 5-2.c
- 5-3.c
- 5-4.c
- 5-5.c
- 5-6.c
- 5-7.c
- 6-1.c
- 6-2.c
- 6-3.c
- 6-4.c
- 6-5.c
- 6-6.c
- 6-7.c
- 6-8.c
- 6-make.c
- 7-1.c
- 7-10.c
- 7-11.c
- 7-12.c
- 7-2.c
- 7-3.c
- 7-4.c
- 7-5.c
- 7-6.c
- 7-7.c
- 7-8.c
- 7-9.c
- 7-make.c
- 8.c
- 9.c
- sil1.c
- sil2.c
- sil3.c
- Title.png
- 성적받아오기).c
///////////////////////////////////
///////// TIC-TAC_TOE GAME ////////
///////////////////////////////////
#define _CRT_SECURE_NO_WARNINGS // C4996 에러 제거를 위한 코드 (scanf 에러방지)
#include <stdio.h> // 입-출력을 하기 위한 함수 stdio.h를 불러오기 (표준 입출력)
#include <stdlib.h> // rand() 입력을 위한 라이브러리 불러오기
#include <time.h> // time() 입력을 위한 time.h 불러오기
//컴퓨터가 빈자리에 랜덤으로 입력하는 방식을 이용할것임
void printDI(char a[][3]); // 화면에 표시 함수
int winner(char a[][3], char c); // 승자 판독 함수
int main()
{
char bpan[3][3]; // 3*3 배열 생성 (TIP 보드판을 줄여서 b판이라 하였음)
int x, y, k = 0; // 변수 생성 및 초기화 but x와 y값의 경우 배열 초기화를 하며 초기화되니 제외하였음
srand(time(NULL)); //매번 달라지는 랜덤값 생성
//게임 문구
printf("///////////////////////////////////\n///////// TIC-TAC_TOE GAME ////////\n///////////////////////////////////\n\n\n");
//주의사항
printf("주의\n'x, y'형식으로 입력하면 오류가 발생하니 해당 방식으로 이용하지 말아주세요!\n\n\n");
//보드(배열) 초기화 코드
for (x = 0; x < 3; x++)
for (y = 0; y < 3; y++)
{
bpan[x][y] = ' ';
}
//입력받은 좌표를 보드판에 표시
for (k = 0; k < 9; k++)
{
while (1)
{
printf("\nx와 y의 좌표를 입력해주세요 :\n");
scanf("%d %d", &x, &y);
if (2 < x || 2 < y) // 보드판 범위를 초과한경우
{
printf("좌표값의 크기는 0 ~ 2여야 합니다. 다시 입력하세요.\n");
k--; // 입력 횟수 복원
}
else if (bpan[x][y] != ' ') // 중복된 곳에 입력
{
printf("\n중복된 곳에 입력하셨습니다. 다시 입력해주세요.\n\n");
k--; // 입력 횟수 복원
}
else
{
bpan[x][y] = (k % 2 == 0) ? 'X' : 'O';
printDI(bpan); // 화면 표시 함수 호출
if (winner(bpan, bpan[x][y]) == 1) //승자 판독 함수 호출 및 판독
{
printf("플레이어의의 승리입니다.\n");
k = 9; // 반복 중단값
break; // while문 중단
}
else
k++; // 컴퓨터의 모양 변경을 위한 값
break; // while문 중단
}
}
if (k < 9) //플레이어 승리시 실행되지 않음
{
//컴퓨터의 차례
while (1)
{
x = rand() % 3;
y = rand() % 3;
if (bpan[x][y] == ' ')
{
break;
}
}
printf("\n컴퓨터의 착수\n\n");
bpan[x][y] = (k % 2 == 0) ? 'X' : 'O';
printDI(bpan); // 화면 표시 함수 호출
if (winner(bpan, bpan[x][y]) == 1) //승자 판독 함수 호출 및 판독
{
printf("컴퓨터가 이겼습니다. 풉ㅋ풉ㅋ\n");
k = 9; // 반복 중단
}
}
else
printf("컴퓨터를 이기다니 대단해!");
}
return 0;
}
void printDI(char a[][3]) // 화면 표시 함수
{
int i; // for문에서 초기화가 되므로 초기화하지 않음
for (i = 0; i < 3; i++)
{
printf("---|---|---\n");
printf(" %c | %c | %c\n", a[i][0], a[i][1], a[i][2]);
}
printf("---|---|---\n");
}
int winner(char a[][3], char c) //승자 판독 함수
{
int i, j; // for문에서 초기화가 되므로 초기화지 않음
// 가로
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
if (a[i][j] != c)
break;
if (j == 2)
return 1;
}
// 세로
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
if (a[j][i] != c)
break;
if (j == 2)
return 1;
}
// 대각선1
for (i = 0; i < 3; i++)
{
if (a[i][i] != c)
break;
if (i == 2)
return 1;
}
// 대각선2
for (i = 0; i < 3; i++)
{
if (a[i][2 - i] != c)
break;
if (i == 2)
return 1;
}
return 0;
}