C 언어 로 삼자 기 게임 간이 판 실현
힌트:흑백 바둑 의 일종 이다.삼자 기 는 민간 전통 놀이 로 구 궁 기,동그라미 포크,용 한 마리,정자 기 등 이 라 고도 부른다.정사각형 대각선 을 연결 하여 양쪽 에 세 개의 바둑 알 을 차례대로 놓 고 자신의 세 개의 바둑 알 을 한 줄 로 만 들 면 상대방 이 지 는 것 이다.하지만 비 기 는 경우 가 많다.
하나,삼자 바둑 게임 규칙
자 기 는 OOXX 기,정자 기 등 이 라 고도 하 는데'정'자로 3 을 나눈다×3 의 칸 은 쌍방 이 돌아 가면 서 바둑 알 을 둔다(O 또는 X 로 구별 할 수 있다).자신의 세 바둑 알 을 한 줄 로 만 들 면 승리 한다.
2.기본 절차
삼자 기 코드 를 실현 하기 전에 이 게임 을 실현 하 는 논 리 를 살 펴 보 자.
1.게임 메뉴 를 만 듭 니 다.
2.바둑판 을 만 들 고 초기 화 합 니 다.
3.바둑판 인쇄.
4.플레이어 가 알 을 내리 고 바둑판(좌 표를 통 해)을 인쇄 할 때'o'로 플레이어 의 알 을 표시 합 니 다.
5、승 부 를 판단 합 니 다(유저 의 승 리 를 판단 합 니까?승 리 는 바로 게임 이 끝나 지 않 으 면 계속 진행 된다.
6.컴퓨터 낙 자 와 바둑판(랜 덤 낙 자)을 인쇄 할 때'x'로 컴퓨터 낙 자 를 표시 합 니 다.
7.승부 판단(컴퓨터 승리 여부?승 리 는 바로 게임 이 끝나 지 않 으 면 계속 진행 된다.
8.바둑 을 두 면 2 단계 로 돌아 가 계속 집행 한다.
절차
1.메뉴 인터페이스
1.게임 시작 0,종료:
main.c 는 프로그램의 주체 프레임 워 크 입 니 다.
void menu()
{
printf("****************************
");
printf("********** 1、play *********
");
printf("********** 0、exit *********
");
printf("****************************
");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
char arr[ROW][COL];
menu();
do
{
printf(" ;>
");
scanf("%d", &input);
switch (input)
{
case 1:
game(arr,ROW,COL);
break;
case 0:
break;
default:
printf("
");
break;
}
} while (input);
return 0;
}
인쇄 메뉴 에서 도...while 순환 으로 메뉴 를 한 번 이상 인쇄 할 수 있 습 니 다.아래 는 인쇄 된 메뉴 인터페이스 입 니 다.
2.바둑판 만 들 기
우 리 는 메뉴 창 을 인쇄 한 후에 게임 을 시작 할 수 있 습 니 다.게임 을 하려 면 먼저 바둑판 을 만들어 야 합 니 다.
바둑판:3 줄 3 열의 2 차원 배열 을 사용 하여 요소 유형 은 char 라 고 표시 합 니 다.
#define COL 3
#define ROW 3
**매크로 정 의 를 사용 하 는 이유:1.코드 의 가 독성 을 높이 고 후속 코드 에서 3 을 만 나 의 미 를 쉽게 이해 할 수 있 습 니 다.
2.확장 성 을 향상 시 키 고 앞으로 바둑판 사 이 즈 를 수정 하려 면 코드 수정 이 편리 할 것 입 니 다.
**
3.바둑판 초기 화
우리 가 바둑 을 둘 때,우 리 는 먼저 바둑판 위 가 비어 있다 는 것 을 보증 해 야 하기 때문에,우 리 는 빈 칸 으로 바둑판 을 초기 화 해 야 한다.
void InitBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
4.바둑판 인쇄우리 가 바둑판 을 초기 화 한 후에 우 리 는 바둑판 이 어떤 지 인쇄 해서 다음 코드 와 출력 을 봅 시다.
void diaplayBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ",arr[i][j]);
if(j < col - 1)
printf("|");
}
printf("
");
if(i < col - 1)
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("
");
}
}
5,유저 낙하유 저 는 행렬 좌 표를 입력 하면 타 자 를 표시 하고'*'를 사용 하면 유저 의 타 자 를 표시 합 니 다.
유저 낙하 시 주의사항:
1.플레이어 가 떨 어 지 려 면 바둑판 범위 내 에 있어 야 합 니 다.
2.유 저 는 바둑판 위 에 앉 아야 합 니 다.
3.입력 한 좌표 가 만족 하지 않 으 면 다시 입력 해 야 합 니 다.
void playmove(char arr[ROW][COL], int row, int col)
{
do
{
int x = 0, y = 0;
int i = 0, j = 0;
printf(" :>");
scanf("%d%d", &x, &y);
if ((x > 0 && x <= row) && (y > 0 && y <= col))
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
{
printf("
");
}
}
else
{
printf("
");
}
} while (1);
}
6.컴퓨터 소켓컴퓨터 의 랜 덤 타 자 는'X'는 컴퓨터 의 타 자 를 나타 낸다.컴퓨터 는 랜 덤 으로 떨 어 지기 때문에 우 리 는 랜 덤 좌 표를 만들어 야 하기 때문에 우 리 는 랜 덤 값 이 필요 하 다.
컴퓨터 슬롯 주의사항:
1.주 함수 에 srand(unsigned int)time(NULL)를 사용 합 니 다.
시간 스탬프 를 랜 덤 수의 시작 점(헤더 파일:\#include
2.함수 에서 rand()함 수 를 사용 하여 무 작위 좌표(헤더 파일:\#include
3.바둑판 상공 에서 바둑 을 두 어야 한다.
void computermove(char arr[ROW][COL], int row, int col)
{
do
{
int x = 0, y = 0;
x = rand() % row;
y = rand() % col;
if ((x >= 0 && x <= 2) && (y >= 0 && y <= 2))
{
if (arr[x][y] == ' ')
{
arr[x][y] = '#';
break;
}
}
} while (1);
}
7.승부 판단반환 결 과 를 이용 하여 승 부 를 판단 한다.
4 가지 다른 상 태 를 되 돌려 줍 니 다:
플레이어 승리->'*'
컴퓨터 승리
무승부-->'Q'
계속-->'C'
1.승리
(1)모든 줄 을 판정 합 니 다(한 줄 의 문자 가 모두 같 으 면 승리 합 니 다)
(2)모든 열 을 판정 합 니 다(한 열 문자 가 모두 같 으 면 승리 합 니 다)
(3)두 대각선 판정(한 대각선 문자 모두 동일,즉 승리)
주의:빈 바둑판 의 상황 을 제거 해 야 합 니 다.
2.무승부
(1)IsFull 함 수 를 호출 합 니 다.
(2)1 로 돌아 가면 바둑판 이 꽉 찼 음 을 나타 내 고 0 으로 돌아 가면 바둑판 이 꽉 차지 않 았 음 을 나타 낸다.
(3)바둑판 이 꽉 차 서 승 부 를 가리 지 못 하면 무승부 다.
(4)바둑판 이 채 워 지지 않 으 면 게임 을 계속 합 니 다.
int Is_Full(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][j] != ' ')
{
count++;
}
}
}
if (count == row * col)
{
return 1;
}
return -1;
}
5.다 중 파일 형식우리 가 평소에 코드 를 쓸 때 프로그램 이 크 면 한 파일 에 직접 포함 시 키 는 것 이 어 지 러 워 집 니 다.위 와 같이 한 파일 에 모두 넣 으 면 혼 란 스 럽 고 유지 하기 쉽 지 않 습 니 다.이 럴 때 는 여러 파일 이 필요 합 니 다.다 중 파일 을 사용 할 때 전체 프로그램 을 분리 할 수 있 습 니 다.예 를 들 어 헤더 파일,함수 파일,주 함수 파일 로 나 눌 수 있 습 니 다.물론 필요 하 다 면 계속 세분 화 할 수 있다.
다음 에 우 리 는 위의 삼자 기 코드 를 블록 으로 나 누 어 쓴다.
우선 우 리 는 세 개의 파일 을 만 들 수 있 습 니 다.하나의 헤더 파일 game.h,두 개의 원본 파일 game.c,test.c.
game.h
game.h 에서(ROW 와 COL)와 헤더 파일,그리고 정의 할 함수 에 대한 설명 을 먼저 설명 할 수 있 습 니 다.
game.h 는 각 함수 에 대한 성명 입 니 다.game.c 는 각 함수 의 코드 구현 입 니 다.test.c 는 주 함수 파일 로 각 삼자 기 에 사용 되 는 함수 호출 을 책임 집 니 다.
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define COL 3
#define ROW 3
void game(char arr[ROW][COL], int row, int col);
void InitBoard(char arr[ROW][COL],int row,int col);
void diaplayBoard(char arr[ROW][COL], int row, int col);
void playmove(char arr[ROW][COL], int row, int col);
void computermove(char arr[ROW][COL], int row, int col);
char IsWin(char arr[ROW][COL], int row, int col);
int Is_Full(char arr[ROW][COL], int row, int col);
game.cgame.c 에서\#include"game.h"를 참조 하고 이 를 참조 하면 game.h 에서 정 의 된 변수 와 함 수 를 사용 할 수 있 습 니 다.
#include"game.h"
void game(char arr[ROW][COL], int row, int col)
{
char ch;
InitBoard(arr, row, col);
diaplayBoard(arr, row, col);
while (1)
{
playmove(arr, row, col);
diaplayBoard(arr, row, col);
ch = IsWin(arr, row, col);
if (ch != 'c')
{
break;
}
computermove(arr, row, col);
diaplayBoard(arr, row, col);
ch = IsWin(arr, row, col);
if (ch != 'c')
{
break;
}
}
if (ch == '*')
{
printf("
");
}
else if (ch == '#')
{
printf("
");
}
else if (ch == 'q')
{
printf("
");
}
}
int Is_Full(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][j] != ' ')
{
count++;
}
}
}
if (count == row * col)
{
return 1;
}
return -1;
}
char IsWin(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int count1 = 0;
int count2 = 0;
if (Is_Full(arr, row, col) == 1)
{
return 'q';
}
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
{
return arr[i][1];
}
else if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
{
return arr[i][1];
}
else if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')
{
return arr[0][0];
}
else if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')
{
return arr[0][2];
}
}
}
return 'c';
}
void InitBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
void diaplayBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ",arr[i][j]);
if(j < col - 1)
printf("|");
}
printf("
");
if(i < col - 1)
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("
");
}
}
void playmove(char arr[ROW][COL], int row, int col)
{
do
{
int x = 0, y = 0;
int i = 0, j = 0;
printf(" :>");
scanf("%d%d", &x, &y);
if ((x > 0 && x <= row) && (y > 0 && y <= col))
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
{
printf("
");
}
}
else
{
printf("
");
}
} while (1);
}
void computermove(char arr[ROW][COL], int row, int col)
{
do
{
int x = 0, y = 0;
x = rand() % row;
y = rand() % col;
if ((x >= 0 && x <= 2) && (y >= 0 && y <= 2))
{
if (arr[x][y] == ' ')
{
arr[x][y] = '#';
break;
}
}
} while (1);
}
test.c그리고 test.c 주 함수 파일 에서\#include"game.h"를 참조 하고 이 를 참조 하면 game.h 에서 정 의 된 변수 와 함 수 를 사용 할 수 있 습 니 다.
#include"game.h"
void menu()
{
printf("****************************
");
printf("********** 1、play *********
");
printf("********** 0、exit *********
");
printf("****************************
");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
char arr[ROW][COL];
menu();
do
{
printf(" ;>
");
scanf("%d", &input);
switch (input)
{
case 1:
game(arr,ROW,COL);
break;
case 0:
break;
default:
printf("
");
break;
}
} while (input);
return 0;
}
감사합니다. 이상 은 블 로 거들 이 자신의 이해 조직의 코드 와 표현 형식 에 따라 여러분 에 게 도움 이 되 기 를 바 랍 니 다.총결산
다 중 파일 프로 그래 밍 은 유지 와 개발 에 유리 하 므 로 여러분 들 이 가능 한 한 빨리 이런 좋 은 습관 을 기 르 시기 바 랍 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.