C 언어 로 정자 기 게임 실현
전체 구조:
1.게임 메뉴 의 논리 적 실현
2.게임 본체의 코드 구현
게임 메뉴 의 전체 논리
① 간단하게 0 과 1 을 입력 하 는 switch 함 수 를 통 해 게임 을 하 는 지,게임 을 종료 하 는 지 판단 하 는 논리
1 을 입력 하면 게임 에 들 어 갑 니 다.그리고 game()즉 게임 본 체 를 다 친 후에 도...while 함수 가 1 을 입력 하면 게임 여 부 를 계속 반복 해서 물 어 봅 니 다.
0 을 입력 하면 break 는 게임 을 종료 하고 도...while 순환 을 종료 하 며 프로그램 이 끝 납 니 다.
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf(" >--");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf(" ...exit...
");
break;
default:
printf(" ,
");
}
} while (input);
return 0;
}
② 간단 하고 거 친 메뉴 인쇄 함 수 는 다음 과 같다.
void menu()
{
printf("******************************
");
printf("********** 1.play ***********
");
printf("********** 0.exit ***********
");
printf("******************************
");
}
파 트 2:게임 본체의 실현 은 다음 과 같다.1.우 리 는 먼저 2 차원 배열 보드[ROW][COL]을 바둑판 으로 정의 합 니 다.
char Board[ROW][COL] = { 0 };
전역 변수 ROW 와 COL,즉 줄 수 와 열 수 를 3 으로 정의 합 니 다.
#define ROW 3
#define COL 3
2.바둑판 생 성 후 이 바둑판 초기 화(빌 드 함수)이 함수 에 인삼 을 전달 하려 면 줄 과 열,2 차원 배열(바둑판)이 필요 합 니 다.
initBoard(Board, ROW, COL);
2 층 for 순환 으로 간단하게 2 차원 배열 을'빈 칸'으로 초기 화 합 니 다.
void initBoard(char Board[ROW][COL],int row,int col)
{
int r = 0;
int c = 0;
for (r = 0; r < ROW; r++)
{
for (c = 0; c < COL; c++)
{
Board[r][c] = ' ';
}
}
}
3.초기 화 후 이 바둑판 을 인쇄 하여 인쇄 함 수 를 정의 합 니 다.
showBoard(Board,ROW,COL);
간단 한 세로 선과 빈 칸 으로 바둑판 을 인쇄 하 다.
void showBoard(char Board[ROW][COL], int row, int col)
{
int r = 0;
int c = 0;
printf("
------------
");
for (r = 0; r < ROW; r++)
{
for (c = 0; c < COL; c++)
{
if (c == 2)
{
printf(" %c ", Board[r][c]);
}
else
{
printf(" %c ", Board[r][c]);
printf("|");
}
}
printf("
------------
");
}
printf("
");
}
4.한 유저 가 바둑 을 두 는 함 수 를 구축한다.
PlayerMove(Board, ROW, COL);
유 저 는 아래 좌 표를 입력 한 후 판단 합 니 다:1:플레이어 가 입력 한 좌표 가 바둑판 안에 있 는 지 여부
2:유저 가 입력 한 좌 표 는 이미 하위 가 되 었 습 니까?
간단 한 for 순환 과 if 문장 으로 판단 하면 완성 할 수 있 습 니 다.
그리고 매번 다시 입력 해 야 하 는 상황 에서 바둑판 을 참고 로 인쇄 합 니 다.
void PlayerMove(char Board[ROW][COL], int row, int col)
{
while (1)
{
int r = 0;
int c = 0;
char input = '0';
printf(" :( :1 2)
");
scanf("%d %d", &r, &c);
if (r > 3 || r<1 || c>3 || c < 1)
{
system("cls");
printf(" , !
");
showBoard(Board, ROW, COL);
}
else if (Board[r - 1][c - 1] == 'x' || Board[r - 1][c - 1] == '0')
{
system("cls");
printf(" , !
");
showBoard(Board, ROW, COL);
}
else
{
system("cls");
Board[r-1][c-1] = 'x';
showBoard(Board, ROW, COL);
break;
}
}
}
5.컴퓨터 바둑 을 두 는 함수 구축
PcMove(Board, ROW, COL);
우 리 는 랜 덤 함수 로 간단하게 컴퓨터 바둑(scand()과 rand()를 둔다.컴퓨터 의 좌표 가 이미 내 려 갔 는 지 판단 해 야 한다.
void PcMove(char Board[ROW][COL], int row, int col)
{
int r = 0;
int c = 0;
while (1)
{
r = rand() % ROW;
c = rand() % COL;
if (Board[r][c] != 'x' && Board[r][c] != '0')
{
system("cls");
Board[r][c] = '0';
showBoard(Board, ROW, COL);
break;
}
}
}
6.마지막 으로 승 부 를 판단 하 는 함수여기 서 우 리 는 ret 로 함수 반환 값 을 받 습 니 다.1,2,0 은 각각 우리 가 이 기 는 것 과 컴퓨터 가 이 기 는 것 과 무승부 에 대응 합 니 다.
ret = win(Board, ROW, COL);
정자 기 가 이 기 는 규칙 은 3 행 3 세로 또는 대각선 이 같 으 면 이 기 는 것 이 며,순서대로 판단 하면 된다.
int win(char Board[ROW][COL], int row, int col)
{
int r = 0;
int c = 0;
int sum = 0;
for(r = 0; r < ROW; r++)
{
// 1, 2
//
if (Board[r][0] == Board[r][1] && Board[r][2] == Board[r][1] && Board[r][1] == 'x' || Board[0][r] == Board[1][r] && Board[2][r] == Board[1][r] && Board[1][r] == 'x')
return 1;
if (Board[r][0] == Board[r][1] && Board[r][2] == Board[r][1] && Board[r][1] == '0' || Board[0][r] == Board[1][r] && Board[2][r] == Board[1][r] && Board[1][r] == '0')
return 2;
}
//
if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] == 'x' || Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] == 'x')
return 1;
if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] == '0' || Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] == '0')
return 2;
//
for (r = 0; r < ROW; r++)
{
for (c = 0; c < COL; c++)
{
if (Board[r][c] == 'x'||Board[r][c]=='0')
sum++;
}
}
if (sum == 9)
return 0;
// 3
return 3;
}
7.게임 논리게임 의 논 리 는 게이머 가 가 고 컴퓨터 가 간 후에 한 번 의 승 패 를 판단 해 야 한 다 는 것 이다.바둑 을 두 면 우 리 는 하나의 순환 while(1)로 쓸 수 있다.게임 이 결과 가 있 을 때(승 패 는 무승부)만 break 에서 순환 을 벗 어 나 게임 결 과 를 인쇄 할 수 있다.
void game()
{
int ret = 0;
char Board[ROW][COL] = { 0 };
initBoard(Board, ROW, COL);
showBoard(Board,ROW,COL);
while (1)
{
PlayerMove(Board, ROW, COL);
PcMove(Board, ROW, COL);
ret = win(Board, ROW, COL);
if (ret != 3)
break;
}
if (ret == 1)
{
system("cls");
printf(" !
");
showBoard(Board, ROW, COL);
}
else if (ret == 2)
{
system("cls");
printf(" ?
");
showBoard(Board, ROW, COL);
}
}
요약:1.게임 의 논리 정리
예 를 들 어 매번 게이머 가 가 고 컴퓨터 가 간 후에 한 번 의 승 패 를 판단 해 야 한다.
예 를 들 어 게임 메뉴 의 도...while 와 switch 순환 의 역할.
2.게임 함수 구현 중 함정
예 를 들 어 좌표 가 점용 되 었 다 면 좌 표를 다시 입력 해 야 하 는 상황 을 무시 할 수 없다.
아니면 승패 함수 중 세 가지 서로 다른 승패 조건 에 대한 판단 문제.
전체적으로 말 하면 게임 은 큰 어려움 이 없고 관건 적 인 논 리 를 이해 하면 쓸 수 있 지만 부주의 해 서 는 안 되 고 놓 치기 쉬 운 점 을 놓 치기 쉽다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.