IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 最新坦克大战2022-全程开发笔记-2 -> 正文阅读

[C++知识库]最新坦克大战2022-全程开发笔记-2

六、创建坦克

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;
}

执行项目,检查游戏运行效果:

下一节,我们对代码进行优化,设计好游戏的主体框架。


今天的分享就到这里了,大家要好好学C语言/C++哟~
对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:763855696【点击进入】


C语言从入门到精通(C语言入门C语言教程C语言零基础C语言基础C语言学习C

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:34:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 4:35:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码