1、 Win-Tc (C语言) 小游戏编程实例扫雷游戏的游戏界面采用3D窗体显示,用鼠标操作实现整个游戏过程。 图、3D窗体扫雷游戏界面 图、游戏中打开非雷方块游戏规则游戏开始时,系统会在布雷区小方块中随机设置游戏级别中规则的雷体个数。布好雷后系统会在非雷方块中填上表示其周围个方块中有多少雷体的数字,(如图所示)。玩家用鼠标左键点开布雷区方块后开始计时,玩家可根据非雷方块中数字正确判断打开所有非雷方块后,游戏胜利结束,系统会自动打开所有雷方块,并显示胜利会话框。在游戏过程中,如果提前打开雷方块则立即失败,游戏结束(如图所示)。游戏计时为999秒,如果时间到了系统会自动结束游戏。图3、提前打开雷方块图4、打开Game按钮子菜单Game按钮单击事件鼠标左键单击Game按钮会打开如图所示的子程序选择会话框,玩家可选择种功能中的某一项来实现某种功能。种功能分别如下所示:BEGIN按钮开局(重新开始)PRIMARY按钮初级(级别)INTERMEDIATE中级(级别)HIGH按钮高级(级别)EXIT返回操作系统(退出应用程序)程序基本流程如下:开始调用鼠标程序(如果调用失败退出)创建并显示窗体布雷(初
2、始化设置)游戏(玩家操作(打开非雷方块、提前打开雷方块游戏结束、Game事件(重新开始)判断胜利(胜利(显示胜利会话框)、Game事件(重新开始)Close按钮事件(退出应用程序返回操作系统)扫雷游戏程序源码清单如下:#include #include #include #include #define PRIMARY 1 /*初级标识符*/#define PRIMARYCOLUMN 9 /*初级布雷区列数*/#define PRIMARYROW 9 /*初级布雷区行数*/#define PRIMARYMINE 10 /*初级布雷区雷的数目*/#define INTERMEDIATE 2 /*中级标识符*/#define INTERMEDIATECOLUMN 16 /*中级布雷区列数*/#define INTERMEDIATEROW 16 /*中级布雷区行数*/#define INTERMEDIATEMINE 40 /*中级布雷区雷的数目*/#define HIGH 3 /*高级标识符*/#define HIGHCOLUMN 30 /*高级布雷区列数*/#define HIGHROW
3、16 /*高级布雷区行数*/#define HIGHMINE 99 /*高级布雷区雷的数目*/#define GAMEOVER 1 /*游戏结束标识符*/*定义鼠标数据类型*/typedef struct MOUSE int mx; /*鼠标x坐标值*/ int my; /*鼠标y坐标值*/ int mkey;/*鼠标按钮状态*/ char fillcolor1616;/*鼠标覆盖下的颜色*/ Mouseh;/*定义按钮数据类型*/typedef struct BUTTON int left; int top; int right; int down; char *caption;/*按钮标题标识*/ char table100;/*按钮目录标题标识*/ int fillcolor;/*按钮面颜色标识*/ int fontcolor;/*按钮面字体颜色标识*/ BUTTON;/*定义窗口数据类型*/typedef struct WINDOW int left; int top; int width; int height; int backcolor;/*窗体背景颜色*/ char *
4、caption;/*窗体标题*/ BUTTON close;/*窗体关闭按钮*/ BUTTON game;/*游戏按钮*/ BUTTON help;/*帮助按钮*/ BUTTON settime;/*显示时间按钮*/ BUTTON minenumber;/*显示游戏区间雷体数目按钮*/ Hwnd;/*定义布雷区数据类型*/typedef struct MINEFIELD int left; int top; int right; int down; int status; /*是否有雷的标识状态符*/ int openst; /*雷区是否打开的标识符*/ int minenumbers;/*雷区周围有多少雷的标识符*/ MINEFIELD;/*-=-=-=-=-=-=-= 全局变量 -=-=-=-=-=-=-=-=-*/*鼠标屏幕绘码*/char MouseMask=0x00,0x00,0x40,0x00,0x60,0x00,0x70,0x00, 0x78,0x00,0x7c,0x00,0x7e,0x00,0x7f,0x00, 0x7f,0x80,0x7f,0xc0,0x6c,0x00
5、,0x46,0x00, 0x06,0x00,0x03,0x00,0x01,0x80,0x00,0x00 ;/*鼠标屏幕绘码边框码*/char MouseMaskE=0xc0,0x00,0xa0,0x00,0x90,0x00,0x88,0x00, 0x84,0x00,0x82,0x00,0x81,0x00,0x80,0x80, 0x80,0x40,0x80,0x20,0x93,0xf0,0xa9,0x00, 0xc9,0x00,0x04,0x80,0x02,0x40,0x01,0xc0 ;int newx=0,newy=0;/*定义鼠标(x,y)坐标状态变量*/MINEFIELD MineHIGHROWHIGHCOLUMN;/*布雷区域大小数组*/Hwnd hWnd;/*窗口句柄*/Mouseh *hw;/*鼠标句柄*/int row;/*雷区行标识*/int column;/*雷区列标识*/int mine;/*雷区雷数标识*/int end;/*游戏结束标识*/int begin;/*游戏开始标识*/int mtime;/*游戏用时标识*/int active;/*当前活动窗体标识*
6、/*Game按钮子菜单项目录*/static char *MENU5=BEGIN,PRIMARY,INTERMEDIATE,HIGH,EXIT;/*间接递归Select()函数*/void SelectLoop(int r,int c);/*= 鼠标模块源码 =*/*鼠标初始化函数*/int MouseInit(int Xmin,int Xmax,int Ymin,int Ymax) int retcode; union REGS regs; regs.x.ax=0; int86(51,®s,®s); retcode=regs.x.ax; if(retcode=0) return 0; regs.x.ax=7; regs.x.cx=Xmin; regs.x.dx=Xmax; int86(51,®s,®s); regs.x.ax=8; regs.x.cx=Ymin; regs.x.dx=Ymax; int86(51,®s,®s); return retcode;/*显示鼠标*/void ShowMouse(Mouseh *hw,int mousecolor) int i,j,k; for(i=0;i16;i+) for(j=0;jfillcolorij=getpixel(hw-mx+j,hw-my+i); for(j=0;j16;j+) for(i=0;i2;i+) for(k=0;kk) putpixel(hw-mx+i*8+k,hw-my+j,mousecolor); for(j=0;j16;j+) for(i=0;i2;i+) for(k=0;kk) putpixel(hw-mx+i*8+k,hw-my+j,0);/*鼠标屏幕恢复*/void HideMouse(Mouseh *hw) int i,j; for(i=0;i16;i+) for(j=0;jmx+j,hw-my+i,hw-fillcolorij);/*按目录设置按钮*/void SetButton1(BUTTON bt) setfillstyle(1,bt.fillcolor); bar(bt.left,bt.top,bt.right,bt.down);
《Win-Tc(C语言)小游戏编程实例》由会员hs****ma分享,可在线阅读,更多相关《Win-Tc(C语言)小游戏编程实例》请在金锄头文库上搜索。