工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出EasyX这个库,基本上还原了TC的函数,就可以在各种IDE下使用了,下面是下载地址和帮助,帮助里面有所有函数的调用方法

http://www.easyx.cn/

下载解压好后将include 和 lib 文件夹复制到你的VC对应安装的文件夹里覆盖就可以使用了,从vc++6.0到vs2013都可以使用

我用的是vs2013,是c11标准,可能和vc++6.0和以往版本的函数不太相同

下面就开始开发,最简单的思路就是绘制图形界面,运行游戏,所以可以直接开始

  1. #include<stdio.h>
  2. #include<graphics.h>//图形相关函数
  3. #include <easyx.h>//TC的很多函数包括鼠标操作
  4. int main(void)
  5. {
  6. initgraph(200, 230, SHOWCONSOLE);//初始化游戏界面和大小
  7. Game();//运行游戏
  8. closegraph();//关闭图形界面
  9. }

可以先把Game()注释掉,用来测试你的EasyX是否安装好,如果安装好的话会绘制出200*230的窗口

接下来是需要用到的变量声明和用到的函数,自己开发可以边开发边写,为了方便就先列出,以后直接写功能

  1. struct
  2. {
  3. int num;//格子当前状态,1表示有雷,0表示无雷或已经显示数字
  4. int roundnum;//统计格子周围的雷数
  5. int flag;//右键按下显示红旗标志,0表示没有,1表示有
  6. }Mine[10][10];
  7. int PLAY = 0;//是否第一次玩游戏的标志
  8. int FLAG = 1;//游戏失败后是否重新开始的标志
  9. int AGAIN = 0;//游戏中途重新开始的标志
  10. int MouseX, MouseY;//鼠标的x,y坐标
  11. int mineNUM;//统计处理过的格子数
  12. TCHAR randmineNUM[100];//显示数字的字符串
  13. MOUSEMSG m;//鼠标结构变量,接受鼠标消息
  14.  
  15. void Game(void);//游戏主程序
  16. void GameBegin(void);//游戏开始
  17. void DrawEmpty(int,int,int,int);//初始化空格子界面的函数
  18. void DrawSmile(void);//画笑脸的函数
  19. void DrawRedFlag(int, int);//右键画红旗的函数
  20. void GameOver(void);//游戏结束
  21. void GameWin(void);//游戏胜利
  22. void GamePlay(void);//游戏执行过程

接下来说一下鼠标处理事件,以前TC是DOS模式下开发,操作相当于谢鼠标的驱动,需要查各种中断,而EasyX现在鼠标消息处理很方便,并且不需要像Win32的消息循环机制,方便了很多

以下是鼠标函数的官方文档

MOUSEMSG

这个结构体用于保存鼠标消息,定义如下:

  1. struct MOUSEMSG
  2. {
  3. UINT uMsg; // 当前鼠标消息
  4. bool mkCtrl; // Ctrl 键是否按下
  5. bool mkShift; // Shift 键是否按下
  6. bool mkLButton; // 鼠标左键是否按下
  7. bool mkMButton; // 鼠标中键是否按下
  8. bool mkRButton; // 鼠标右键是否按下
  9. int x; // 当前鼠标 x 坐标(物理坐标)
  10. int y; // 当前鼠标 y 坐标(物理坐标)
  11. int wheel; // 鼠标滚轮滚动值
  12. };

uMsg:

指定鼠标消息类型,可为以下值:

WM_MOUSEMOVE
鼠标移动消息。

WM_MOUSEWHEEL
鼠标滚轮拨动消息。

WM_LBUTTONDOWN
左键按下消息。

WM_LBUTTONUP
左键弹起消息。

WM_LBUTTONDBLCLK
左键双击消息。

WM_MBUTTONDOWN
中键按下消息。

WM_MBUTTONUP
中键弹起消息。

WM_MBUTTONDBLCLK
中键双击消息。

WM_RBUTTONDOWN
右键按下消息。

WM_RBUTTONUP
右键弹起消息。

WM_RBUTTONDBLCLK
右键双击消息。

mkCtrl

Ctrl 键是否按下

mkShift

Shift 键是否按下

mkLButton

鼠标左键是否按下

mkMButton

鼠标中键是否按下

mkRButton

鼠标右键是否按下

x

当前鼠标 x 坐标(物理坐标)

y

当前鼠标 y 坐标(物理坐标)

wheel

鼠标滚轮滚动值,为 120 的倍数。

这些是鼠标的操作,功能十分强大!

C语言新手写扫雷攻略1的更多相关文章

  1. C语言新手写扫雷攻略4

    今天写的是游戏过程的函数,基本的算法前面都解释过了,今天是实现基本的功能 补充一下前面需要用到的头文件 #include<conio.h> //_kbhit() #include<s ...

  2. C语言新手写扫雷攻略3

    界面绘制好后,雷数也布置了,接下来就是游戏的运行过程了,今天先不说具体过程,再来看看需要用到的辅助函数 先是简单的画红旗,鼠标右键的功能是画红旗,至此我们都是在使用函数自己绘图,效率是低,但有助于理解 ...

  3. C语言新手写扫雷攻略2

    接下来是游戏的功能设计,要有扫雷的基本功能,左键点击雷区,右键红旗标记,并且可以统计雷数,可以重新开始,以下是游戏的功能初始 void Game(void) { while (1) { if (FLA ...

  4. C语言新手写扫雷源代码

    今天发布源代码,由于写在一个文件里非常乱,所以分三个文件写 绘图和鼠标函数graph.h /*绘图与鼠标相关函数*/ #include<graphics.h> #include <e ...

  5. 某Facebook工程师写的攻略。

    Chapter 1 Interesting read, but you can skip it. Chapter 2 2.1 Insertion Sort - To be honest you sho ...

  6. 寒城攻略:Listo 教你用Swift 语言编写 IOS 平台流媒体播放器

    先展示播放器效果:   依然继承 Listo 本人的强迫症,还是从最初到完毕完整的写一个攻略来记录一下,这里声明 Listo 本人也是看了非常多的戴维营攻略才总结分享给大家这一篇攻略的. 首先,Lis ...

  7. Nazo解密游戏攻略

    啊,终于腾出时间来玩这个游戏了,顺手写一下攻略吧…… 第0关:http://cafebabe.cc/nazo/ 第一关:第一关很简单 点一下就好了 http://cafebabe.cc/nazo/le ...

  8. 写给C语言新手的话

    首先声明啊,写这个是因为一些加我QQ的朋友问我学习经验,我才写的. 另外,如果是二级党,那么请用谭浩强老师的书.然后你就可以不用看了.倒不是有偏见,而是我写的这个东西,根本不是为了考试,而是为了和新手 ...

  9. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写

      很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-bo ...

随机推荐

  1. UVALive 3902 Network (树+dfs)

    Consider a tree network with n nodes where the internal nodes correspond to servers and the terminal ...

  2. AcWing 232. 守卫者的挑战 (期望DP)打卡

    题目:https://www.acwing.com/problem/content/description/234/ 题意:有n次挑战,每次挑战获胜可以得到一个地图碎片值为-1  或者  可以得到一个 ...

  3. POJ 1151 线段树+扫描线(计算矩形面积并)

    前一篇博客有了讲解就不再叙述了 #include<cstdio> #include<cstring> #include<cmath> #include<ios ...

  4. Linux内核学习--写一个c程序,并在内核中编译,运行

    20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,“忍不住”跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直 ...

  5. [jzoj5840]Miner 题解(欧拉路)

    首先考虑第一问.每个联通块的情况是相对独立的,所以可以分别求每个联通块的答案.无向图中存在欧拉路的条件是奇点数为0或2,那么合法方案肯定是tp到一个奇点,通过一条欧拉路到另一个奇点,再tp到另一个奇点 ...

  6. 2018icpc沈阳/gym101955 J How Much Memory Your Code Is Using? 签到

    题意: 给你定义一堆变量,计算一下这些变量共占了多少k内存. 题解: 按题意模拟即可,善用ceil() // // Created by melon on 2019/10/22. // #includ ...

  7. Mac启动时:boot task failed:fsck-safe处理办法

    mac系统启动到一半,然后突然关机,查看启动信息发现:boot task failed:fsck-safe 处理方法,clover启动的时候按空格,然后选择sigle mode. 进入使用命令:fsc ...

  8. CTF 密码学(一)

    0x00 前言 为了练习python,强迫自己能用Python的题都用python解题还有各种密码 0x01 奇怪的字符串 实验吧题目:信息保密的需求和实际操作自古有之,与之相应的信息加密与解密也是历 ...

  9. Java 空字符串和 字符串为null的区别

    之前一直没有搞清楚 字符串为空和字符串为null的区别,今天写代码一直出现NullPointerException异常,我一直没有搞清楚,后来发现我是这样写的 String s = null; s = ...

  10. 运维 04 Shell基础命令(二)

    Shell基础命令(二)   查看Linux的发行版 cat /etc/redhat-release cat /etc/os-release 查看系统用户的id信息 id 用户名 id root id ...