植物大战僵尸

目前打算先用cpp实现在电脑,再移植到stm32f407(lvgl,freertos)[还在实现中]

cpp实现植物大战僵尸(1.5)

目前打算实现基础功能后不再添加了;

视频

https://www.bilibili.com/video/BV1ZkpLzEEzJ/?vd_source=412f8565a7b49e67b294f55bcccff7ca

cpp实现思路

  • 1.图片卡牌等静止的加载:依据计算出的图片位置的坐标,利用putimage或putimagePNG函数绘制实现;
  • 2.植物生长动画图片实现:在updateGame函数中,根据时间间隔更新植物动画帧。每次更新时,植物的frameIndex递增,若超出图片序列范围则重置为 0 ;
  • 3.阳光产生:通过rand()时间随机生成,在草坪的随机位置;其次,制作一个阳光数组,循环利用,而不是频繁生成并删除;
  • 4.收集阳光:定义初始的阳光值,确定植物的else,怎么判断阳光位置:;(1.1)
  • 5.僵尸实现:类似于阳光,实现了死亡,吃植物等功能

cpp代码实现(1.0)

cpp代码的实现思路是参考b站某up主的
由于代码太长,不能完全展示出来,我上传在GitHub:https://github.com/sdfcwfe/-cpp-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define _CRT_SECURE_NO_WARNINGS  
#include<stdio.h>
#include<graphics.h>//引用图形库头文件
#include <Windows.h>
#include <conio.h>
#include <time.h>
#include"tools.h"

#define WIN_WIDTH 900 //游戏窗口宽度
#define WIN_HEIGHT 600 //游戏窗口高度

enum {WAN_DOU, XIANG_RI_KUI, ZHI_WU_COUNT};

IMAGE imgBg; //表示背景图片
IMAGE imgBar; //表示游戏中的任务栏
IMAGE imgCards[ZHI_WU_COUNT];
IMAGE* imgZhiWu[ZHI_WU_COUNT][20]; //表示植物图片

int curX, curY; //表示当前鼠标的坐标
int curZhiWu = 0; //表示当前选中的植物 0未选中,1豌豆射手,2向日葵

struct zhiwu{
int type; //0:没有植物;1:有植物;
int frameIndex; //当前播放到第几帧
};

struct zhiwu map[3][9]; //表示游戏中的植物

struct sunshineBall {
int x, y; //阳光的坐标
int frameIndex; //当前播放到第几帧
int destY; //阳光掉落的目标y坐标
int used; //是否被使用 0:未使用 1:已使用
};