/* 【自学去】网站收集 http://www.zixue7.com */
#include
#include
#define MaxNum 14 //单边最大格子数
#define G_length 30 //格子边长
#define USER_LBUTTONDOWN 101
#define USER_RBUTTONDOWN 102
#define USER_MBUTTONDOWN 103
///////////////////////////////////////////////
void PaintGrid(int Mid_x, int Mid_y, int num, int color); // 绘制游戏格子,初始化格子
void OnLButtonDown(MOUSEMSG m, int num); // 左键按下
void OnRButtonDown(int num); // 右键按下
void OnMButtonDown(); // 中键按下*暂无定义*
void welcome(); // 显示游戏主界面
void goodbye(int num); // 显示结束画面
void NextLevel(int num); // 下一关
int GetMessage(MOUSEMSG m); // 获取鼠标信息
int DispatchMessage(MOUSEMSG m, int opt); // 分发鼠标信息
int JudgeFull(int num, int array[MaxNum][MaxNum]); // 格子是否填满
///////////////////////////////////////////////
// 定义游戏格子结构体
struct Grid
{
int left; // 游戏区域边界
int right;
int top;
int bottom;
int array[MaxNum][MaxNum]; // 记录格子状态
int num; // 记录边界格子数目
}grid;
///////////////////////////////////////////////
void main()
{
int opt, end=0;
grid.num=4;
welcome();
PaintGrid(320, 240, grid.num, RGB(0,255,0));
MOUSEMSG m;
while(end!=1)
{
m = GetMouseMsg();
opt = GetMessage(m);
end=DispatchMessage(m, opt);
}
goodbye(grid.num);
closegraph();
}
///////////////////////////////////////////////
// 获取鼠标信息
int GetMessage(MOUSEMSG m)
{
//鼠标循环
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
return USER_LBUTTONDOWN;
case WM_RBUTTONDOWN:
return USER_RBUTTONDOWN;
case WM_MBUTTONDOWN:
return USER_MBUTTONDOWN;
}
return 0;
}
///////////////////////////////////////////////
// 分发消息
int DispatchMessage(MOUSEMSG m, int opt)
{
switch(opt)
{
case USER_LBUTTONDOWN:
// 左键填色
OnLButtonDown(m, grid.num);
// 判断是否填满
if(JudgeFull(grid.num, grid.array)==1)
{
grid.num++;
// 格子数目超过最大值通关
if(grid.num>MaxNum)
{
return 1;
break;
}
else
NextLevel(grid.num);
}
break;
case USER_RBUTTONDOWN:
// 右键清除
OnRButtonDown(grid.num);
break;
case USER_MBUTTONDOWN:
return 1;
break;
}
return 0;
}
///////////////////////////////////////////////
// 左键按下
void OnLButtonDown(MOUSEMSG m, int num)
{
int nx, ny, x, y;
if(m.x>grid.left && m.xgrid.top && m.y= 0 && nx < num-1) grid.array[nx+1][ny] = -grid.array[nx+1][ny];
if(nx > 0 && nx <= num-1) grid.array[nx-1][ny] = -grid.array[nx-1][ny];
if(ny >= 0 && ny < num-1) grid.array[nx][ny+1] = -grid.array[nx][ny+1];
if(ny > 0 && ny <= num-1) grid.array[nx][ny-1] = -grid.array[nx][ny-1];
// 扫描填色
for(nx=0; nx10;x--)
{
line(grid.left-x, grid.top-x, grid.right+x, grid.top-x);
line(grid.left-x, grid.bottom+x, grid.right+x, grid.bottom+x);
line(grid.left-x, grid.top-x, grid.left-x, grid.bottom+x);
line(grid.right+x, grid.top-x, grid.right+x, grid.bottom+x);
Sleep(5);
}
// 清空单元格
for(x=0; x