首页 > 代码库 > C语言写扫雷小游戏2
C语言写扫雷小游戏2
这是下午写的,这次的修改增加了鼠标的事件,需要的是windows的消息机制,WinAPI函数,以下是新添加的定义
struct{ int num;//格子当前状态,1表示有雷,0表示无雷或已经显示数字 int roundnum;//统计格子周围的雷数 int flag;//右键按下显示红旗标志,0表示没有,1表示有}Mine[10][10];POINT Mouse;//定义鼠标事件int MouseX, MouseY;//鼠标的x,y坐标int mineNUM;//统计处理过的格子数TCHAR randmineNUM[100];//显示数字的字符串
Mine[10][10]是10*10的格子,POINT是鼠标结构的别名,可以看定义是x和y的坐标
typedef struct tagPOINT{ LONG x; LONG y;} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
接着在Game()中添加判断鼠标位置的语句,用来判断是否重新开始
if (WM_LBUTTONDOWN)//鼠标左键按下事件{ GetCursorPos(&Mouse);//获取鼠标当前的坐标,POINT MOUSE定义 MouseX = Mouse.x; MouseY = Mouse.y; if (MouseX > 90 && MouseX<110 && MouseY>5 && MouseY < 25) { FLAG = 1; continue; }}if (_kbhit())//判断有按键退出{ break;}
接着在GameBegin()添加关于鼠标的操作,并且随机产生雷数,以下是完整代码
void GameBegin(void){ int i, j; cleardevice(); if (PLAY != 1) { SetCursorPos(100, 10);//设置鼠标初始位置 MouseX = 100; MouseY = 10; } PLAY = 1; mineNUM = 0; setfillstyle(SOLID_FILL);//此处用法和TC不同 setfillcolor(WHITE); bar(0, 0, 200, 230); //设置背景区域 for (i = 0; i < 10; i++) //绘制每个雷区(小格) { for (j = 0; j < 10; j++) { DrawEmpty(i, j, 0, LIGHTGRAY); } } setcolor(GREEN); //DrawSMile(); rand();//产生随机数 for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { srand((unsigned)time(NULL));//根据时间给随机数不同的种子数 Mine[i][j].num = rand() % 8;//随机数产生范围0-7 if (Mine[i][j].num == 1) { mineNUM++; } else { Mine[i][j].num = 2; } Mine[i][j].flag = 0; } _stprintf_s(randmineNUM, _T("%d"), mineNUM);//将minrNUM转换成字符串类型 setcolor(WHITE); settextstyle(16, 0, _T("0")); outtextxy(2, 2, randmineNUM); mineNUM = 100 - mineNUM; }}
由于调用了许多WinAPI和其他函数,所以要包含以下头文件
#include<stdio.h>#include<graphics.h>#include<windows.h>#include <easyx.h>#include<conio.h> //_kbhit()#include<stdlib.h> //rand(),srand()#include<time.h> //srand((unsigned)time(NULL))
OK,today is enough!
C语言写扫雷小游戏2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。