C 언어 지뢰 제거 게임(다 중 파일)
8231 단어 C 언어지뢰 를 제거 하 다
게임 기능:
① 뇌 판 인쇄
② 랜 덤 브 레
③ 첫 번 째 지뢰 는 밟 아 도 죽지 않 는 다(리 브 레)
④ 확장 식 지뢰 제거
⑤ 주변 천둥 의 개 수 를 계산한다.
코드 포인트:
① 게임 을 하 는 뇌 판 은 실제 정 의 된 배열 보다 작다.
② memset 에서 배열 초기 화(바이트 단위 로 초기 화).
③ rand 함 수 는 뇌 판 에 랜 덤 위치 브 레(Sand 로 랜 덤 피 드 설정)를 줍 니 다.
④ 첫 번 째 단계 에서 천둥 을 밟 고 이 천둥 을 치 워 게이머 에 게 기 회 를 준다.
⑤ 지뢰 를 밟 은 후 상황 에 따라 확장 식 지뢰 배출 여 부 를 결정 한다.
⑥ 지뢰 배출 위치 주변 지뢰 의 개 수 를 되 돌려 주 고,지뢰 의 수량 에 따라 확장 지뢰 배출 여 부 를 결정 한다.
⑦ 입력 한 좌표 주변 에 천둥 이 치면 확장 식 천둥 을 치지 않 고 그 위치 에서 천둥 의 개 수 를 출력 한다.
⑨ 입력 한 좌표 주변 에 천둥 이 없 으 며 확장 식 지뢰 를 배출한다.
⑨ 확장 식 배 뢰 함수 의 형 삼 과 함수 재 귀 가 형 삼 에 미 친 영향 에 주의 하 세 요.
『9321』함수 재 귀 를 진행 하 는 판단 조건 에 주의 하 세 요.
1.game.h
#ifndef __GAME_H__
#define __GAME_H__
#define COLS 11
#define ROWS 11
#define MAX 10
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
void Display(char arr[COLS][ROWS], int col, int row);
void set_mine(char mine[COLS][ROWS], int col, int row);
int get_mine_count(char mine[COLS][ROWS],int x,int y);
void reset_mine(char mine[COLS][ROWS], int col, int row, int x, int y);
void extend(char mine[COLS][ROWS], int x, int y, int* win, char show[COLS][ROWS]);
#endif //__GAME_H__
2.game.c
#include "game.h"
void Display(char arr[COLS][ROWS], int col, int row) //
{
int i = 0;
int j = 0;
printf(" ");
for (i = 1; i < col-1; ++i) //
{
printf("%2d ", i);
}
printf("
");
for (i = 1; i < col - 1; ++i)
{
printf("%d", i); //
for (j = 1; j < row - 1; ++j)
{
printf("%2c ", arr[i][j]);
}
printf("
");
}
}
void set_mine(char mine[COLS][ROWS], int col, int row) //
{
int count = MAX;
while (count)
{
int i = rand() % (col - 2) + 1;
int j = rand() % (row - 2) + 1;
if (mine[i][j] != '1')
{
mine[i][j] = '1';
count--;
}
}
}
void reset_mine(char mine[COLS][ROWS], int col, int row, int x, int y) //
{
mine[x][y] = '0';
int count = 1;
while (count)
{
int i = rand() % (col - 2) + 1;
int j = rand() % (row - 2) + 1;
if ((mine[i][j] != '1') && (i != x) && (j != y))
{
mine[i][j] = '1';
count--;
}
}
}
int get_mine_count(char mine[COLS][ROWS], int x, int y) // (x,y) int
{
return mine[x+1][y ] +
mine[x+1][y-1] +
mine[x ][y-1] +
mine[x-1][y-1] +
mine[x-1][y ] +
mine[x-1][y+1] +
mine[x ][y+1] +
mine[x+1][y+1] -8 * '0';
}
void extend(char mine[COLS][ROWS], int x, int y, int* win, char show[COLS][ROWS]) //
{
int i = -1;
int j = -1;
for (i = -1; i < 2; ++i)
{
for (j = -1; j < 2; ++j)
{
if ((i != 0) || (j != 0))
{
if (x + i >= 1 && x + i <= COLS-2 && y + j >= 1 && y + j <= ROWS-2)
{
if (show[x + i][y + j] == '*')
{
int count = get_mine_count(mine, x + i, y + j);
if (count != 0)
{
show[x + i][y + j] = count + '0';
(*win)++;
}
else if (0 == count)
{
show[x + i][y + j] = '0';
(*win)++;
extend(mine, x + i, y + j, win, show);
}
}
}
}
}
}
}
3.test.c
#include "game.h"
void game()
{
int x = 0;
int y = 0;
int win = 0; //
srand((unsigned int)time(NULL)); //
char mine[COLS][ROWS] = { '0' };
memset(mine, '0', COLS*ROWS*sizeof(mine[0][0])); // memset ‘0'
char show[COLS][ROWS] = { '0' };
memset(show, '*', COLS*ROWS*sizeof(show[0][0])); // ‘*'
Display(show,COLS,ROWS);
printf("
");
set_mine(mine, COLS, ROWS); // , MIX
Display(mine, COLS, ROWS);
while ( win<( (COLS-2)*(ROWS-2)-MAX ) ) //
{
printf(" :");
scanf_s("%d%d", &x, &y);
if ((x >= 1) && (x <= COLS-2) && (y >= 1) && (y <= ROWS-2))
{
if (show[x][y] == '*')
{
if (mine[x][y] == '1')
{
if (0 == win) // , ,
{
reset_mine(mine,COLS,ROWS,x,y);
int count = get_mine_count(mine, x, y);
if (count != 0) // ,
{
show[x][y] = count + '0';
win++;
system("cls");
Display(show, COLS, ROWS);
}
else
{
show[x][y] = '0';
win++;
extend(mine, x, y, &win, show);
system("cls");
Display(show, COLS, ROWS);
}
}
else
{
printf(" , !
"); // ,
Display(mine, COLS, ROWS);
break;
}
}
else
{
int count = get_mine_count(mine, x, y);
if (count != 0) // ,
{
show[x][y] = count + '0';
win++;
system("cls");
Display(show, COLS, ROWS);
}
else
{
show[x][y] = '0';
win++;
extend(mine, x, y, &win, show);
system("cls");
Display(show, COLS, ROWS);
}
}
}
else
{
printf(" ,
");
}
}
else
{
printf(" ,
");
}
}
if (win == ((COLS - 2)*(ROWS - 2)) - MAX)
{
printf(" ,
");
Display(mine, COLS, ROWS);
}
}
void menu()
{
printf("*******************************
");
printf("***** 1. play 2. exit*****
");
printf("*******************************
");
}
void test()
{
do
{
menu();
int input = 0;
printf(" :");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
exit(0);
break;
default:
printf("
");
break;
}
} while (1);
}
int main()
{
test();
}
지뢰 해제 에 성공 하 다.지뢰 해제 실패
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.