当前位置:网站首页>最新坦克大战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;
}执行项目,检查游戏运行效果:
下一节,我们对代码进行优化,设计好游戏的主体框架。
边栏推荐
- Rt-ppp test using rtknavi
- View UI plus released version 1.3.1 to enhance the experience of typescript
- Dark chain lock (lca+ difference on tree)
- Alibaba cloud side: underlying details in concurrent scenarios - pseudo sharing
- Decomposition relation model of the 2022 database of tyut Taiyuan University of Technology
- Employment of cashier [differential constraint]
- [rtklib 2.4.3 B34] version update introduction I
- Sharing ideas of on-chip transplantation based on rtklib source code
- TYUT太原理工大学2022“mao gai”必背
- 初识C语言(下)
猜你喜欢

Alibaba cloud side: underlying details in concurrent scenarios - pseudo sharing

Fgui project packaging and Publishing & importing unity & the way to display the UI

View UI Plus 发布 1.2.0 版本,新增 Image、Skeleton、Typography组件

Application architecture of large live broadcast platform

MYSQL索引钟B-TREE ,B+TREE ,HASH索引之间的区别和应用场景

Interview Essentials: talk about the various implementations of distributed locks!

Several high-frequency JVM interview questions

Code example of MATLAB reading GNSS observation value o file

《软件测试》习题答案:第一章

Inheritance and polymorphism (I)
随机推荐
Basic DOS commands
如何保障 MySQL 和 Redis 的数据一致性?
错误:排序与角标越界
[GNSS data processing] Helmert variance component estimation analysis and code implementation
Wechat applet development experience
System design learning (I) design pastebin com (or Bit.ly)
2022 National Games RE1 baby_ tree
继承和多态(下)
TYUT太原理工大学2022数据库大题之E-R图转关系模式
初识C语言(下)
Pride-pppar source code analysis
Branch and loop statements
TYUT太原理工大学2022数据库大题之概念模型设计
Record: solution of 404 error of servlet accessing database in dynamic web project
西安电子科技大学22学年上学期《信号与系统》试题及答案
Record: newinstance() obsolete replacement method
[rtklib 2.4.3 B34] version update introduction I
Role movement in the first person perspective
Exception: ioexception:stream closed
西安电子科技大学22学年上学期《射频电路基础》试题及答案