小游戏编程实例

上传人:mg****85 文档编号:42091150 上传时间:2018-06-01 格式:PDF 页数:22 大小:225.64KB
返回 下载 相关 举报
小游戏编程实例_第1页
第1页 / 共22页
小游戏编程实例_第2页
第2页 / 共22页
小游戏编程实例_第3页
第3页 / 共22页
小游戏编程实例_第4页
第4页 / 共22页
小游戏编程实例_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《小游戏编程实例》由会员分享,可在线阅读,更多相关《小游戏编程实例(22页珍藏版)》请在金锄头文库上搜索。

1、Win-Tc (C 语言) 小游戏编程实例扫雷游戏的游戏界面采用 3D 窗体显示,用鼠标操作实现整个游戏过程。图、3D 窗体扫雷游戏界面图、游戏中打开非雷方块 游戏规则 游戏开始时, 系统会在布雷区小方块中随机设置游戏级别中规则的雷体个数。 布好雷后 系统会在非雷方块中填上表示其周围个方块中有多少雷体的数字, (如图所示) 。 玩家用 鼠标左键点开布雷区方块后开始计时, 玩家可根据非雷方块中数字正确判断打开所有非雷方 块后,游戏胜利结束,系统会自动打开所有雷方块,并显示胜利会话框。在游戏过程中,如 果提前打开雷方块则立即失败,游戏结束(如图所示) 。游戏计时为 999 秒,如果时间到 了系统会

2、自动结束游戏。图 3、提前打开雷方块图 4、打开 Game 按钮子菜单 Game 按钮单击事件 鼠标左键单击 Game 按钮会打开如图所示的子程序选择会话框, 玩家可选择种功能 中的某一项来实现某种功能。种功能分别如下所示: BEGIN 按钮开局(重新开始) PRIMARY 按钮初级(级别) INTERMEDIATE中级(级别) HIGH 按钮高级(级别) EXIT返回操作系统(退出应用程序) 程序基本流程如下: 开始调用鼠标程序(如果调用失败退出)创建并显示窗体布雷(初始化设置)游戏(玩家操作(打开非雷方块、提前打开雷方块游戏结束、Game 事件(重新开 始) )判断胜利(胜利(显示胜利会话

3、框) 、Game 事件(重新开始) )Close 按钮事 件(退出应用程序返回操作系统) 扫雷游戏程序源码清单如下: #include #include #include #include #definePRIMARY1/*初级标识符*/ #definePRIMARYCOLUMN9/*初级布雷区列数*/ #definePRIMARYROW9/*初级布雷区行数*/ #definePRIMARYMINE10 /*初级布雷区雷的数目*/ #defineINTERMEDIATE2/*中级标识符*/ #defineINTERMEDIATECOLUMN 16 /*中级布雷区列数*/ #defineINTE

4、RMEDIATEROW16 /*中级布雷区行数*/ #defineINTERMEDIATEMINE40 /*中级布雷区雷的数目*/ #defineHIGH3/*高级标识符*/ #defineHIGHCOLUMN30 /*高级布雷区列数*/ #defineHIGHROW16 /*高级布雷区行数*/ #defineHIGHMINE99 /*高级布雷区雷的数目*/ #defineGAMEOVER1/*游戏结束标识符*/*定义鼠标数据类型*/ typedef struct MOUSE int mx; /*鼠标 x 坐标值*/ int my; /*鼠标 y 坐标值*/ int mkey;/*鼠标按钮状态

5、*/ char fillcolor1616;/*鼠标覆盖下的颜色*/ Mouseh; /*定义按钮数据类型*/ typedef struct BUTTON intleft; inttop; intright; intdown; char *caption;/*按钮标题标识*/ char table100;/*按钮目录标题标识*/ intfillcolor;/*按钮面颜色标识*/ intfontcolor;/*按钮面字体颜色标识*/ BUTTON;/*定义窗口数据类型*/ typedef struct WINDOW intleft; inttop; intwidth; intheight; in

6、tbackcolor;/*窗体背景颜色*/ char *caption;/*窗体标题*/ BUTTON close;/*窗体关闭按钮*/ BUTTON game;/*游戏按钮*/ BUTTON help;/*帮助按钮*/ BUTTON settime;/*显示时间按钮*/ BUTTON minenumber;/*显示游戏区间雷体数目按钮*/ Hwnd; /*定义布雷区数据类型*/ typedef struct MINEFIELD intleft; inttop; intright; intdown; intstatus; /*是否有雷的标识状态符*/ intopenst; /*雷区是否打开的标

7、识符*/ intminenumbers;/*雷区周围有多少雷的标识符*/ 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,0x46,0x00, 0x06,0x00,0x03,0x00,0x01,0x80,0x00,0x00 ; /*鼠标屏幕绘码边框码*/ char

8、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;/*布雷区域大小数组*/ HwndhWnd;/*窗口句柄*/ Mouseh *hw;/*鼠标句柄*/ int

9、 row;/*雷区行标识*/int column;/*雷区列标识*/ int mine;/*雷区雷数标识*/ int end;/*游戏结束标识*/ int begin;/*游戏开始标识*/ int mtime;/*游戏用时标识*/ int active;/*当前活动窗体标识*/ /*Game 按钮子菜单项目录*/ static char *MENU5=“BEGIN“,“PRIMARY“,“INTERMEDIATE“,“HIGH“,“EXIT“; /*间接递归 Select()函数*/ void SelectLoop(int r,int c); /*= 鼠标模块源码 =*/ /*鼠标初始化函数*

10、/ int MouseInit(int Xmin,int Xmax,int Ymin,int Ymax) int retcode; union REGSregs;regs.x.ax=0; int86(51, retcode=regs.x.ax; if(retcode=0) return 0; regs.x.ax=7; regs.x.cx=Xmin; regs.x.dx=Xmax; int86(51, regs.x.ax=8; regs.x.cx=Ymin; regs.x.dx=Ymax; int86(51, return retcode; /*显示鼠标*/ void ShowMouse(Mou

11、seh *hw,int mousecolor) int i,j,k;for(i=0;ifillcolorij=getpixel(hw-mx+j,hw-my+i); for(j=0;jk)putpixel(hw-mx+i*8+k,hw-my+j,mousecolor); for(j=0;jk) putpixel(hw-mx+i*8+k,hw-my+j,0); /*鼠标屏幕恢复*/ void HideMouse(Mouseh *hw) int i,j;for(i=0;imx+j,hw-my+i,hw-fillcolorij); /*按目录设置按钮*/ void SetButton1(BUTTON

12、bt) setfillstyle(1,bt.fillcolor); bar(bt.left,bt.top,bt.right,bt.down); setcolor(bt.fontcolor); outtextxy(bt.left+6,bt.top+7,bt.table); /*读取鼠标位置和按钮状态*/ void MouseRead(Mouseh *hd) union REGS r1; int dx,dy,ky; struct time t,t1;gettime( do gettime( if(t1.ti_sect.ti_sec) t1.ti_sec=t.ti_sec; if(begin) if

13、(t.ti_sec-t1.ti_sec=1) mtime+=1; sprintf(hWnd.settime.table,“%d“,mtime); SetButton1(hWnd.settime); t1.ti_sec=t.ti_sec;if(mtime=999) begin=0; end=GAMEOVER; break; r1.x.ax=3; int86(51, dx=r1.x.cx; dy=r1.x.dx; hd-mkey=r1.x.bx; if(hd-mkey) break; while(dx=newx HideMouse(hd); hd-mx=r1.x.cx; hd-my=r1.x.dx

14、; newx=hd-mx; newy=hd-my; /*=绘制框体模块源码 =*/ /*绘制阴影在左边的框体*/ void DrawBox1(int left,int top,int right,int down,int fillcolor) setfillstyle(1,fillcolor); bar(left,top,right,down); setcolor(15); line(right,top,right,down); line(left,down,right,down); setcolor(8); line(left,top,left,down); line(left,top,ri

15、ght,top); /*绘制阴影在右边的框体*/ void DrawBox2(int left,int top,int right,int down,int fillcolor) setfillstyle(1,fillcolor); bar(left,top,right,down); setcolor(15); line(left,top,left,down); line(left,top,right,top);setcolor(8); line(right,top,right,down); line(left,down,right,down); /*绘制雷区 3D 框体*/ void DrawBox(int left,int top,int right,int down,int fillcolor) setfillstyle(1,fillcolor); bar(left,top,right,down); setcolor(fillcolor); rectangle(left,top,right,down); setcolor(15); line(left+1,top+1,left+1,down-1); line(left+1,top+1,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号