热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言实现简单的扫雷功能

这篇文章主要为大家详细介绍了C语言实现简单的扫雷功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这是我跟着学习视频完成的第一个小游戏,运用到的知识不多都是数组相关的知识,重要的是思路,在设计的时候要先绘制出大概的框图,要知道游戏的根本,这样会让你写程序的时候更加方便。

下面看代码:

test.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
 
void test();
void menu();
void game();
 
 
int main()
{
 
 
 test();
 return 0;
}
void menu()
{
 printf("*************************\n");
 printf("******    1.play   ******\n");
 printf("******    0.exit   ******\n");
 printf("*************************\n");
}
void test()
{
 int input = 0;
 srand((unsigned int)time(NULL));
 do
 {
  menu();
  printf("请选择: ");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   printf("扫雷游戏!\n");
   game();
   break;
  case 0:
   printf("已退出游戏!\n");
   break;
  default:
   printf("输入错误,请重新输入!\n");
   break;
  }
 } while (input);
}
void game()
{
 //雷的信息存储
 //1.布置雷的信息
 char mine[ROWS][COLS] = { 0 }; //11*11
 //2.排查出的雷的信息
 char show[ROWS][COLS] = { 0 };
 //初始化
 InitBoard(mine, ROWS, COLS, '0');
 InitBoard(show, ROWS, COLS, '*');
 //打印棋盘
 DisplyBoard(mine, ROW, COL);
 //DisplyBoard(show, ROW, COL);
 //布置雷
 SetMine(mine, ROW, COL);
 DisplyBoard(mine, ROW, COL);
 //扫雷
 FindMine(mine, show, ROW, COL);
 
}

game.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
 
//'1'-'0'=1
//'3'-'0'=3
int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
 return mine[x - 1][y - 1] - '0' +
  mine[x][y - 1] - '0' +
  mine[x + 1][y - 1] - '0' +
  mine[x + 1][y] - '0' +
  mine[x + 1][y + 1] - '0' +
  mine[x][y + 1] - '0' +
  mine[x - 1][y + 1] - '0' +
  mine[x - 1][y] - '0';
}
 
 
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0;
 int j = 0;
 for (i = 0; i = 1 && x <= row && y >= 1 && y <= col)
  {
   //坐标合法
   //1.踩雷
   if (mine[x][y] == '1')
   {
    printf("你被炸死了!!!\n");
    DisplyBoard(mine, row, col);
    break;
   }
   //不是雷
   else
   {
    //计算x,y坐标周围有几个雷
    int count = get_mine_count(mine, x, y);
    show[x][y] = count + '0';
    DisplyBoard(show, row, col);
    win++;
   }
 
  }
  else
  {
   printf("坐标非法,请重新输入!");
  }
 }
 if (win ==  ROW * COL - COUNT)
 {
  printf("恭喜你,排雷成功!!!\n");
  DisplyBoard(mine, row, col);
 }
}

game.h

#define ROW 9
#define COL 9
 
#define ROWS ROW+2
#define COLS COL+2
 
#define COUNT 80
#include
#include
#include
 
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
void DisplyBoard(char board[ROWS][COLS], int row, int col);
void SetMine(char board[ROWS][COLS], int row, int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

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


推荐阅读
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
author-avatar
Happy_Kelly尊荣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有