#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <easyx.h>
#include <graphics.h>
#include <time.h>
#include <tchar.h>
int map[4];//数组保存的是黑块
int n = 0; //
void init()//初始化黑方块区域
{
for (int i = 0; i < 4; i++)
{
map[i] = rand() % 4; //取随机值0 - 3;
}
}
void draw()//贴背景图片
{
BeginBatchDraw();
cleardevice();//把之前的画板清楚
setlinecolor(RED);//设置颜色
setfillcolor(WHITE);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
//绘制白色矩形
fillrectangle(j * 100, i * 120, (j + 1) * 100, (i + 1) * 120);
}
}
//
setfillcolor(BLACK);
for (int i = 0; i < 4; i++) //每一行需要填充的方块
{
fillrectangle(map[i] * 100, i * 120, (map[i] + 1) * 100, (i + 1) * 120); //填充矩形 定位要填充的矩形的的左上角坐标和右下角坐标
}
EndBatchDraw(); //结束批量绘图,把中间的内容统一绘制到界面
}
int i; //x轴坐标
int j; //y轴坐标
int play()// 开始玩耍 用鼠标点击方块
{
MOUSEMSG msg = GetMouseMsg();//鼠标消息初始化
switch (msg.uMsg)
{
case WM_LBUTTONDOWN: //如果鼠标消息按下左键 进入循环
i = msg.y / 120; //判断鼠标的位置相对于游戏区的位置
j = msg.x / 100; //判断鼠标的位置相对于游戏区的位置
if (map[3] == j && i == 3) //判断鼠标点击的位置是不是黑色方块 i==3 判断鼠标点击的位置是不是最下面一行,最下面一行为3
{
for (int a = 3; a > 0; a--)//使用循环改变方块的值
{
map[a] = map[a - 1];
}
map[0] = rand() % 4;//最上面一排的方块重新赋值
n++;
}
else
return 1;
break;
}
return 0;
}
int main()
{
initgraph(4 * 100, 4 * 120);//初始化界面
srand((unsigned)time(NULL)); //随机数
init();
while (1)
{
draw();
if (play() == 1)
{
TCHAR str[100]; //
wsprintf(str, _T("总共消除了%d个方块"), n);
if (MessageBox(GetHWnd(), str, _T("游戏结束,是否在来一次"), MB_YESNO) == IDYES) //判断判断游戏是否需要继续
{
init(); //重新初始化方块随机位置
draw(); //重新初始化画板
n = 0;
continue;
}
else
break;
}
}
closegraph();//关闭绘图界面
return 0;
}