출처 : 반크_백제역사 유적지구와 이스탐블역사 유적지구
문제]
컴퓨터와 게이머가 대결하는 프로그램으로 수정하시오.
조건)
▶ 가로줄, 세로줄, 각 대각선이 같은 문자이면 끝내도록 하시오.
▶ 승부가 나지 않으면 "게이머와 컴퓨터는 비겼습니다."를 출력하시오.
▶ 그외 참고풀이 결과를 참조하여 프로그램을 완성하시오.
참고풀이]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> //srand(), rand()
#include <time.h> //time()
int main()
{
char board[3][3]={ '\0' };
int r, c, y, x;//행열변수
int k, i;
int pn, cn;//게이머 또는 컴퓨터의 같은 문자 개수 체크 변수
int chk;//게임 끝남여부를 체크한다.
//보드를 빈칸으로 초기화한다.
for (r = 0; r < 3; r++)
for (c = 0; c < 3; c++)
board[r][c] = ' ';
//무작위로 발생하도록 초기화한다.
srand(time(NULL));
k = 0;
while (1)
{
k++;
if (k > 9) break;
//사용자로부터 위치를 받아서 보드에 'O'표시한다.
printf("사용자 (x, y)좌표 : ");
scanf("%d%d",&c,&r);
board[r][c] = 'O';
//게이머 선택 위치를 화면에 그린다.
for (i = 0; i < 3; i++)
{
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
}
printf("---|---|---\n");
//게이머가 이겼는지 체크한다.
//Tic-Tac-Toe은 가로줄, 세로줄, 댁각선 중 같은 문자가 3개면 이기는 게임이다.
//가로줄 체크
for (y = 0; y < 3; y++)
{
pn = 0;
for (x = 0; x < 3; x++)
if (board[y][x] == 'O') pn++;
if (pn == 3) break;
}
//세로줄 체크
if (pn != 3)
for (x = 0; x < 3; x++)
{
pn = 0;
for (y = 0; y < 3; y++)
if (board[y][x] == 'O') pn++;
if (pn == 3) break;
}
//대각선 체크
if (pn != 3)
{
pn = 0;
if (board[0][0] == board[1][1] && board[0][0] == board[2][2])
pn = 3;
if (board[0][2] == board[1][1] && board[0][2] == board[2][0])
pn = 3;
}
//승자체크부분
if (pn == 3)
{
printf("\n게이머가 이겼습니다.\n");
break;
}
k++;
if (k > 9) break;
//컴퓨터의 위치를 발생하여
//사용자와 겹치지 않는 곳이라면 보드에 'X'표시한다.
while (1)
{
c = rand() % 3;
r = rand() % 3;
if (board[r][c] == ' ')
{
printf("컴퓨터 (x, y)좌표 : %d %d\n",c,r);
board[r][c] = 'X';
break;
}
}
//컴퓨터 선택 위치를 화면에 그린다.
for (i = 0; i < 3; i++)
{
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
}
printf("---|---|---\n");
//가로줄 체크
for (y = 0; y < 3; y++)
{
cn = 0;
for (x = 0; x < 3; x++)
if (board[y][x] == 'X') pn++;
if (cn == 3) break;
}
//세로줄 체크
if (cn != 3)
for (x = 0; x < 3; x++)
{
cn = 0;
for (y = 0; y < 3; y++)
if (board[y][x] == 'X') pn++;
if (cn == 3) break;
}
//대각선 체크
if (cn != 3)
{
cn = 0;
if (board[0][0] == board[1][1] && board[0][0] == board[2][2])
cn = 3;
if (board[0][2] == board[1][1] && board[0][2] == board[2][0])
cn = 3;
}
//승자체크부분
if (cn == 3)
{
printf("\n컴퓨터가 이겼습니다.\n");
break;
}
}
if (pn != 3 && cn != 3)
printf("\n게이머와 컴퓨터는 비겼습니다.\n");
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도
'프로그램 > C언어 1000제' 카테고리의 다른 글
C언어 199제] 지뢰 찾기(Minesweeper) (0) | 2024.12.19 |
---|---|
C언어 198제] 3n+1 문제(The 3n+1 Porblem) (0) | 2024.12.17 |
C언어 196제] 2006년 ICPC 뉴질랜드 NZPC B번 팰린드롬수 (1) | 2024.12.04 |
C언어 195제] 2004년 한국정보올림피아드 지역본선 중등/고등부 1번 최대공약수와 최소공배수 (0) | 2024.11.30 |
C언어 194제] NPC Lv2. 달팽이2 (0) | 2024.11.30 |
댓글