首页 > 代码库 > 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