一、项目介绍

坦克大战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]]);

测试效果如下:

下一步,我们将创建敌我双方的坦克。

最新坦克大战2022-全程开发笔记-1相关推荐

  1. 基于java的坦克大战游戏的开发设计与实现-(毕业论文+毕业设计源码+答辩PPT).rar

    随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松. 娱乐的休闲方式: 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可 ...

  2. python坦克大战游戏_Python开发的坦克大战游戏

    python开发的坦克大战游戏importpygamefrom pygame.sprite importSpriteimportsysimporttimeimportrandom SCREEN_WID ...

  3. 【Unity】3D坦克大战入门级别开发

    坦克大战核心功能是坦克移动和转向.发射子弹等简单的逻辑. 坦克移动和转向: void FixedUpdate(){//v 垂直方向就是世界z轴float v = Input.GetAxis(" ...

  4. 马士兵坦克大战学习笔记(一)

    java初学者对于马士兵坦克大战的个人学习笔记及代码问题总结(第一阶段), 1.系统自动初始化了Graphics g参数 2.设计原则:高内聚,低耦合: 一个模块中的各元素之间的紧密程度越高,内聚性越 ...

  5. Unity3d坦克大战开发日志3(Day5,Day6)

    这两天被 "如何根据recorder里保存的坦克信息,去GameScene里实例化坦克" 这个问题卡了好久,做出来以后发现以外的简单. 问题1 NullReferenceExcep ...

  6. Cocos2d-x3.X入门游戏实例(一) 经典飞机大战开发笔记

    有一个多月没有写学习笔记了,主要是在学习了一段时间后觉得想整个小游戏,选来选去选择了微信飞机大战作为处女作.飞机大战内容简单,比较适合刚学习Cocos2dx的新手拿来练手,而且网上的教程和源码都很多, ...

  7. 使用《红孩儿工具箱》开发基于Cocos2d-x的《坦克大战》游戏

    大家好,我是红孩儿.上一节我们学习了使用<红孩儿工具箱>开发<打地鼠>游戏.这一节我们继续学习使用<红孩儿工具箱>来开发<坦克大战>游戏. <坦克 ...

  8. 【Unity】超级坦克大战(一)搭建项目、导入框架、前期开发准备

    更新日期:2020年7月9日. 项目源码:在终章发布 免责声明:超级坦克大战使用的图片.音频等所有素材均有可能来自互联网,本专栏所有文章仅做学习和教程目的,不会将任何素材用于任何商业用途. 索引 [系 ...

  9. Python开发坦克大战

    Python不仅能开发网站,爬虫数据分析等,他其实也可以写游戏,接下来就给大家分享下坦克大战的代码: PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此 ...

最新文章

  1. 常用的数据交换格式有哪些_Linux后台开发6大常用的开源库,让你在同行中脱颖而出...
  2. 以太网的MAC帧(一)
  3. javascript map 排序_数据结构-JavaScript字典结构的编程实现
  4. sql2012找不到到服务器,sql server 2012导入数据时找不到服务器名称
  5. Linux安装rpc监控系统资源
  6. 我的世界服务器linux加mod,在Linux下搭建带MOD 我的世界(Minecraft)服务器
  7. java定义一个方法,向控制台输出一个整数的阶乘
  8. 熊猫支持html5么,Steam疯狂周三特惠推荐:你给我看大熊猫,我就给你钱
  9. 6月29 Electron的第一课
  10. 通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译
  11. 软件智能:aaas系统中的数学程序与技术服务之4 序篇之 综述2 词典lexicon
  12. 彩色电视制式与色度解码电路
  13. 自我救赎,成就希望——小说《致加西亚的信》的读后感范文3400字
  14. [To Selina] 《撒野》读后感
  15. 提高iOS开发效率的方法和工具
  16. Python网络爬虫之数据解析(一)
  17. python下载电影天堂视频_Python抓取电影天堂电影信息的代码
  18. 路由器克隆电脑mac地址,破解电脑连接固定网线ip
  19. 计算机网络中man是,计算机网络分类为LAN、MAN和()。
  20. 挖洞思路——验证码绕过

热门文章

  1. 7-1 哈夫曼编码 (30分)
  2. 使用Excel批量给数据添加单引号和逗号
  3. 数据结构哈希查找的C语言实现
  4. solidedge联盟微信公众号欢迎大家来关注
  5. matplotlib - 2D 与 3D 图的绘制(下)
  6. vue3仿美团项目(2)-vant和阿里巴巴图库使用
  7. Java服务器接口快速开发之Servlet详细教程
  8. echarts 饼图 中间定位
  9. EOF和scanf函数
  10. openssh-7.8p1编译安装