一、项目介绍

坦克大战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. wince车机可以连接电脑吗_揭秘低价电脑洗车机的“内幕”,看完你还敢用吗?...
  2. 无网络访问权限怎么办_解决无Internet访问权限
  3. qprocess调用linux命令
  4. 浏览器要是能这么做就好了
  5. 阿里云对数据可靠性保障的一些思考
  6. [转载]Hadoop 2.X 日志文件和MapReduce的log文件研究心得
  7. cesium 隐藏entity_cesium中随entity动态变化的弹出框
  8. Linux安装mysql5.7.35
  9. keil4软件的下载与安装
  10. linux使用163的yum源配置
  11. JSP从入门到精通_课堂实战视频教程
  12. Linux内核学习(二)编写最简单的字符设备驱动
  13. matlab plotyy 属性如何调整,科学网—【Matlab】如何用plotyy对应坐标绘制多条曲线 - 叶瑞杰的博文...
  14. cesium加载天地图的卫星影像图
  15. 操作系统中常用的进程调度算法
  16. 国家示范性高职院校名单(109所)
  17. VLAN的原理及配置
  18. [ENVI]练习过程中遇到的一些问题
  19. 不能打开数据库 ''。应用程序可能无法识别该数据库,或文件可能损坏。
  20. android自动拨号112,自动拨号打电话助手

热门文章

  1. 【观察】知行合一,混合云如何赋能创新?
  2. 2022-2028年中国智能洗衣机行业市场全景调研及投资规模预测报告
  3. 微信群发消息小工具 v1.0-可定时发送
  4. missing separator. Stop
  5. Oracle 11g默认用户名,密码解锁
  6. 【无标题】ubuntu22.04 golang安装和配置环境变量
  7. 07 zsb C练习上机(二)
  8. 3588 Rockchip_基于 DRM 框架的 HDMI 开发指南
  9. [HPM] Error occurred while trying to proxy request /account/login/ from localhost:3000 to http://127
  10. Android Audio System深入探究之AudioTrack(基于Android9)