想要做出这个游戏,我们需要先了解游戏的玩法。就是在一个棋盘上面有若干个雷(隐藏的),当点击棋盘空格区域时,会显示相邻1格的雷的个数,若点中了雷,则游戏结束。

接下来让我们看看该如何做到这个扫雷游戏的实现。

还是一样,我们把这游戏的代码分成三个文件来完成,一个game.h用来存放游戏实现的各种函数声明以及头文件,game.c用来放游戏的实现函数定义,test.c用来存放游戏的界面打印和运行过程代码。

首先我们需要打印出游戏菜单来让玩家选择,代码如下:

void menu()
{printf("***************************\n");printf("*******  1.play  **********\n");//选择1进行游戏printf("*******  0.exit  **********\n");//0退出游戏printf("***************************\n");
}

然后让我们看一下主函数的代码:

int main()
{int in = 0;srand((unsigned int)time(NULL));//设置随机数do {menu();//打印菜单printf("请选择\n");scanf_s("%d", &in);switch (in)//接收输入的数,进行判断{case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误");break;}} while (in);//循环,只要不选择退出游戏就可以一直玩return 0;
}

然后给大家看一下game.h中的代码

接下来就是这个游戏的核心部分,game.c的代码该如何设置:
首先我们来分析一下该如何做,先我们需要一个棋盘来设置雷,但是我们又不能够将雷直接放给玩家看,所以我们需要在设置一个棋盘,展示给玩家看,让他们进行扫雷。我们将设置雷的棋盘上全部放上 0 ,然后雷设置为 1 ,展示给玩家的棋盘全部设为 * ,让玩家进行扫雷,下面是代码:

char mine[ROWS][COLS] = { 0 };//定义的设置雷的棋盘
char show[ROWS][COLS] = { 0 };//玩游戏的棋盘
InitBoard(mine, ROWS, COLS, '0');//将棋盘中放上 0
InitBoard(show, ROWS, COLS, '*');//将棋盘全部放上 * 
void InitBoard(char board[ROWS][COLS], int rs, int cs,char set)//这个函数是给棋盘赋上值
{int i, j;for (i = 0; i < rs; i++){for (j = 0; j < cs; j++){board[i][j] = set;}}
}

接下来打印展示的游戏棋盘,同时为了美观和游戏体验,我们将棋盘设置成大两行的数列,便于操作,并在棋盘上下划线便于区分:

void show_board(char board[ROWS][COLS], int r, int c)
{int i, j;printf("-----------扫雷-----------\n");for (i = 0; i <= c; i++)//这一步是将每一列的列数打印出来{printf("%d ", i);}printf("\n");for (i = 1; i <= r;i++){printf("%d ", i);//将每一行的行数打印出来for (j = 1; j <= c; j++){printf("%c ", board[i][j]);}printf("\n");}printf("-----------扫雷-----------\n");}

然后就是布置雷了,这里我们要用到rand函数,随机设置雷的分布,并要注意不能重复设置:

void set_mine(char board[ROWS][COLS], int r, int c)
{int x, y;int count = COUNT;//雷的个数while (count)//当雷不为0时进入循环{x = rand() % r + 1;//在1到r中取随机数坐标y = rand() % r + 1;if (board[x][y] == '0')//当没有设置过雷时才能进入设置雷,否则重新循环{board[x][y] = '1';count--;//当设置了一个雷后,雷的数量减一}}
}

接下来让我们开始扫雷:

int get_mine_count(char mine[ROWS][COLS], int x, int y)
{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 find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{int x, y, win = 0;//win为排查非雷的个数while (win < r * c - COUNT){printf("请输入要排查的坐标:\n");scanf_s("%d%d", &x, &y);if (x >= 1 && x <= r && y >= 1 && y <= c){if (mine[x][y] == '1')//如果输入的坐标有雷,进入{printf("很遗憾,被炸死了。\n");show_board(mine, ROW, COL);//将设置雷的棋盘打印出来break;}else{int count = get_mine_count(mine, x, y);//将排查的非雷坐标附近的八个坐标的雷的数量打印出来show[x][y] = count + '0';show_board(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入\n");}}if (win == r * c - COUNT)//当非雷数与棋盘的格数减去雷数相等时,则游戏胜利{printf("恭喜你,排雷成功\n");show_board(mine, ROW, COL);}
}

然后这游戏的主要代码已经写完了,给你们整合一下game.h和test.c的代码:

game.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define COL 9
#define ROW 9
#define ROWS 11
#define COLS 11
#define COUNT 10
void InitBoard(char board[ROWS][COLS], int r, int c,char set);
void show_board(char board[ROWS][COLS],int r,int c);
void find_mine(char mine[ROWS][COLS],char show[ROWS][COLS],int r, int c);
void set_mine(char board[ROWS][COLS], int r, int c);

test.c

#include"game.h"
void menu()
{printf("***************************\n");printf("*******  1.play  **********\n");printf("*******  0.exit  **********\n");printf("***************************\n");
}
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');set_mine(mine, ROW, COL);show_board(show, ROW, COL);find_mine(mine, show, ROW, COL);
}
int main()
{int in = 0;srand((unsigned int)time(NULL));do {menu();printf("请选择\n");scanf_s("%d", &in);switch (in){case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误");break;}} while (in);return 0;
}

好了,这一次的扫雷游戏就结束了,快点写完去玩两把吧,自己做到游戏玩起来可是有不同的成就感哦!

看到这里了还不三连吗!!!

简易版扫雷(C语言实现)相关推荐

  1. c语言小游戏 精简_C语言开发简易版扫雷小游戏

    C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...

  2. 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】

    目录 一.扫雷游戏的运行逻辑 二.代码逻辑讲解+源码 1.打印一个简易的游戏开始菜单 2.创建数组储存数据并初始化数组 代码逻辑讲解 源码 3.布置雷 代码逻辑讲解 源码 4.排雷 代码逻辑 源码 三 ...

  3. Win32简易版扫雷

    社团的一群小孩都默默的写好了扫雷,嘿嘿,我也打算凑个热闹 最近学windows编程,就写一个win32简易版扫雷吧 //不支持右键 感觉写的挺乱的╮(╯▽╰)╭啊,不要在意这些细节 点到雷会退出程序 ...

  4. c++简易版扫雷游戏

    c++简易版扫雷游戏,代码如下: #include<iostream> #include<cstdlib> #include<time.h> using names ...

  5. 利用java开发简易版扫雷游戏

    1.简介 学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识. 2.编写过程 编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码. 第一版:完成了扫雷游戏的基本雏形,实现 ...

  6. 【C语言】简易版扫雷游戏(play game)

    目录 扫雷游戏

  7. win32 简易版扫雷

    初学Windows 编程,觉得挺有意思,突发奇想,尝试一下编写扫雷小游戏.因为对MFC和windows编程没有太多了解,因此采用很low的方法:利用鼠标在客户区域点击的不同位置响应事件.我还是小白,不 ...

  8. 用Lex编写的简易版C语言词法分析器(编译原理大作业1)

    本文讲解关于如何用lex工具来编写一个简易版的C语言的词法分析器.我主要通过一个完整的项目例子来进行讲解.当然这篇文章面向已经对lex有所了解但还不会具体运用的读者,如果对lex一无所知,请看我的另一 ...

  9. 2000行C代码实现简易版“阿尔法狗”

    2000行代码实现简易版"阿尔法狗"C语言 众所周知,"阿尔法狗"是围棋AI,击败了一众围棋高手,小编也尝试写了一个会下五子棋的程序,不过根本谈不上" ...

  10. C语言扫雷游戏(简易版)

    前言 经过学习数组.函数.循环语句.选择语句等C语言的一些基础知识后,我想借助编写扫雷小游戏来对所学知识进行一个巩固.游戏只会实现一些基本的功能,展开.标记雷.取消雷等不实现(还不会). 1.游戏编写 ...

最新文章

  1. 如何配置能使j2me开发环境处于正常状态
  2. C# 关于调用微信接口的代码
  3. 优化:更优雅的异步代码?
  4. 打包指令_将Vue项目打包为Windows应用(.exe)
  5. PING检查网络是否畅通
  6. Android之WebView学习
  7. ccf推荐期刊和会议目录_重磅快讯:大数据入选CCF推荐中文科技期刊目录!
  8. Linux 防火墙 开放 端口 iptables
  9. apk私钥_移动安全(二)|APK打包流程及签名安全机制初探
  10. grunt打包压缩css、js方法
  11. pom文件各标签解释
  12. srs流媒体服务器+obs推流(简单)
  13. 食堂刷卡消费系统服务器,食堂一卡通消费系统如何使用
  14. 金融市场一周简报(2017-08-18)
  15. 2021-2025年中国拜勒病治疗行业市场供需与战略研究报告
  16. Autojs在线云更新教程
  17. Python实战——VAE的理论详解及Pytorch实现
  18. Python基础教程(第3版)读书笔记:第2章 列表和元组
  19. Mac上Logi Options安装问题
  20. 最新JavaEE系统架构师学习路线之基础篇

热门文章

  1. Multi-modality Latent Interaction Network for Visual Question Answering阅读笔记
  2. Mysql增删改查(CURD)
  3. c++ ‘-DNODE_GYP_MODULE_NAME=libsass‘ ‘-DUSING_UV_SHARED=1‘ ‘-DUSING_V8_SHARED=1‘ ‘-DV8_DEPRECATION_
  4. 2022-2027年中国安全仪表系统(SIS)行业发展监测及投资战略研究报告
  5. import sys
  6. wpf/sl下的复合程序-CAG入门
  7. sp 导出unity哪个_SP与Unity的效果差异分析
  8. 考研政治---马克思主义基本原理概论---认识论
  9. Fbank特征与MFCC特征解析
  10. 卧槽!全网最全编程学习网站汇总!还不赶快放到收藏夹里吃灰~