iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >用C语言实现扫雷小游戏
  • 288
分享到

用C语言实现扫雷小游戏

2024-04-02 19:04:59 288人浏览 八月长安
摘要

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下

1. 规则

随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷,2就有两个雷······;
最终任务就是点开所有没有雷的格子,则取得更好的分数,如果点开的格子是雷,则游戏结束。

2. 编写思路

2.1 编写选择界面

同上个小游戏一样,首先编写选择界面,输入1为开始游戏,输入2则退出游戏。


void Menu()
{
 printf("##########################\n");
 printf("##   1:Play    2:Exit   ##\n");
 printf("##########################\n");
 printf("请输入# ");
}

2.2 编写执行程序

执行程序需要检测点开的格子(这里输入的方式为输入坐标)周围的八个格子有多少个雷,并在该格子上显示雷的个数。


int GetMines(char mine[][COL], int row, int col, int x, int  y)
{
 return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + \
  mine[x][y - 1] + mine[x][y + 1] + \
  mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}

2.3 编写设置雷的个数

宏定义雷的个数为NUMS(NUMS 20);然后随机排布雷的位置。


void SetMines(char mine_board[][COL], int row, int col)
{
 int count = NUMS;  //设置雷
 while (count){
  int x = rand() % 10 + 1;
  int y = rand() % 10 + 1;
  if (mine_board[x][y] == '0'){
   mine_board[x][y] = '1';
   count--;
  }
 }
}

2.4 游戏界面的设置

以二维数组的方式设置游戏界面,这里实际设置的界面为12x12的格子界面,在前面宏定义行为12(ROW 12)列为12(COL 12);但是显示为10x10的界面,为方便用户输入坐标,在行和列的前面分布标上数字。


static void ShowLine(int nums)
{
 printf("---");
 for (int i = 0; i < nums; i++){
  printf("-");
 }
 printf("\n");
}
void ShowBoard(char show_board[][COL], int row, int col)
{
 printf(" ");
 for (int i = 1; i < row - 1; i++){   //行的数字
  printf("  %2d", i);
 }
 printf("\n");
 ShowLine(2 * col + col + 4);//这里传入的参数是由于‘-'占位原因,可以根据自己实际界面调整;
 for (int i = 1; i < row - 1; i++){ //列的数组
  printf("%2d|", i);
  for (int j = 1; j < col - 1; j++){
   printf(" %c |", show_board[i][j]);
  }
  printf("\n");
  ShowLine(2 * col + col + 4);
 }
}

2.5 游戏逻辑的编写

在编写游戏逻辑的时候,首先传入我们设置的游戏棋盘;由于棋盘以二维数组方式设置,所以在使用前需要初始化,所以我们用memset来快速设置。
将展示前的棋盘空位都设置为 *,然后将游戏使用的棋盘空位设置为 0;
生成随机雷的个数,将其传入棋盘,设置雷;剩余空格的个数用count来表示;
开始游戏逻辑,输入棋盘,传入用户输入的坐标,然后检测用户输入的坐标是否越界;越界则提示用户输入越界,需要重新输入;如果没越界则游戏继续进行,检测用户输入的坐标是否已经点开,如果点开则提示用户重新输入;然后判断点开的是不是雷,如果是游戏结束,如果不是游戏继续,直到所有空格都点开count=0结束循环;
如果剩余空格count不为0游戏结束,则说明踩到雷;否则说明雷全被排完,然后向用户展示所有雷的分布范围。


void Game()
{
 char show_board[ROW][COL];
 char mine_board[ROW][COL];
 memset(show_board, '*', sizeof(show_board));
 memset(mine_board, '0', sizeof(mine_board));
 srand((unsigned long)time(NULL));

 SetMines(mine_board, ROW, COL);
 int count = (ROW - 2)*(COL - 2) - NUMS;
 int x = 0;
 int y = 0;
 do{
  ShowBoard(show_board, ROW, COL);
  printf("请输入位置# ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>10 || y<1 || y>10){
   printf("输入越界,请重新输入!\n");
   continue;
  }
  if (show_board[x][y] != '*'){//证明位置被排过了
   printf("该位置已被排除,请重新输入!\n");
   continue;
  }
  if (mine_board[x][y] == '1'){//没点到雷
   break;
  }
  int num = GetMines(mine_board, ROW, COL, x, y);
  show_board[x][y] = num + '0';
  count--;

 } while (count > 0);
 if (count > 0){
  printf("you loss!\n");
 }
 else{
  printf("you win!\n");
 }
 printf("你输了,下面是雷区的分布\n");
 ShowBoard(mine_board, ROW, COL);
 printf("play again? \n");
}

2.6 设定游戏开始or退出

这里设定如果用户输入的为1,则开始游戏;输入2 则直接退出,如果输入其他数字则提升用户输入错误。


int main()
{
 int quit = 0;
 int select = 0;
 while (!quit){
  Menu();
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   break;
  case 2:
   quit = 1;
   break;
  default:
   printf("输入有误,请重新输入\n");
  }
 }
 system("pause");
 return 0;
}

3. 汇总代码

然后将上述代码整合起来,汇总如下:


#include<stdio.h>
#include<string.h>
#include<time.h>
#include<windows.h>

#pragma warning(disable:4996)

#define ROW 12
#define COL 12
#define NUMS 20

void Menu()
{
 printf("##########################\n");
 printf("##   1:Play    2:Exit   ##\n");
 printf("##########################\n");
 printf("请输入# ");
}
void SetMines(char mine_board[][COL], int row, int col)
{
 int count = NUMS;  //设置雷
 while (count){
  int x = rand() % 10 + 1;
  int y = rand() % 10 + 1;
  if (mine_board[x][y] == '0'){
   mine_board[x][y] = '1';
   count--;
  }
 }
}
int GetMines(char mine[][COL], int row, int col, int x, int  y)
{
 return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + \
  mine[x][y - 1] + mine[x][y + 1] + \
  mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}

static void ShowLine(int nums)
{
 printf("---");
 for (int i = 0; i < nums; i++){
  printf("-");
 }
 printf("\n");
}

void ShowBoard(char show_board[][COL], int row, int col)
{
 printf(" ");
 for (int i = 1; i < row - 1; i++){   //行的数字
  printf("  %2d", i);
 }
 printf("\n");
 ShowLine(2 * col + col + 4);

 for (int i = 1; i < row - 1; i++){ //列的数组
  printf("%2d|", i);
  for (int j = 1; j < col - 1; j++){
   printf(" %c |", show_board[i][j]);
  }
  printf("\n");
  ShowLine(2 * col + col + 4);
 }
}
void Game()
{
 char show_board[ROW][COL];
 char mine_board[ROW][COL];
 memset(show_board, '*', sizeof(show_board));
 memset(mine_board, '0', sizeof(mine_board));
 srand((unsigned long)time(NULL));

 SetMines(mine_board, ROW, COL);
 int count = (ROW - 2)*(COL - 2) - NUMS;
 int x = 0;
 int y = 0;
 do{
  ShowBoard(show_board, ROW, COL);
  printf("请输入位置# ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>10 || y<1 || y>10){
   printf("输入越界,请重新输入!\n");
   continue;
  }
  if (show_board[x][y] != '*'){//证明位置被排过了
   printf("该位置已被排除,请重新输入!\n");
   continue;
  }
  if (mine_board[x][y] == '1'){//没点到雷
   break;
  }
  int num = GetMines(mine_board, ROW, COL, x, y);
  show_board[x][y] = num + '0';
  count--;

 } while (count > 0);
 if (count > 0){
  printf("you loss!\n");
 }
 else{
  printf("you win!\n");
 }
 printf("你输了,下面是雷区的分布\n");
 ShowBoard(mine_board, ROW, COL);
 printf("play again? \n");
}

int main()
{
 int quit = 0;
 int select = 0;
 while (!quit){
  Menu();
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   break;
  case 2:
   quit = 1;
   break;
  default:
   printf("输入有误,请重新输入\n");
  }
 }
 system("pause");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 用C语言实现扫雷小游戏

本文链接: https://www.lsjlt.com/news/128264.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷...
    99+
    2022-11-12
  • 使用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 ...
    99+
    2022-11-12
  • C语言版扫雷小游戏
    本文实例为大家分享了C语言版扫雷小游戏的具体代码,供大家参考,具体内容如下 一、游戏功能 1、显示该点周围雷的个数 2、第一次下子,不炸死 3、坐标周围没雷,可以实现展开 二、效果...
    99+
    2022-11-12
  • C语言扫雷排雷小游戏实现全程
    目录test.cgame.hgame.c详解游戏代码的实现1初化扫雷区2打印扫雷区3 设置雷4 排雷4.1展开一片的功能4.2雷标记功能的实现游戏过程test.c 在这个文件中,我们...
    99+
    2022-11-13
  • 基于C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #include<stdio.h> #include<s...
    99+
    2022-11-12
  • C语言轻松实现扫雷小游戏
    前言 扫雷是一款经典的小游戏,那么如何用c语言来实现呢?下面我将带你搞定扫雷小游戏。 注:本此游戏所用到的文件与上篇三子棋类似,最后附有代码展示。 1.游戏设计逻辑 1.布置雷&md...
    99+
    2022-11-13
    C语言 扫雷
  • C语言实现扫雷小游戏详解
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏。当用户选择退出时,程序运行结束,当用户选择玩游戏时,将...
    99+
    2022-11-12
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2022-11-12
  • C语言实现扫雷游戏小项目
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一.基本实现功能 1.建立一个游戏菜单 2.创建游戏盘,一个埋雷,一个显示。 3.打印游戏盘。 4.翻开坐...
    99+
    2022-11-12
  • C语言怎么实现扫雷小游戏
    本篇内容介绍了“C语言怎么实现扫雷小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供...
    99+
    2023-06-20
  • 用C语言简单实现扫雷小游戏
    本文实例为大家分享了C语言简单实现扫雷小游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 定义两个二维数组,一个存放炸弹信息,一个隐藏信息后向玩家展示。 2. 玩家每一次选择...
    99+
    2022-11-12
  • 用C语言实现简单扫雷小游戏
    前言 今天学习了制作简易扫雷游戏,代码如下 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数头文件(函数声明) 代码如下(示例): #pragma once #defin...
    99+
    2022-11-12
  • 用C语言实现一个扫雷小游戏
    本文实例为大家分享了C语言实现一个扫雷小游戏的具体代码,供大家参考,具体内容如下 一、全部源码 //棋盘大小 #define ROW 9 #define COL 9 //棋盘加边...
    99+
    2022-11-12
  • 怎么用C语言实现扫雷小游戏
    这篇文章主要讲解了“怎么用C语言实现扫雷小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现扫雷小游戏”吧!具体内容如下经典扫雷游戏规则:当玩家点击游戏区域,该处周围的八个位...
    99+
    2023-06-25
  • 用C语言实现扫雷游戏
    用C语言实现扫雷游戏,因为代码会比较多,所以采用多文件的方式,使代码看起来更好。 一.main.c 在主调函数中首先要提供一个给用户选择的界面,在这里我们假定选择1为开始游戏,0为退...
    99+
    2022-11-12
  • C语言实现简易的扫雷小游戏
    这是一个用C语言实现的控制台扫雷小游戏,实现了随机布置炸弹、扫描炸弹、标记炸弹、百分百第一次不被炸死等功能。 编译器:vs2015 功能模块图 源代码 #include<st...
    99+
    2022-11-13
  • C语言实现扫雷小游戏(扩展版)
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 实现的拓展功能如下: 1.设置游戏难度等级2.保证玩家在第一把踩雷后不被炸死3.若排雷的地方无雷,自动扩...
    99+
    2022-11-13
  • C语言实现扫雷小游戏简单版
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game.h。...
    99+
    2022-11-12
  • 利用C语言实现扫雷游戏
    通过一段时间的C语言学习,想必小伙伴们也想跃跃欲试的编写一些小程序,这个扫雷简易游戏,非常适合C语言初学者去实践。 实现扫雷,首先要有两个棋盘,一个棋盘放置着雷的信息,另个用于展示到...
    99+
    2022-11-12
  • 使用C语言实现扫雷游戏
    目录一、游戏介绍二、实现模块三、实现原理四、实现逻辑五、全部代码六、运行结果本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一、游戏介绍 扫雷游戏是在一个...
    99+
    2022-11-13
    C语言 扫雷
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作