C 언어 판 삼자 기 미니 게임
① 게임 효과
4.567917.3*3 의 바둑판 이 있 습 니 다.4.567918.
4.567917.매번 바둑 을 두 면(컴퓨터 와 게이머)바둑판 은 데 이 터 를 업데이트 합 니 다
② 주 함수 논리 구축
모든 프로젝트 의 실현 은 가장 중요 한 것 은 논리 구조 구축 이 고 각 기능 의 실현 은 함수(모듈 화)로 세분 화 하 는 것 이다.
그래서 우 리 는 논 리 를 세 워 야 한다.그렇다면 논리 구 조 는 무엇 일 까?
#include <stdio.h>
int main()
{
int input = 0;
do
{
remind(); //
scanf("%d",&input); //
switch (input)
{
case 0:
printf("
");
break;
case 1:
playgame(); //
printf("
");
break;
default :
printf(" ,
");
break;
}
} while (input);
return 0;
}
③ 게임 모듈(playgame)논리 구축앞의 논리 구 조 는 이미 구축 되 었 고 우리 가 실현 해 야 할 것 은 바로 playgame()모듈 이다.
그렇다면 그의 기능 논 리 는 무엇 일 까?
4.567917.바둑판 내용 은 2 차원 배열 로 저장 합 니 다4.567917.바둑판 초기 화(즉 바둑판 에 아직 실력 이 없 음).그래서 초기 화 는 하나의 단독 모듈 입 니 다
#define row 3
#define col 3
void playgame()
{
char board[row][col]; //
int result = 0; // Iswin
Initboard(board, row, col); // ,
Displayboard(board, row, col); // ,
while (1) // ,
{
player(board, row, col); //
if ((result = Iswin(board, row, col)) == 1) break; // Iswin , 1
computer(board, row, col); //
if ((result = Iswin(board, row, col)) == -1) break; // Iswin , -1
if (!result) break; // 0 , ,
}
if (result == 1) printf(" !!!!!!!!!
");
else if (result == -1) printf(" ,
");
else printf(" ~~, ,
");
}
설명:플레이 게임()함수 의 논리 구 조 를 뚜렷하게 이해 할 수 있 습 니 다.
그 중 한 단 계 는 이러한 if(Iswin(board,row,col)>=0)입 니 다.그 실행 은 먼저 함수(우리 가 누가 이 겼 는 지 판단 해 야 하 는 요 구 를 만족 시 키 는 것)를 호출 한 다음 에 반환 결 과 를 이용 하여 순환 이 끝 났 는 지 판단 하고 한 프로그램 이 두 가지 효 과 를 얻 는 것 이 좋 습 니 다.
④ 분기 모듈 의 구체 적 인 실현
0.remind 함수 구현
힌트 역할 을 하 니 직접 인쇄 하면 됩 니 다.
void remind()
{
printf("+------------------------------------------+
"
"+-------------- 0 --------------+
"
"+----------- 1 / ------------+
"
"+------------------------------------------+
");
}
1.Initboard 함수 구현초기 화 함수 인 만큼 2 차원 배열 board 를 전체 빈 칸 으로 초기 화 하 는 것 이 우리 의 요구 임 을 설명 합 니 다.
void Initboard(char(*board)[3],int Row,int Col )
{
int i = 0, j = 0;
for (i = 0; i < Row; i++)
{
for (j = 0; j < Col; j++)
{
board[i][j] = ' '; //
}
}
}
2.Displayboard 함수 구현바둑판 내용 을 표시 하 는 것 은 2 차원 배열 board 의 내용 뿐만 아니 라 경계(그림 참조)도 표시 하기 때문에 Displayboard 의 요 구 는 무엇 입 니까?
경 계 를 표시 할 뿐만 아니 라 board 의 저장 내용 도 표시 해 야 합 니 다.
그리고 경 계 를 표시 하면 우 리 는 작은 블록 으로 나 누 어 순환 해서 표시 할 수 있 습 니 다.예 를 들 어 3 개의 선형 과 마지막 아래 경 계 를 볼 수 있 습 니 다.
각 선형 은 세 개의 작은 사각형 에 작은 오른쪽 경 계 를 더 한 것 으로 볼 수 있다.
void Displayboard(char(*board)[3], int Row, int Col)
{
int i = 0, j = 0;
for (i = 0; i < Row; i++)
{
printf("+---+---+---+
"); //
for (j = 0; j < Col; j++)
{
printf("| %c ",board[i][j]); //
}
printf("|
"); //
}
printf("+---+---+---+
"); //
}
3.player 함수 구현플레이어 가 바둑 을 두 는 것 은 좌표 입력 방식 을 채택 한다
플레이어 가 좌 표를 입력 하면 바둑판 의 해당 위 치 를 업데이트 해 야 합 니 다.(해당 위 치 는*로 표시)
좌 표를 입력 할 때 이 위치 가 이미 떨 어 졌 는 지 확인 해 야 한다.
void player(char(*board)[3], int Row, int Col)
{
printf(" ( ):
");
scanf("%d%d", &Row, &Col);
while (1)
{
if (((1 <= Row) && (Row <= 3)) // ,
&& ((1 <= Col) && (Col <= 3))
&& (board[Row-1][Col-1] == ' '))
{
board[Row - 1][Col - 1] = '*'; // Row - 1 Col - 1 , 0
break;
}
else
{
printf(" , , .
");
printf(" :
");
scanf("%d%d", &Row, &Col);
}
}
printf(" !
");
Displayboard(board, row, col); // ,
}
4.Iswin 함수 구현게이머 나 컴퓨터 를 사용 한 후,쌍방 이 이 길 수 있 는 지 여 부 를 판단 해 야 한다.
Iswin 의 역할 은 한 쪽 이 이 기 는 지 아 닌 지 를 판단 하 는 것 이다.
그 중에서 반환 치 1 은 유저 의 승 리 를 대표 하고 반환 치 0 은 무승부 이 며 반환 치-1 은 컴퓨터 가 이 기 는 것 을 대표 합 니 다.
승 리 를 판단 하 는 방법 은 줄 마다 열 과 사선 이 같은 지,지지 않 고 이 길 수 없 는 지 를 검사 하 는 것 이다.
int Iswin(char(*board)[3], int Row, int Col)
{
// ?? , , , ( )
for (int i = 0; i < Row; i++) //
{
if ((board[i][0] == board[i][1])
&& (board[i][1] == board[i][2])
&& (board[i][0] != ' '))
{
if (board[i][0] == '*') return 1; // *, ,
return -1;
}
}
for (int j = 0; j < Col; j++) //
{
if ((board[0][j] == board[1][j])
&& (board[1][j] == board[2][j])
&& (board[0][j] != ' '))
{
if (board[0][j] == '*') return 1; // *, ,
return -1;
}
}
if (((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[1][1] != ' ')) //
||((board[0][2] == board[1][1]) && (board[1][1] ==board[2][0]) && (board[1][1] != ' ')))
{
if (board[1][1] == '*') return 1;
return -1;
}
for (int i = 0; i < Row; i++)
{
for (int j = 0; j < Col; j++)
{
if (board[i][j] == ' ')
return -2; // ,
// , . [-1,1]
}
}
return 0; // 4
}
5.computer 함수 구현컴퓨터 다운로드 이기 때문에 우 리 는 조작 할 수 없 기 때문에 컴퓨터 를 랜 덤 으로 다운로드 할 수 밖 에 없다.결함 은 컴퓨터 가 약간 지능 장애 가 있다 는 것 이다.하하.
#include <stdlib.h>
#include <time.h>
void computer(char(*board)[3], int Row, int Col)
{
srand(time(NULL));
while (1)
{
int i = rand() % 3;
int j = rand() % 3;
if (board[i][j] == ' ')
{
board[i][j] = '#';//#
break;
}
}
printf(" :
");
Displayboard(board, row, col); // ,
}
⑤ 전체 코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define row 3
#define col 3
void remind()
{
printf("+------------------------------------------+
"
"+-------------- 0 --------------+
"
"+----------- 1 / ------------+
"
"+------------------------------------------+
");
}
void Initboard(char(*board)[3],int Row,int Col )
{
int i = 0, j = 0;
for (i = 0; i < Row; i++)
{
for (j = 0; j < Col; j++)
{
board[i][j] = ' '; //
}
}
}
void Displayboard(char(*board)[3], int Row, int Col)
{
int i = 0, j = 0;
for (i = 0; i < Row; i++)
{
printf("+---+---+---+
");
for (j = 0; j < Col; j++)
{
printf("| %c ",board[i][j]);
}
printf("|
");
}
printf("+---+---+---+
");
}
void player(char(*board)[3], int Row, int Col)
{
printf(" ( ):
");
scanf("%d%d", &Row, &Col);
while (1)
{
if (((1 <= Row) && (Row <= 3)) // ,
&& ((1 <= Col) && (Col <= 3))
&& (board[Row-1][Col-1] == ' '))
{
board[Row - 1][Col - 1] = '*'; // Row - 1 Col - 1 , 0
break;
}
else
{
printf(" , , .
");
printf(" :
");
scanf("%d%d", &Row, &Col);
}
}
printf(" !
");
Displayboard(board, row, col); // ,
}
void computer(char(*board)[3], int Row, int Col)
{
srand(time(NULL));
while (1)
{
int i = rand() % 3;
int j = rand() % 3;
if (board[i][j] == ' ')
{
board[i][j] = '#';//#
break;
}
}
printf(" :
");
Displayboard(board, row, col); // ,
}
int Iswin(char(*board)[3], int Row, int Col)
{
// ?? , , , ( )
for (int i = 0; i < Row; i++) //
{
if ((board[i][0] == board[i][1])
&& (board[i][1] == board[i][2])
&& (board[i][0] != ' '))
{
if (board[i][0] == '*') return 1; // *, ,
return -1;
}
}
for (int j = 0; j < Col; j++) //
{
if ((board[0][j] == board[1][j])
&& (board[1][j] == board[2][j])
&& (board[0][j] != ' '))
{
if (board[0][j] == '*') return 1; // *, ,
return -1;
}
}
if (((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[1][1] != ' ')) //
||((board[0][2] == board[1][1]) && (board[1][1] ==board[2][0]) && (board[1][1] != ' ')))
{
if (board[1][1] == '*') return 1;
return -1;
}
for (int i = 0; i < Row; i++)
{
for (int j = 0; j < Col; j++)
{
if (board[i][j] == ' ')
return -2; // ,
// , . [-1,1]
}
}
return 0; // 4
}
void playgame()
{
char board[row][col]; //
int result = 0; // Iswin
Initboard(board, row, col); // ,
Displayboard(board, row, col); // ,
while (1) // ,
{
player(board, row, col); //
if ((result = Iswin(board, row, col)) == 1) break; // Iswin , 1
computer(board, row, col); //
if ((result = Iswin(board, row, col)) == -1) break; // Iswin , -1
if (!result) break; // 0 , ,
}
if (result == 1) printf(" !!!!!!!!!
");
else if (result == -1) printf(" ,
");
else printf(" ~~, ,
");
}
#include <stdio.h>
int main()
{
int input = 0;
do
{
remind(); //
scanf("%d", &input); //
switch (input)
{
case 0:
printf("
");
break;
case 1:
playgame(); //
printf("
");
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에 따라 라이센스가 부여됩니다.