扫雷游戏的原理很简单,我用c语言简单做了一个模拟程序,在获取雷数的时候可能比较繁琐,还有没有简单明了写法,求高手指导。代码附上:

#include <stdio.h>
#include <windows.h>
#define M 10
#define N 10
#define MAX (M*N)
#define MINE  "▲"
#define MAXVALUE (~(unsigned)0)void swap(unsigned *pa,unsigned *pb);//交换数据
void printmine(unsigned (*arr)[N]);//打印扫雷数据
unsigned getflag(unsigned num);//判断该位置是否有雷
void setminecount(unsigned (*arr)[N],unsigned num);//设置雷数
void messnum(unsigned (*arr)[N]);//洗牌
void initmine(unsigned (*arr)[N]);//初始化扫雷数据
void getminecount(unsigned (*arr)[N],unsigned i,unsigned j);//获取该位置的雷数void swap(unsigned *pa,unsigned *pb)
{unsigned temp = 0;temp = *pa;*pa = *pb;*pb = temp;
}
unsigned getflag(unsigned num)
{return (num == MAXVALUE)?1:0;
}void setminecount(unsigned (*arr)[N],unsigned num)
{unsigned i = 0,j = 0,count = 0;for(i = 0;i < M;i ++){for(j = 0;j < N;j ++){arr[i][j] = MAXVALUE;count ++;if (count == num){return;}}}
}void messnum(unsigned (*arr)[N])
{unsigned i = 0,j = 0,x = 0,y = 0;srand((unsigned)time(NULL)); for (i = 0;i < M;i++){for(j = 0;j < N;j ++){x = rand()%M;y = rand()%N;swap(&arr[x][y],&arr[i][j]);}}
}void getminecount(unsigned (*arr)[N],unsigned i,unsigned j)
{if (arr[i][j] == MAXVALUE){return;}else{if (i <= 0){if (j <= 0){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i+1][j]) + getflag(arr[i+1][j+1]);}else if (j > 0 && j < N-1){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i][j-1]) + getflag(arr[i+1][j]) +  getflag(arr[i+1][j+1]) + getflag(arr[i+1][j-1]);}else{arr[i][j] = getflag(arr[i][j-1]) + getflag(arr[i+1][j]) + getflag(arr[i+1][j-1]);}}else if (i > 0 && i < M-1){if (j <= 0){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i+1][j]) + getflag(arr[i-1][j]) + getflag(arr[i+1][j+1]) + getflag(arr[i-1][j+1]);}else if (j > 0 && j < N-1){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i][j-1]) + getflag(arr[i+1][j]) + getflag(arr[i-1][j]) + getflag(arr[i+1][j+1]) + getflag(arr[i-1][j-1]) + getflag(arr[i+1][j-1]) + getflag(arr[i-1][j+1]);}else {arr[i][j] = getflag(arr[i][j-1]) + getflag(arr[i+1][j]) + getflag(arr[i-1][j]) + getflag(arr[i-1][j-1]) + getflag(arr[i+1][j-1]);}}else{if (j <= 0){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i-1][j]) + getflag(arr[i-1][j+1]);}else if (j > 0 && j < N-1){arr[i][j] = getflag(arr[i][j+1]) + getflag(arr[i][j-1]) + getflag(arr[i-1][j-1]) + getflag(arr[i-1][j]) + getflag(arr[i-1][j+1]);}else{arr[i][j] = getflag(arr[i][j-1]) + getflag(arr[i-1][j]) + getflag(arr[i-1][j-1]);}}}
}
void initmine(unsigned (*arr)[N])
{unsigned i = 0,j = 0;for (i = 0;i < M;i++){for(j = 0;j < N;j ++){getminecount(arr,i,j);}}
}
void printmine(unsigned (*arr)[N])
{unsigned i = 0,j = 0;for (i = 0;i < M;i++){for(j = 0;j < N;j ++){if (arr[i][j] == MAXVALUE){printf(" %s ",MINE);}else{printf(" %2u ",arr[i][j]);}}printf("\n\n");}
}
int main(void)
{unsigned arr[M][N] = {0};unsigned i = 0,j = 0;unsigned temp = 0;memset(arr,0,sizeof(arr));system("color 70");setminecount(arr,20); //设置雷数messnum(arr);      //洗牌initmine(arr);     //初始化扫雷printmine(arr);    //打印扫雷getch();return 0;
}

运行结果:

c语言模拟扫雷小游戏相关推荐

  1. c语言字符游动程序,C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...

  2. 只用c语言不用图片的游戏,使用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 设计思路 1.创建 ...

  3. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

  4. C语言实现扫雷小游戏 纯小白 非黑窗口

    C语言实现一个普通的扫雷小游戏 纯小白所编(含代码非黑窗口!) 扫雷 主要功能 1.创建一个图形界面 2.了解扫雷游戏的原理 3.随机生成雷的位置 4.为整个数组加密,并在雷周围的位置加一 5.导入图 ...

  5. 用c语言实现扫雷小游戏。

    相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习. 我用的是vs敲的这个代码,大家可以用vs运行(可能有 ...

  6. C语言实现扫雷小游戏(排雷时可展开)

    游戏介绍 扫雷想必大家都听说过吧?我们今天写的小游戏就是扫雷,只不过我们只使用C语言写.我们能够做到的就是实现扫雷的基本逻辑,没有图形化界面. 源代码 这次游戏程序的写法和上一次的三子棋的模式很像,也 ...

  7. 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)

    文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...

  8. C语言编写扫雷小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992377 扫 ...

  9. C语言实现扫雷小游戏(下)(用递归实现了展开)

      穷且益坚,不坠青云之志.   上篇博客实现了鸡肋的扫雷小游戏,不能实现雷盘(场)的展开,体验不是很好,这篇博客对其进行优化了,实现了展开功能. 文章目录 一.新的头文件 二.游戏框架 三.功能函数 ...

  10. C语言实现扫雷小游戏(具体步骤+具体说明)

    C语言实现扫雷目录 一.游戏介绍 三.具体步骤 1.菜单页面 2.初始化雷盘 3.打印雷盘 4.布置雷 5.排查雷 7.统计所选位置周围八个位置中雷的个数 四.完整代码 1.test.c-扫雷游戏的测 ...

最新文章

  1. 目标检测一卷到底之后,终于有人为它挖了个新坑|CVPR2021 Oral
  2. 相机定位 | cv paper整理
  3. 三大运营商3G无线上网套餐资费对比
  4. 加州理工让无人机长出腿:走路飞行无缝切换,还能玩滑板、走钢丝|Sicence子刊...
  5. FTP资源下检测URL地址下文件大小
  6. Java finally
  7. jms activemq_带有ActiveMQ的JMS
  8. python中迭代器的应用场景
  9. oracle 数字格式取整,Oracle SQL语句操作数字:取整、四舍五入及格式化
  10. 苹果内地最大代工厂被曝大幅裁员!这家库克曾点赞的企业怎么了?
  11. 建立mysql服务器连接失败_解决项目启动无法创建到数据库服务器的连接错误
  12. 2010年 我的齐鲁软件大赛作品
  13. Queue--队列(c语言简单实现)
  14. Windows系统-删除指定服务!
  15. 计算机字体管理软件,字体管理软件有哪些?字体管理软件推荐
  16. (十)损失函数与反向传播
  17. 简单通用文章系统后台管理模板
  18. 【服务器数据恢复】服务器断电导致RAID报错的数据恢复案例
  19. 计算机查看用户 组,查看工作组计算机的方法介绍
  20. MATLAB 数据分析方法(第2版)2.1 基本统计量与数据可视化

热门文章

  1. Hulu面试(或许待更)
  2. 「360企业安全云」上线,免费护航中小微企业数字化建设
  3. MYSQL 大于号,小于号
  4. Java支付宝APP支付-统一收单交易退款
  5. WEB财务报表设计器的实现
  6. android打鸭子代码,打鸭子安卓版
  7. Reflection in Java
  8. axis webservice 实验
  9. 【Ubuntu 安装】Ubuntu20.04和Win10双系统安装指南
  10. 计算机上e盘拒绝访问,E盘拒绝访问怎么办?Win7系统E盘拒绝访问的方法