扫雷源代码 .docx

上传人:H****o 文档编号:13045972 上传时间:2022-04-27 格式:DOCX 页数:15 大小:28.77KB
返回 下载 相关 举报
扫雷源代码 .docx_第1页
第1页 / 共15页
扫雷源代码 .docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《扫雷源代码 .docx》由会员分享,可在线阅读,更多相关《扫雷源代码 .docx(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品名师归纳总结/* 源程序 */#include / 图形函数库#include #include #define LEFTPRESS 0xff01 / 鼠标左键#define LEFTCLICK 0xff10 /左键单击#define LEFTDRAG 0xff19 #define MOUSEMOVE 0xff08 struct int num;/* 格子当前处于什么状态,1 有雷, 0 已经显示过数字或者空白格*/int roundnum;/* 统计格子四周有多少雷*/int flag;/* 右键按下显示红旗的标志,0 没有红旗标志 ,1 有红旗标志 */Mine1010;int gam

2、eAGAIN=0;/*是否重来的变量 */int gamePLAY=0;/* 是否是第一次玩嬉戏的标志*/ int mineNUM;/*统计处理过的格子数 */char randmineNUM3;/*显示数字的字符串*/ int Keystate;int MouseExist; int MouseButton; int MouseX;int MouseY;void Initvoid;/*图形驱动 */void MouseOnvoid;/*鼠标光标显示*/void MouseOffvoid;/*鼠标光标隐匿*/void MouseSetXYint,int;/*设置当前位置 */ int Left

3、Pressvoid;/* 左键按下 */int RightPressvoid;/* 鼠标右键按下 */void MouseGetXYvoid;/*得到当前位置 */ void Controlvoid;/*嬉戏开头 ,重新,关闭 */ void GameBegainvoid;/*嬉戏开头画面 */ void DrawSmilevoid;/*画笑脸 */void DrawRedflagint,int;/*显示红旗 */void DrawEmptyint,int,int,int;/*两种空格子的显示*/ void GameOvervoid;/* 嬉戏终止 */void GameWinvoid;/*显

4、示成功 */int MineStatisticsint,int;/*统计每个格子四周的雷数*/ int ShowWhiteint,int;/*显示无雷区的空白部分*/void GamePlayvoid;/* 嬉戏过程 */ void Closevoid;/* 图形关闭 */ void mainvoid Init;Control;Close;可编辑资料 - - - 欢迎下载精品名师归纳总结void Initvoid/*图形开头 */ int gd=DETECT,gm; initgraph&gd,&gm,c:tc;void Closevoid/* 图形关闭 */ closegraph;void M

5、ouseOnvoid/*鼠标光标显示 */ _AX=0x01;geninterrupt0x33;void MouseOffvoid/*鼠标光标隐匿 */ _AX=0x02;geninterrupt0x33;void MouseSetXYint x,int y/*设置当前位置 */ _CX=x;_DX=y;_AX=0x04;geninterrupt0x33;int LeftPressvoid/* 鼠标左键按下 */ _AX=0x03;geninterrupt0x33; return_BX&1;int RightPressvoid/* 鼠标右键按下 */ _AX=0x03;geninterrupt

6、0x33; return_BX&2;void MouseGetXYvoid/*得到当前位置 */ _AX=0x03;geninterrupt0x33;MouseX=_CX;MouseY=_DX;void Controlvoid/*嬉戏开头 ,重新 ,关闭 */ int gameFLAG=1;/*嬉戏失败后判定是否重新开头的标志*/ while1ifgameFLAG/* 嬉戏失败后没判定出重新开头或者退出嬉戏的话就连续判定*/ GameBegain; /* 嬉戏初始画面 */GamePlay;/* 详细嬉戏 */ifgameAGAIN=1/*嬉戏中重新开头 */ gameAGAIN=0;可编辑资

7、料 - - - 欢迎下载精品名师归纳总结continue;MouseOn; gameFLAG=0;ifLeftPress/* 判定是否重新开头 */ MouseGetXY;ifMouseX280&MouseX65&MouseY85 gameFLAG=1;continue;ifkbhit/*判定是否按键退出*/ break;MouseOff;void DrawSmilevoid/*画笑脸 */ setfillstyleSOLID_FILL,YELLOW; fillellipse290,75,10,10; setcolorYELLOW;setfillstyleSOLID_FILL,BLACK;/*

8、眼睛 */fillellipse285,75,2,2;fillellipse295,75,2,2; setcolorBLACK;/*嘴巴 */ bar287,80,293,81;void DrawRedflagint i,int j/*显示红旗 */ setcolor7; setfillstyleSOLID_FILL,RED;bar198+j*20,95+i*20,198+j*20+5,95+i*20+5;setcolorBLACK; line198+j*20,95+i*20,198+j*20,95+i*20+10;void DrawEmptyint i,int j,int mode,int

9、color/*两种空格子的显示 */ setcolorcolor;setfillstyleSOLID_FILL,color; ifmode=0/* 没有单击过的大格子 */bar200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8;elseifmode=1/* 单击过后显示空白的小格子*/ bar200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7;void GameBegainvoid/* 嬉戏开头画面 */ int i,j;可编辑资料 - - - 欢迎下载精品名师归纳总结cleardevice; ifgamePLAY.=1

10、 MouseSetXY290,70; /* 鼠标一开头的位置 ,并作为它的初始坐标 */MouseX=290;MouseY=70;gamePLAY=1;/* 下次按重新开头的话鼠标不重新初始化*/ mineNUM=0;setfillstyleSOLID_FILL,7; bar190,60,390,290;fori=0;i10;i+/*画格子 */forj=0;j10;j+ DrawEmptyi,j,0,8;setcolor7; DrawSmile;/* 画脸 */ randomize;fori=0;i10;i+/*100个格子随机赋值有没有的雷*/ forj=0;j10;j+ Mineij.n

11、um=random8;/*假如随机数的结果是1 表示这个格子有的雷 */ ifMineij.num=1mineNUM+;/*现有雷数加 1*/ elseMineij.num=2;Mineij.flag=0;/*表示没红旗标志 */sprintfrandmineNUM,%d,mineNUM; /*显示这次总共有多少雷数*/setcolor1; settextstyle0,0,2;outtextxy210,70,randmineNUM;mineNUM=100-mineNUM;/*变量取空白格数量 */ MouseOn;void GameOvervoid/* 嬉戏终止画面 */ int i,j;se

12、tcolor0; fori=0;i10;i+forj=0;j10;j+ifMineij.num=1/*显示全部的的雷 */ DrawEmptyi,j,0,RED; setfillstyleSOLID_FILL,BLACK; fillellipse200+j*20,100+i*20,7,7;void GameWinvoid/*显示成功 */ setcolor11;可编辑资料 - - - 欢迎下载精品名师归纳总结settextstyle0,0,2; outtextxy230,30,YOU WIN.;int MineStatisticsint i,int j/*统计每个格子四周的雷数*/ int n

13、NUM=0;ifi=0&j=0/*左上角格子的统计 */ ifMine01.num=1nNUM+; ifMine10.num=1nNUM+; ifMine11.num=1nNUM+;elseifi=0&j=9/*右上角格子的统计 */ ifMine08.num=1nNUM+; ifMine19.num=1nNUM+; ifMine18.num=1nNUM+;elseifi=9&j=0/*左下角格子的统计 */ ifMine80.num=1nNUM+; ifMine91.num=1nNUM+; ifMine81.num=1nNUM+;elseifi=9&j=9/*右下角格子的统计*/ ifMin

14、e98.num=1nNUM+; ifMine89.num=1nNUM+;ifMine88.num=1nNUM+;elseifj=0/* 左边第一列格子的统计*/ ifMineij+1.num=1nNUM+; ifMinei+1j.num=1nNUM+; ifMinei-1j.num=1nNUM+; ifMinei-1j+1.num=1nNUM+; ifMinei+1j+1.num=1nNUM+;elseifj=9/* 右边第一列格子的统计*/ ifMineij-1.num=1nNUM+; ifMinei+1j.num=1nNUM+; ifMinei-1j.num=1nNUM+; ifMinei

15、-1j-1.num=1nNUM+; ifMinei+1j-1.num=1nNUM+;可编辑资料 - - - 欢迎下载精品名师归纳总结elseifi=0/* 第一行格子的统计 */ ifMinei+1j.num=1nNUM+; ifMineij-1.num=1nNUM+; ifMineij+1.num=1nNUM+; ifMinei+1j-1.num=1nNUM+; ifMinei+1j+1.num=1nNUM+;elseifi=9/* 最终一行格子的统计 */ ifMinei-1j.num=1nNUM+; ifMineij-1.num=1nNUM+; ifMineij+1.num=1nNUM+

16、; ifMinei-1j-1.num=1nNUM+; ifMinei-1j+1.num=1nNUM+;else/*一般格子的统计 */ ifMinei-1j.num=1nNUM+; ifMinei-1j+1.num=1 nNUM+; ifMineij+1.num=1nNUM+; ifMinei+1j+1.num=1nNUM+; ifMinei+1j.num=1nNUM+; ifMinei+1j-1.num=1nNUM+; ifMineij-1.num=1nNUM+; ifMinei-1j-1.num=1nNUM+;returnnNUM;/*把格子四周一共有多少雷数的统计结果返回*/int Sh

17、owWhiteint i,int j/*显示无雷区的空白部分*/ifMineij.flag=1|Mineij.num=0/*假如有红旗或该格处理过就不对该格进行任何判定*/ return;mineNUM-;/*显示过数字或者空格的格子就表示多处理了一个格子,当全部格子都处理过了表示成功*/ ifMineij.roundnum=0&Mineij.num.=1/*显示空格 */DrawEmptyi,j,1,7;Mineij.num=0;elseifMineij.roundnum.=0/*输出雷数 */ DrawEmptyi,j,0,8; sprintfrandmineNUM,%d,Mineij.r

18、oundnum; setcolorRED; outtextxy195+j*20,95+i*20,randmineNUM;Mineij.num=0;/*已经输出雷数的格子用0 表示已经用过这个格子*/ return可编辑资料 - - - 欢迎下载精品名师归纳总结 /*8个方向递归显示全部的空白格子*/ ifi.=0&Minei-1j.num.=1ShowWhitei-1,j;ifi.=0&j.=9&Minei-1j+1.num.=1ShowWhitei-1,j+1; ifj.=9&Mineij+1.num.=1ShowWhitei,j+1; ifj.=9&i.=9&Minei+1j+1.num.

19、=1ShowWhitei+1,j+1; ifi.=9&Minei+1j.num.=1ShowWhitei+1,j; ifi.=9&j.=0&Minei+1j-1.num.=1ShowWhitei+1,j-1; ifj.=0&Mineij-1.num.=1ShowWhitei,j-1;ifi.=0&j.=0&Minei-1j-1.num.=1ShowWhitei-1,j-1;void GamePlayvoid/* 嬉戏过程 */int i,j,Num;/*Num用来接收统计函数返回一个格子四周有多少的雷*/ fori=0;i10;i+forj=0;j280&MouseX65&MouseY190&

20、MouseX90&MouseY290/*当前鼠标位置格子范畴内*/ j=MouseX-190/20;/*x坐标 */i=MouseY-90/20;/*y坐标 */ifMineij.flag=1/*假如格子有红旗就左键无效*/ continue;ifMineij.num.=0/*假如格子没有处理过 */ ifMineij.num=1/*鼠标按下的格子是的雷*/ MouseOff; GameOver;/* 嬉戏失败 */ break;else/*鼠标按下的格子不是的雷*/ MouseOff; Num=MineStatisticsi,j;ifNum=0/* 四周没的雷就用递归算法来显示空白格子*/

21、ShowWhitei,j;else/* 按下格子四周有的雷 */sprintfrandmineNUM,%d,Num;/*输出当前格子四周的雷数*/ setcolorRED;outtextxy195+j*20,95+i*20,randmineNUM;mineNUM-;可编辑资料 - - - 欢迎下载精品名师归纳总结MouseOn;Mineij.num=0;/*点过的格子四周雷数的数字变为0 表示这个格子已经用过*/ ifmineNUM190&MouseX90&MouseY290/*当前鼠标位置在格范畴内*/ j=MouseX-190/20;/*x坐标 */i=MouseY-90/20;/*y坐标 */ MouseOff;ifMineij.flag=0&Mineij.num.=0/*原来没红旗现在显示红旗*/ DrawRedflagi,j;Mineij.flag=1;elseifMineij.flag=1/*有红旗标志再按右键就红旗消逝*/ DrawEmptyi,j,0,8;Mineij.flag=0;MouseOn; sleep1;可编辑资料 - - - 欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com