标签:style color io os ar for 文件 art sp
这是下午写的,这次的修改增加了鼠标的事件,需要的是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!
标签:style color io os ar for 文件 art sp
原文地址:http://www.cnblogs.com/acgpiano/p/3971533.html