2048游戏系列---优化模块第二稿【计分模块】
(更新中……)
参考博客:https://blog.csdn.net/qq_39151563/article/details/104283217
参考博客:https://blog.csdn.net/qq_39151563/article/details/104342730
由于放在一篇会导致篇幅太长,所以分成了几篇。(可能有个10篇吧=.=)
目前写完的:
- 【C++】2048游戏系列—总览篇
- 【C++】2048游戏系列—功能模块第一稿【矩阵操作】
- 【C++】2048游戏系列—功能模块第二稿【键盘输入】
- 【C++】2048游戏系列—功能模块第三稿【添加新数】
- 【C++】2048游戏系列—功能模块第四稿【结束检测】
- 【C++】2048游戏系列—优化模块第一稿【加载图片】
本篇讲解计分模块的激活。
一、布局和计算
从参考博客偷来的布局图:
1.1-通过图片尺寸计算
1.2-一些定义的含义
我的思路是,先把它们紧密地拼凑在一起,再计算图片之间的间隔,只要加
DEVIDE
的就好了
const int WIDTH = 500+2*DEVIDE;//画面总体宽度
const int HEIGHT = 660+2*DEVIDE;//画面总体长度
const int DEVIDE = 15;//间隔宽度
const int GRID_WIDTH = 106;//数字块宽度(正方形)
const int BOARD_X = 0+DEVIDE;//棋盘起始点
const int BOARD_Y = 160+DEVIDE
const int LOGO_X = 25+DEVIDE;//Logo图起始点
const int LOGO_Y = 20;
const int RESTART_X = 0+DEVIDE;//restart图起始点
const int RESTART_Y = 90;
const int SCOREGB_X = 230+DEVIDE;//计分背景图起始点
const int SCOREGB_Y = 0;
1.3-一些关键的修改
具体的可以参考后面的源码
initgraph(WIDTH, HEIGHT);
//图片
PIMAGE GameLogoImg;
PIMAGE RestartImg;
PIMAGE ScoreBgImg;
GameLogoImg = newimage();
RestartImg = newimage();
ScoreBgImg = newimage();
getimage(GameOverImg, "image\\gameOver.png");
getimage(GameLogoImg, "image\\gamelogo.png");
getimage(RestartImg, "image\\restart.png");
getimage(ScoreBgImg, "image\\scorebg.png");
delimage(GameLogoImg);
delimage(RestartImg);
delimage(ScoreBgImg);
//Draw函数里面
putimage_withalpha(NULL, GameLogoImg, LOGO_X, LOGO_Y);//Logo图
putimage_withalpha(NULL, RestartImg, RESTART_X, RESTART_Y);//重新开始图
putimage_withalpha(NULL, ScoreBgImg, SCOREGB_X, SCOREGB_Y);//计分背景图
int x = (j+1)*DEVIDE + j*GRID_WIDTH + BOARD_X;
int y = (i+1)*DEVIDE + i*GRID_WIDTH + BOARD_Y;
1.4-运行结果
后来我又在上面添加了一个
DEVIDE
,也就是每一张图片的y + DEVIDE
,大家可以根据自己喜欢调整布局,感觉有那味了
二、激活重新开始
按键
现在的
重新开始
按键就是摆设,鼠标点击它并没有什么反应,我们要做的工作就是激活它!!!
2.1-鼠标检测模板
bool flag = false;//判断标志位
int xClick = yClick = 0;//记录鼠标位置
for(;is_run();delay_fps())
{
flag = false;
while (mousemsg())
{
mouse_msg msg = getmouse();
if (msg.is_left() && msg.is_down())
{
isClick = true;
xClick = msg.x;
yClick = msg.y;
}
}
if(flag)
{
...//具体操作
}
}
具体操作原理可以参看参考博客,与键盘检测逻辑类似
2.2-检测是否点击在矩形区域内
const int RESTART_X = 0+DEVIDE;
const int RESTART_Y = 90+DEVIDE;
const int RESTART