工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出EasyX这个库,基本上还原了TC的函数,就可以在各种IDE下使用了,下面是下载地址和帮助,帮助里面有所有函数的调用方法
下载解压好后将include 和 lib 文件夹复制到你的VC对应安装的文件夹里覆盖就可以使用了,从vc++6.0到vs2013都可以使用
我用的是vs2013,是c11标准,可能和vc++6.0和以往版本的函数不太相同
下面就开始开发,最简单的思路就是绘制图形界面,运行游戏,所以可以直接开始
#include<stdio.h> #include<graphics.h>//图形相关函数 #include <easyx.h>//TC的很多函数包括鼠标操作 int main(void) { initgraph(200, 230, SHOWCONSOLE);//初始化游戏界面和大小 Game();//运行游戏 closegraph();//关闭图形界面 }
可以先把Game()注释掉,用来测试你的EasyX是否安装好,如果安装好的话会绘制出200*230的窗口
接下来是需要用到的变量声明和用到的函数,自己开发可以边开发边写,为了方便就先列出,以后直接写功能
struct { int num;//格子当前状态,1表示有雷,0表示无雷或已经显示数字 int roundnum;//统计格子周围的雷数 int flag;//右键按下显示红旗标志,0表示没有,1表示有 }Mine[10][10]; int PLAY = 0;//是否第一次玩游戏的标志 int FLAG = 1;//游戏失败后是否重新开始的标志 int AGAIN = 0;//游戏中途重新开始的标志 int MouseX, MouseY;//鼠标的x,y坐标 int mineNUM;//统计处理过的格子数 TCHAR randmineNUM[100];//显示数字的字符串 MOUSEMSG m;//鼠标结构变量,接受鼠标消息 void Game(void);//游戏主程序 void GameBegin(void);//游戏开始 void DrawEmpty(int,int,int,int);//初始化空格子界面的函数 void DrawSmile(void);//画笑脸的函数 void DrawRedFlag(int, int);//右键画红旗的函数 void GameOver(void);//游戏结束 void GameWin(void);//游戏胜利 void GamePlay(void);//游戏执行过程
接下来说一下鼠标处理事件,以前TC是DOS模式下开发,操作相当于谢鼠标的驱动,需要查各种中断,而EasyX现在鼠标消息处理很方便,并且不需要像Win32的消息循环机制,方便了很多
以下是鼠标函数的官方文档
MOUSEMSG
这个结构体用于保存鼠标消息,定义如下:
struct MOUSEMSG { UINT uMsg; // 当前鼠标消息 bool mkCtrl; // Ctrl 键是否按下 bool mkShift; // Shift 键是否按下 bool mkLButton; // 鼠标左键是否按下 bool mkMButton; // 鼠标中键是否按下 bool mkRButton; // 鼠标右键是否按下 int x; // 当前鼠标 x 坐标(物理坐标) int y; // 当前鼠标 y 坐标(物理坐标) int wheel; // 鼠标滚轮滚动值 };
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 的倍数。
这些是鼠标的操作,功能十分强大!