C 언어 삼자 기 게임 실현 코드 분석
프로 그래 밍 환경:Visual Studio 2019
(1)파일 생 성
논리 적 이 고 뚜렷 한 프로 그래 밍 을 위해 우 리 는 먼저 game.h 라 는 헤더 파일 을 만 들 고 게임 함수 로 설명 합 니 다.두 개의 소스 파일,하 나 는 text,c 로 테스트 하고 다른 game,c 는 게임 함수 로 이 루어 집 니 다.그림 과 같 습 니 다.
(2)사고방식 분석
먼저 게임 인터페이스 에 들 어가 인터페이스 인쇄 를 하고 주 함수 에서 메뉴 함 수 를 인용 하여 게임 을 반복 할 수 있 도록 함 수 를 do-while 순환 내부 에 놓 습 니 다.그 다음 에 유 저 는 게임 선택 을 하고 주 함수 에서 switch 문 구 를 활용 하여 선택 한 내용 을 판단 합 니 다.
int main()
{
int put;
do
{
menu();
printf(" :");
scanf("%d", &put);
switch (put)
{
case 1:
system("cls");
game(); //
break;
case 0:
printf(" !!!");
break;
default:
printf(" , !!");
system("cls");
}
} while (put);
return 0;
}
void menu()//
{
printf("*******************************
");
printf("********* 1. ************
");
printf("********* 0. **************
");
printf("*******************************
");
}
인터페이스 가 완 료 된 후에 바둑판 의 인쇄 를 고려 해 야 합 니 다.게이머 들 이 게임 을 선택 할 때 우 리 는 인쇄 된 바둑판 이 이 렇 기 를 바 랍 니 다.우리 가 5*5 의 바둑판 이나 더 큰 바둑판 인쇄 를 하고 싶 을 때 전역 변수 X,Y 는 각각 줄 수 와 열 수 를 표시 하여 변경 하기에 더욱 편리 하 다.
이 럴 때 문자 배열 을 이용 하여 각 배열 의 유닛 에 값 을 빈 칸 으로 부여 한 다음 인쇄 할 수 있 습 니 다.
void begin(char arr[X][Y], int x, int y) //
{
int i = 0;
int j = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
arr[i][j] = ' '; //
}
}
void Print(char arr[X][Y], int x, int y) //
{
int i = 0;
int j = 0;
int k = 0;
for (i = 0;i < x;i++)
{
for (j = 0;j < y;j++)
{
if (j == y - 1)
printf(" %c
", arr[i][j]);
else
printf(" %c |", arr[i][j]);
if (j==y - 1)
{
if (i != x - 1)
{
for (k = 0;k < y;k++)
{
if (k == y - 1)
{
printf("---
");
break;
}
printf("---|");
}
break;
}
}
}
}
}
그 다음 에 게이머 들 이 바둑 을 두 는 함수 와 컴퓨터 바둑 함 수 를 설정 하고 게이머 들 이 바둑 을 두 는 좌 표를 대응 하 는 배열 의 단위 로'*',컴퓨터 바둑 좌 표를 대응 하 는 배열 의 단위 로'\#',게이머 들 이 바둑 을 둘 때 먼저 두 어야 할 좌 표를 입력 하고 좌 표를 입력 한 후에 이 위치 가 이미 두 었 는 지 판단 해 야 한다.이 때 다음 위치 가 빈 칸 인지 아 닌 지 를 판단 하려 면 빈 칸 이 아니면 다시 입력 해 야 합 니 다.컴퓨터 에서 바둑 을 둘 때 랜 덤 수 를 생 성 합 니 다.생 성 된 랜 덤 수 를 배열 아래 표 범위 내 에서 생 성 된 랜 덤 수 대 x,y 취 여 를 위해 rand 함수 의 범 위 를 확대 하기 위해 srand 함 수 를 참조 하여 함수 내부 에 기호 없 는 time 함 수 를 배치 해 야 합 니 다.생 성 된 수의 진정한 의미 에서 랜 덤 을 보장 합 니 다.
void gamer(char arr[X][Y], int x, int y)//
{
int a, b;
scanf("%d %d", &a, &b);
if (a > 0 && a <= x && b > 0 && b <= y)
{
if (arr[a - 1][b - 1] != ' ')
{
printf(" , :");
gamer(arr, x, y);
}
arr[a - 1][b - 1] = '*';
}
else
{
printf(" , :");
gamer(arr, x, y);
}
}
void computer(char arr[X][Y], int x, int y)
{
int a = rand() % x;
int b = rand() % y;
if (arr[a][b] == ' ')
{
arr[a][b] = '#';
}
else
{
computer(arr, x, y);
}
}
게이머 컴퓨터 가 바둑 을 둔 후에 승 패 를 판단 하고 win 함 수 를 인용 하여 가로 줄 이나 세로 줄 또는 대각선 이 같 을 때 같은 요소 의 값 을 되 돌려 줍 니 다.예 를 들 어 첫 번 째 줄 은 모두'*'이면'*'로 되 돌아 가 고 반환 값 에 따라 게이머 가 이 기 는 것 으로 판단 합 니 다.반환 값 이'*'또는'\#'일 때 게임 이 끝 났 거나 게이머 가 이 겼 거나 컴퓨터 가 이 겼 다 고 판단 하고 반환 값 이'일 때 게임 이 계속 되 고 상기 판단 이 성립 되 지 않 을 때 게임 화면 이 꽉 찼 는 지 판단 하 며 존재 하지 않 으 면 무승부 입 니 다.
char win(char arr[X][Y], int x, int y)//
{
char ch = 'C';
int flag = 0;
for (int i = 0; i < x; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][1] == arr[i][2])//
{
return arr[i][0];
}
}
for (int j = 0; j < y; j++)
{
if (arr[0][j] == arr[1][j] && arr[0][j] == arr[2][j] && arr[1][j] == arr[2][j])//
{
return arr[0][j];
}
}
if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')//
{
return arr[0][0];
}
if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')//
{
return arr[0][2];
}
for (int m = 0; m < x; m++)//
{
for (int n = 0; n < y; n++)
{
if (arr[m][n] == ' ')
flag = 1;
}
}
if (flag == 0)
{
ch = 'Q';
}
return ch;
}
void game()//
{
srand((unsigned int)time(NULL));
char arr[X][Y];
begin(arr, X, Y);
char rat;
Print(arr, X, Y);
while (1)
{
rat = win(arr, X, Y);
printf(" :");
gamer(arr, X, Y);
Print(arr, X, Y);
rat = win(arr, X, Y);
if (rat != 'C' && rat != ' ')
{
break;
}
printf("
");
computer(arr, X, Y);
Print(arr, X, Y);
rat = win(arr, X, Y);
if (rat != 'C' && rat != ' ')
{
break;
}
}
switch (rat)
{
case '*':
printf(" !
");
break;
case '#':
printf(" !
");
break;
case 'Q':
printf("
");
break;
}
printf("
");
system("cls");
}
편 의 를 위해 서,우 리 는 인용 한 헤더 파일 과 함 수 를 game.h 아래 에 놓 고,다른 파일 은 game.h 를 직접 인용 하면 됩 니 다.
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define X 3
#define Y 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu();
void game();
void begin(char arr[X][Y], int x, int y);
void Print(char arr[X][Y], int x, int y);
void gamer(char arr[X][Y], int x, int y);
void computer(char arr[X][Y], int x, int y);
char win(char arr[X][Y], int x, int y);
(3)효과 전시이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.