当前位置:网站首页>最新坦克大战2022-全程开发笔记-1
最新坦克大战2022-全程开发笔记-1
2022-07-06 09:19:00 【程序员Rock】
一、项目介绍
坦克大战1990作为一个经典的单机游戏,是80后、90后的美好回忆,也是C/C++初学者的必备项目。
不过坦克1990,游戏画面太过朴素。我们现在对坦克1990进行全新升级,使用C语言, 打造最新款的坦克2022!游戏效果如下:
二、项目目的
整个项目,完全使用C语言,从零开始,从游戏框架设计到游戏渲染,融合了C语言的主要技术要点,对于C语言初学者,有很大的帮助作用。可以作为初学者的快速提升项目,也可以直接作为大学生的课设。
三、项目准备
1.Windows系统,苹果电脑不合适哦。
2.已掌握C语言的简单基础,比如常量、变量、if-for-while控制语句。
3.安装VS任意版本,建议使用VS2019或VS2022.
VS2019安装指导
4.安装easyx图形库
直接在官网下载最新版本的easyx图形库
easyx下载链接
下载后,直接双击安装即可安装。
easyx快速入门
5.下载“坦克大战2020”的游戏素材和音效文件。
直接给我发私信即可获取。
四、创建项目
使用VS2019,或者其它版本的VS, 创建新项目,选择空项目模板。
五、实现坦克大战的战场布局
5.1 导入游戏资源
把资源目录res导入项目目录。
5.2 实现游戏背景
添加 main.cpp
#include <stdio.h>
#include <graphics.h>
IMAGE imgBG;
void init() {
initgraph(1300, 900);
loadimage(&imgBG, "res/bg1.png");
}
void updataMap() {
putimage(0, 0, &imgBG); //更新游戏背景
}
int main(void) {
init();
updataMap();
system("pause");
return 0;
}
5.3 实现游戏地图
先添加最基本的地图元素,后续再添加其他元素,比如丛林覆盖物、河流、护盾等各种道具。
定义枚举类型,以表示各种地图元素。
enum {
EMPTY, //空地
TU_WALL, //土墙
GANG_WALL, //钢墙
MY_HOME, //我方指挥官
ENEMY_HOME, //对方指挥官
UNIT_COUNT
};
定义图片数组imgUnits来表示各个地图元素
IMAGE imgUnits[UNIT_COUNT];
在init初始化函数中,加载地图元素。
imgUnits[EMPTY] = NULL;
loadimage(&imgUnits[TU_WALL], "res/wall1.png");
loadimage(&imgUnits[GANG_WALL], "res/wall2.png");
loadimage(&imgUnits[MY_HOME], "res/pj2.png");
loadimage(&imgUnits[ENEMY_HOME], "res/wukelan2.png");
使用二维数组表示地图布局,后续再优化为使用多个文件来表示各个关卡的地图数据。
int map[18][26] = {
{ 0,0,1,1,0,0,1,1,0,0,0,1,4,0,1,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1 },
{ 2,2,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,2,2 },
{ 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,1,3,0,1,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 }
};
根据二维数组地图数据,在updataMap函数中更新地图数据。
for (int i = 0; i < 18; i++) {
for (int j = 0; j < 26; j++) {
putimage(j * 50, i * 50, &imgUnits[map[i][j]]);
}
}
运行程序,查看游戏地图效果:
5.4 实现指挥所的透明背景导入自定义的tools.h和tools.cpp
1)导入自定义的tools.h和tools.cpp
2)在main.cpp中添加
#include "tools.h"
3)修改代码
//putimage(j * 50, i * 50, &imgUnits[map[i][j]]);
putimagePNG(j * 50, i * 50, &imgUnits[map[i][j]]);
测试效果如下:
下一步,我们将创建敌我双方的坦克。
边栏推荐
- MPLS experiment
- 初识C语言(上)
- Relational algebra of tyut Taiyuan University of technology 2022 database
- TYUT太原理工大学2022数据库大题之数据库操作
- Atomic and nonatomic
- Introduction pointer notes
- One article to get UDP and TCP high-frequency interview questions!
- Problems and solutions of robust estimation in rtklib single point location spp
- The port is occupied because the service is not shut down normally
- 六种集合的遍历方式总结(List Set Map Queue Deque Stack)
猜你喜欢
面渣逆袭:Redis连环五十二问,三万字+八十图详解。
阿里云微服务(二) 分布式服务配置中心以及Nacos的使用场景及实现介绍
Edit distance (multi-source BFS)
Inheritance and polymorphism (I)
Smart classroom solution and mobile teaching concept description
Alibaba cloud microservices (IV) service mesh overview and instance istio
TYUT太原理工大学2022“mao gai”必背
XV Function definition and call
如何保障 MySQL 和 Redis 的数据一致性?
几道高频的JVM面试题
随机推荐
【话题终结者】
Record: newinstance() obsolete replacement method
Alibaba cloud side: underlying details in concurrent scenarios - pseudo sharing
西安电子科技大学22学年上学期《射频电路基础》试题及答案
记录:Navicat Premium初次无法连接数据库MySQL之解决
IPv6 experiment
Tyut Taiyuan University of technology 2022 introduction to software engineering examination question outline
String class
View UI Plus 发布 1.3.1 版本,增强 TypeScript 使用体验
Detailed explanation of balanced binary tree is easy to understand
How do architects draw system architecture blueprints?
西安电子科技大学22学年上学期《信号与系统》试题及答案
Network layer 7 protocol
Abstract classes and interfaces
Role movement in the first person perspective
(超详细二)onenet数据可视化详解,如何用截取数据流绘图
What are the advantages of using SQL in Excel VBA
Fundamentals of UD decomposition of KF UD decomposition [1]
GNSS positioning accuracy index calculation
图书管理系统小练习