上一节课,我们完成了一个最基本的初始化界面,但是还不够完善。
这节课我们需要简单梳理一下游戏的逻辑,然后继续完善初始的游戏界面。
思考:我们如果想实现手机里消灭星星的初始界面应该怎么把我们的星星图片画到背景上去?
第一步:计算横竖能放多少张星星图片
背景图片的大小是450*600,星星的大小是30*30.
意味着我们可以横着放15个星星,竖着放20个星星。
但是这么星星我们不可能把代码复制那么多份,所以需要考虑用数组来实现。
第二步:二维数组来对应相应的星星图片区域
我们开一个15*20的数组即可
int mpt[15][20] = { 0 };
第三步:初始化各个星星图片
void Init() {
image_background = imread("./Image/background.png");
image_red = imread("./Image/red.png");
image_yellow = imread("./Image/yellow.png");
image_green = imread("./Image/green.png");
image_purple = imread("./Image/purple.png");
image_blue = imread("./Image/blue.png");
if (image_background.empty()) {
printf("could not load image...\n");
exit(1);
}
}
第四步:将上一节讲到的绘画部分单独写成一个函数,方便复用代码
void DrawImage(int posX, int posY) {//在背景图片上的偏移量
for (int h = 0; h < image_red.rows; h++) {
for (int w = 0; w < image_red.cols; w++) {
Vec3b& carPixel = image_red.at<Vec3b>(h, w);
uchar* ptr = image_background.ptr<uchar>(posX + h, posY + w);
if ((carPixel[0] <= 30) && (carPixel[1] <= 30) && (carPixel[2] <= 30))
continue;//RPG 0,0,0即为黑色 我们需要将星星图片周围偏黑的部分过滤掉
ptr[0] = carPixel[0];
ptr[1] = carPixel[1];
ptr[2] = carPixel[2];
}
}
}
第五步:我们将各个不同颜色的星星图片用不同的值来代替
1表示红色
2表示黄色
3表示绿色
4表示紫色
5表示蓝色
第六步:我们试一下效果
代码如下:
#include<opencv2/opencv.hpp>
...
完成本节课的内容
登录后开始许愿
暂无评论,来抢沙发