>  기사  >  백엔드 개발  >  C 언어로 만든 간단한 게임 - 지뢰 찾기 게임

C 언어로 만든 간단한 게임 - 지뢰 찾기 게임

angryTom
angryTom원래의
2020-03-02 10:46:423585검색

이 기사에서는 주로 C 언어로 간단한 지뢰찾기 게임을 구현하는 방법을 자세히 소개합니다. 기사의 샘플 코드는 매우 자세하게 소개되어 있으며 관심 있는 친구들이 참고할 수 있습니다.

C 언어로 만든 간단한 게임 - 지뢰 찾기 게임

C 언어 간단한 게임 - 지뢰 찾기

이 기사의 예는 참고용으로 지뢰 찾기 게임을 C 언어로 구현하는 구체적인 코드를 공유합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <time.h>
/*
 用 C 语言写一个简单的扫雷游戏
*/
// 1.写一个游戏菜单 Menu()
// 2.开始游戏
 // 1.初始化二维数组 Init_Interface()
 // 2.打印游戏界面 Print_Interface()
 // 3.玩家掀起指定位置 Play() --> 指定输入坐标(判断合法性)
 // 1.判断该位置是否是雷
 // 2.判断是否掀掉所有空地
 // 3.如果掀开的是空地,则判断该空地周围是否有雷
  // 1.如果周围有雷,则统计周围雷的个数
  // 2.如果周围没有雷,则掀开周围除了雷的所有空地,并且统计所掀开空地周围雷的个数
 // 4.更新地图
 // 5.继续 3 的循环
 
//定义全局变量:
//定义扫雷地图的长和宽
#define MAX_ROW 9
#define MAX_COL 9
//定义默认的雷数
#define DEFAULT_MINE 9
//定义两个二维数组,分别存放初始地图和雷阵
char show_map[MAX_ROW + 2][MAX_COL + 2];
char mine_map[MAX_ROW + 2][MAX_COL + 2];
 
//写一个游戏菜单
int Menu() {
 printf("=========\n");
 printf("1.开始游戏\n");
 printf("0.结束游戏\n");
 printf("=========\n");
 printf("请选择游戏菜单选项:");
 int choice = 0;
 while (1) {
 scanf("%d", &choice);
 if (choice != 0 && choice != 1) {
  printf("您的输入有误, 请重新输入\n");
  continue;
 }
 break;
 }
 return choice;
}
 
//开始游戏
//初始化数组
void Init_Interface() {
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
  show_map[row][col] = &#39;*&#39;;
 }
 }
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
  mine_map[row][col] = &#39;0&#39;;
 }
 }
 int mine_count = DEFAULT_MINE;
 while (mine_count > 0) {
 int row = rand() % MAX_ROW + 1;
 int col = rand() % MAX_COL + 1;
 if (mine_map[row][col] == &#39;1&#39;) { //将雷设置为 1
  //此处已经有雷
  continue;
 }
 mine_count--;
 mine_map[row][col] = &#39;1&#39;;
 }
}
//打印初始界面
void Print_Interface(char map[MAX_ROW + 2][MAX_COL + 2]) {
 printf("  ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("\n  ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("--");
 }
 printf("\n");
 for (int row = 1; row <= MAX_ROW ; row++) {
 printf("%02d |", row);
 for (int col = 1; col <= MAX_COL; col++) {
  printf("%c ", map[row][col]);
 }
 printf("\n");
 }
}
//写一个统计周围雷数个数的函数
int Around_Mine_count(int row, int col) {
 return (mine_map[row - 1][col - 1] - &#39;0&#39;
 + mine_map[row - 1][col] - &#39;0&#39;
 + mine_map[row - 1][col + 1] - &#39;0&#39;
 + mine_map[row][col - 1] - &#39;0&#39;
 + mine_map[row][col + 1] - &#39;0&#39;
 + mine_map[row + 1][col - 1] - &#39;0&#39;
 + mine_map[row + 1][col] - &#39;0&#39;
 + mine_map[row + 1][col + 1] - &#39;0&#39;);
}
//写一个判断该位置周围是否有雷的函数
int No_Mine(int row, int col) {
 if (Around_Mine_count(row, col) == 0) {
 return 1;
 }
 return 0;
}
//写一个掀开该位置周围空地的函数
void Open_Blank(int row, int col) {
 show_map[row - 1][col - 1] = &#39;0&#39; + Around_Mine_count(row - 1, col - 1);
 show_map[row - 1][col] = &#39;0&#39; + Around_Mine_count(row - 1, col);
 show_map[row - 1][col + 1] = &#39;0&#39; + Around_Mine_count(row - 1, col + 1);
 show_map[row][col - 1] = &#39;0&#39; + Around_Mine_count(row, col - 1);
 show_map[row][col + 1] = &#39;0&#39; + Around_Mine_count(row, col + 1);
 show_map[row + 1][col - 1] = &#39;0&#39; + Around_Mine_count(row + 1, col - 1);
 show_map[row + 1][col] = &#39;0&#39; + Around_Mine_count(row + 1, col);
 show_map[row + 1][col + 1] = &#39;0&#39; + Around_Mine_count(row + 1, col + 1);
}
//写一个判断游戏结束的函数
int Success_Sweep(char show_map[MAX_ROW + 2][MAX_COL + 2]) {
 int count = 0;
 for (int row = 1; row <= MAX_ROW; row++) {
 for (int col = 1; col <= MAX_COL; col++) {
  if (show_map[row][col] == &#39;*&#39;) {
  count++;
  }
 }
 }
 if (count == DEFAULT_MINE) {
 return 1;
 }
 return 0;
}
//开始游戏
void StartGame() {
 while (1) {
 printf("请输入您要掀开的坐标:");
 int row = 0;
 int col = 0;
 while (1) {
  scanf("%d %d", &row, &col);
  if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {
  printf("您的输入有误,请重新输入!\n");
  continue;
  }
  if (show_map[row][col] != &#39;*&#39;) {
  printf("该位置已被掀开,请重新选择\n");
  continue;
  }
  break;
 }
 //判断该地方是否有雷
 if (mine_map[row][col] == &#39;1&#39;) {
  Print_Interface(mine_map);
  printf("该地方有雷,游戏结束!!!\n");
  break;
 }
 if (No_Mine(row, col)) {
  show_map[row][col] = &#39;0&#39;;
  Open_Blank(row, col);
 }
 show_map[row][col] = &#39;0&#39; + Around_Mine_count(row, col);
 //判断是否掀开所有空地
 if (Success_Sweep(show_map) == 1) {
  Print_Interface(mine_map);
  printf("您已成功扫雷!!!\n");
  break;
 }
 system("cls");
 //更新地图
 Print_Interface(show_map);
 }
}
 
int main() {
 if (Menu() == 0) {
 exit(0);
 }
 srand((unsigned int)time(NULL));
 Init_Interface();
 Print_Interface(show_map);
 StartGame();
 
 system("pause");
 return 0;
}

렌더링:

C 언어로 만든 간단한 게임 - 지뢰 찾기 게임

숫자는 주변 광산 수를 나타냅니다

더 많은 C 언어 튜토리얼을 보려면 C 언어 동영상 튜토리얼을 시청하는 것이 좋습니다!

위 내용은 C 언어로 만든 간단한 게임 - 지뢰 찾기 게임의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.