当前位置:网站首页>最新坦克大战2022-全程开发笔记-2
最新坦克大战2022-全程开发笔记-2
2022-07-06 09:19:00 【程序员Rock】
六、创建坦克
6.1 定义坦克数据类型
typedef enum Direction {
DIRRECT_START,
DIRECT_UP = DIRRECT_START,
DIRECT_RIGHT,
DIRECT_DOWN,
DIRECT_LEFT,
DIRECT_COUNT
} direct_t;
typedef struct tank {
bool heroFlag; // true:自己 false: 敌人
IMAGE* imgBody;
IMAGE* imgSafe;
int x, y; // 在地图中的列号和行号
int sn; // 编号
bool used; // 是否使用
direct_t diret; //方向
} tank_t;
6.2 定义坦克纹理
enum {
TANK_MINE,
TANK_ENEMY_1,
TANK_TYPE_COUNT
};
IMAGE imgUnits[UNIT_COUNT];
IMAGE imgTanks[TANK_TYPE_COUNT][DIRECT_COUNT];
6.3 定义坦克变量
#define ENEMY_TANK_MAX 10
#define MY_TANK_MAX 3
tank_t myTank;
tank_t enemyTanks[ENEMY_TANK_MAX];
int myTankCount; //我方坦克数量
6.3 加载坦克的纹理
定义坦克的图片纹理数组。
enum {
TANK_MINE,
TANK_ENEMY_1,
TANK_TYPE_COUNT
};
IMAGE imgTanks[TANK_TYPE_COUNT][DIRECT_COUNT];
在init初始化函数中,加载敌我坦克各个方向的图片纹理。
loadimage(&imgTanks[TANK_MINE][DIRECT_UP], "res/tankUp.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_RIGHT], "res/tankRight.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_DOWN], "res/tankDown.png");
loadimage(&imgTanks[TANK_MINE][DIRECT_LEFT], "res/tankLeft.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_UP], "res/tankEnemyUp.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_RIGHT], "res/tankEnemyRight.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_DOWN], "res/tankEnemyDown.png");
loadimage(&imgTanks[TANK_ENEMY_1][DIRECT_LEFT], "res/tankEnemyLeft.png");
6.4 创建我方坦克
void createMyTank() {
if (myTank.used) return;
if (myTankCount > 0) {
myTankCount--;
myTank.used = true;
myTank.heroFlag = true;
myTank.diret = DIRECT_UP;
myTank.x = 9;
myTank.y = 16;
myTank.imgBody = imgTanks[TANK_MINE];
}
}
在main函数中调用 createMyTank().
6.5 创建敌方坦克
int enemyCurCount; //当前正在战斗的敌方坦克数量
int enemyTankCountCanUsed; //敌方可用坦克总数(已经出现的和后续准备出现的)
void createEnemyTank() {
if (enemyCurCount < 4 && enemyTankCountCanUsed > 0) {
int index;
for (index = 0; index < ENEMY_TANK_MAX && enemyTanks[index].used; index++);
if (index >= ENEMY_TANK_MAX) return;
enemyCurCount++;
enemyTanks[index].heroFlag = false;
enemyTanks[index].used = true;
enemyTanks[index].direct = DIRECT_DOWN;
enemyTanks[index].x = rand() % 2 ? 9 : 15; //在init函数中添加srand配置随机种子
enemyTanks[index].y = 0;
enemyTanks[index].imgBody = imgTanks[TANK_ENEMY_1];
}
}
在main函数中调用 createEnemyTank().
6.6 对坦克数量进行初始化
在init函数中对坦克数量进行初始化。
myTankCount = MY_TANK_MAX;
enemyTankCountCanUsed = ENEMY_TANK_MAX;
enemyCurCount = 0;
7. 渲染所有坦克
定义updateAllTanks()
void updateTank(tank_t* tank) {
if (!tank->used) return;
putimagePNG(tank->x * 50 + 5, tank->y * 50 + 5, &tank->imgBody[tank->direct]);
}
void updateAllTanks() {
updateTank(&myTank);
for (int i = 0; i < ENEMY_TANK_MAX; i++) {
if (enemyTanks[i].used) {
updateTank(&enemyTanks[i]);
}
}
}
在main函数中调用updateAllTanks()
int main(void) {
init();
createMyTank();
createEnemyTank();
updataMap();
updateAllTanks();
system("pause");
return 0;
}
执行项目,检查游戏运行效果:
下一节,我们对代码进行优化,设计好游戏的主体框架。
边栏推荐
- 用栈实现队列
- Pride-pppar source code analysis
- 十分鐘徹底掌握緩存擊穿、緩存穿透、緩存雪崩
- 阿里云一面:并发场景下的底层细节 - 伪共享问题
- TYUT太原理工大学往年数据库简述题
- IText 7 generate PDF summary
- Interview Essentials: talk about the various implementations of distributed locks!
- 初识C语言(上)
- View UI Plus 发布 1.2.0 版本,新增 Image、Skeleton、Typography组件
- Design a key value cache to save the results of the most recent Web server queries
猜你喜欢
Counter attack of flour dregs: redis series 52 questions, 30000 words + 80 pictures in detail.
Small exercise of library management system
Quickly generate illustrations
Edit distance (multi-source BFS)
TYUT太原理工大学2022数据库大题之概念模型设计
系统设计学习(一)Design Pastebin.com (or Bit.ly)
TYUT太原理工大学2022数据库大题之数据库操作
Code example of MATLAB reading GNSS observation value o file
(超详细二)onenet数据可视化详解,如何用截取数据流绘图
IPv6 experiment
随机推荐
系统设计学习(三)Design Amazon‘s sales rank by category feature
Relational algebra of tyut Taiyuan University of technology 2022 database
Tyut Taiyuan University of technology 2022 "Mao Gai" must be recited
[while your roommate plays games, let's see a problem]
凡人修仙学指针-2
Rt-ppp test using rtknavi
初识C语言(下)
RTKLIB: demo5 b34f. 1 vs b33
MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列
Smart classroom solution and mobile teaching concept description
用栈实现队列
Alibaba cloud microservices (III) sentinel open source flow control fuse degradation component
View UI Plus 發布 1.3.1 版本,增强 TypeScript 使用體驗
国企秋招经验总结
Answer to "software testing" exercise: Chapter 1
Counter attack of flour dregs: redis series 52 questions, 30000 words + 80 pictures in detail.
错误: 找不到符号
How to ensure data consistency between MySQL and redis?
View UI Plus 发布 1.3.1 版本,增强 TypeScript 使用体验
Introduction and use of redis