当前位置:网站首页>最新坦克大战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;
}
执行项目,检查游戏运行效果:
下一节,我们对代码进行优化,设计好游戏的主体框架。
边栏推荐
- Detailed explanation of balanced binary tree is easy to understand
- [rtklib 2.4.3 B34] version update introduction I
- TYUT太原理工大学2022数据库大题之概念模型设计
- 162. Find peak - binary search
- 10 minutes pour maîtriser complètement la rupture du cache, la pénétration du cache, l'avalanche du cache
- Problems and solutions of robust estimation in rtklib single point location spp
- KF UD decomposition pseudo code implementation advanced [2]
- Music playback (toggle & playerprefs)
- Data manipulation language (DML)
- 分支语句和循环语句
猜你喜欢
Tyut Taiyuan University of technology 2022 introduction to software engineering summary
系统设计学习(三)Design Amazon‘s sales rank by category feature
面试必备:聊聊分布式锁的多种实现!
Fgui project packaging and Publishing & importing unity & the way to display the UI
One article to get UDP and TCP high-frequency interview questions!
System design learning (I) design pastebin com (or Bit.ly)
TYUT太原理工大学2022“mao gai”必背
Fundamentals of UD decomposition of KF UD decomposition [1]
图书管理系统小练习
Data manipulation language (DML)
随机推荐
TYUT太原理工大学2022数据库题库选择题总结
Share a website to improve your Aesthetics
121道分布式面试题和答案
TYUT太原理工大学2022数据库之关系代数小题
RTKLIB: demo5 b34f. 1 vs b33
Smart classroom solution and mobile teaching concept description
View UI plus released version 1.2.0 and added image, skeleton and typography components
First acquaintance with C language (Part 1)
一文搞定 UDP 和 TCP 高频面试题!
Database operation of tyut Taiyuan University of technology 2022 database
A brief introduction to the database of tyut Taiyuan University of technology in previous years
String类
GNSS positioning accuracy index calculation
图书管理系统小练习
Fgui project packaging and Publishing & importing unity & the way to display the UI
系统设计学习(二)Design a key-value cache to save the results of the most recent web server queries
Tyut Taiyuan University of technology 2022 introduction to software engineering examination question outline
Relational algebra of tyut Taiyuan University of technology 2022 database
Introduction and use of redis
记录:下一不小心写了个递归