C语言实现多人坦克大战
如何用C语言去实现一款小游戏?相信很多初学C的同学,面对控制台输出的"Hello World"感到头疼,甚至觉得学习C语言并没有什么用。其实,C语言也可以方便的实现一个小游戏,下面来看看一个经典的游戏,坦克大战。
如下图所示,是采用C语言编写的字符版坦克大战游戏。其中,坦克分为玩家坦克一辆,和敌方坦克若干。使用电脑键盘控制玩家坦克,按下'W','S','A','D'分别为上、下、左、右移动,按下‘J’可以发射子弹。另外,还有墙壁,方便玩家躲避敌方的进攻。子弹击中坦克,会在原地爆炸,显示出一个爆炸的效果。编译器选用较多人熟悉的VC++6.0。
那么,设计这个游戏主要的思想是什么呢?其实就是图像之间的运算。两张图之间,也存在着加、减、或、与等运算。具体来讲,坦克大战游戏有一张背景图,可以用一个二维数组存储每个像素点的内容。我们定义这个内容是:有砖块为1,没砖块为0。而坦克本身也是一张移动的小图片。那么当一个小图片覆盖在背景图之上时,我们只需要查看在这个被覆盖的范围内,背景图里面的内容。如果存在这样一个坐标:在这个坐标上,小图片像素点内容为1,且背景图像素点内容也为1。那么可以认为小图片与背景图发生了重叠。这样的运算,就是与运算,也就是拿小图片里面的每个像素单元和背景图里面对应的像素单元进行逻辑与。运算的结果表示了是否发生重叠。如果任何一个坐标,像素点相与的结果不为0,那就是有重叠。在这个游戏里面,有重叠可以视为发生了“碰撞”。
我们知道了图像之间运算的概念,就可以定义很多图层,比如背景图,敌方坦克图、我方坦克图,敌方子弹图、我方子弹图...等等。我方坦克的移动都将表现在我方坦克图上,其他的同理。这样一来,游戏就很好做了。因为可以非常方便的知道,坦克、子弹等物体的运动情况。思考以下几个问题:
1,怎么知道我方坦克是否碰撞到砖块?拿我方坦克图和背景图进行与运算;
2,怎么知道敌方坦克是否被我方子弹击中?拿敌方坦克图和我方子弹图进行与运算;
...
思考以上问题之后,就能明白,坦克大战游戏的核心思想,其实就是图层之间的运算。其实不光坦克大战游戏,换个什么"飞机大战"游戏,也是一样的道理。
所以我们会定义很多图层:
char TankMap[X][Y] = {0};
char PlayerBulletMap[X][Y] = {0};
char EnemyBulletMap[X][Y] = {0};
char BackMap[X][Y] = {0};
char ArtMap[X][Y] = {0};
char AllMap[X][Y] = {0};
我们还会实现很多与图像相关的函数。比如图像写入,就是把Icon这样的小图像,写入到 GameMap大图像中。实际使用时,一般Icon是坦克,而GameMap是我方/敌方坦克图层。就好像贴图一样,把Icon粘贴到GameMap范围内的任意位置。
void WriteIcon(char GameMap[X][Y],char Icon[H_ICON][W_ICON],int x,int y)
还有碰撞检测。其实就是Icon和GameMap之间进行与运算。比如坦克小图标和背景图之间进行碰撞检测。
char OverLapCheck(char GameMap[X][Y],char Icon[H_ICON][W_ICON],int x,int y)
这里就不一一介绍了,因为后面会给出整个源代码。
我们还需要介绍的一个内容是,我们在程序中定义了多达6个图层,那么最终屏幕上显示什么呢?显然,所有的内容都是要被显示到屏幕上的。但是出现重叠怎么办?这个时候就要考虑一个优先级,即规定:两个图层在同一个位置有元素时,只显示哪个图层的。我们的做法是,把五个图层的内容进行或运算,结果保存到AllMap图层。所以,最终屏幕上显示的其实是AllMap图层的内容。
除此之外,还有一个小小的问题要考虑。我们设计的坦克大战是多人坦克大战,意味着敌方坦克会同时出现很多辆。那么这些坦克,需要用一个数组存储,然后循环挨个处理。在这个数组中,每个坦克都有一个标志位,代表它是活的,还是已经死亡。已经死亡的坦克将不能被显示,也不能发子弹和移动。这些死亡的坦克,会在敌方坦克数目较少时,被重新激活,以保持游戏难度。
C语言实现多人坦克大战相关推荐
- 300行C语言代码搞定坦克大战游戏,看完我是佩服的五体投地!
想当年小编的暑假除了做作业外,最重要的就是玩说起80.90后的童年那真是相当精彩!虽然没有现在这么高科技的iPad.XBOX ONE.PS4...但那时候也有很多很好玩的游戏机!陪伴我们不断的长大. ...
- C语言经典红白机坦克大战
今天给大家分享一个C语言实现坦克大战游戏,有完整版的源码哦~ 效果展示: 编译环境:VS2019,EasyX_20210730 图片素材: 音乐素材: 地图背景源码: 坦克系统源码: 完整坦克大战源码 ...
- c语言vico老师指针,坦克大战,俄罗斯方块原码.doc
坦克大战,俄罗斯方块原码.doc C/C++精品视频集 这是我收集的部分C/C++精品视频集. 其中部分下载地址: 2015-04-13 C语言精髓所在--指针的艺术 链接: /s/1hqy78aS ...
- 用HTML语言写一段坦克大战小游戏
好的,我会尽力帮助你. 你可以使用 HTML 写一个坦克大战的小游戏,代码大概长这样: <!-- 这是 HTML 代码 --> <html><head><ti ...
- 【Unity3D-Mirror多人坦克大战】坦克生成、移动和摄像机跟随(二)
目录 7.创建角色 8.在坦克上面创建血条 9.为游戏对象添加NetworkTransform 10.角色移动 11.摄像机相随 12.炮台移动 测试 7.创建角色 新建一个立方体Player,取消它 ...
- 坦克大战c语言程序贴吧,坦克大战!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 amy[i].fire.x=amy[i].x; amy[i].fire.y=amy[i].y; } break; } } if(lose)/*因为失败而跳 ...
- 【Unity3D-Mirror多人坦克大战】生命盾牌物品的创建、物品动画的创建(九)
目录 31.物品类基础配置 32.生命盾牌物品创建 33.创建动画 测试 31.物品类基础配置 在ObjectSpawner.cs添加代码 using System.Collections; us ...
- stg游戏c语言,坦克大战改版
<坦克大战改>是一款国内玩家模仿FC经典游戏坦克大战所自制的小游戏,游戏中玩家将会控制坦克保卫基地,一旦基地失守关卡就会失败.游戏支持手柄震动 ,同时包含有关卡编辑器,让玩家能够自由编辑关 ...
- 一个C语言编写的坦克大战游戏
在VC6.0平台下运用一个EasyX的图形库,用C语言编写了一个坦克大战的小游戏,代码和算法都是我自己源生的.文章的两幅配图,分别展示了游戏的开始选择界面和正在游戏界面.这个小游戏,具有游戏背景音乐, ...
- 《Java语言程序设计——坦克大战单机游戏》源码以及实验报告
一.引言 游戏本身是一种娱乐方式,带给人无尽的乐趣,而且游戏行业的发展前景也将会是是带动周边相关行业的发展.为了去满足不同的游戏爱好者的要求,对做游戏开发的人的要求也会越来越高.本次Java语言程序设 ...
最新文章
- Linux普通用户启动tomcat
- 【好文收藏】K8S集群部署CoreDNS服务
- caffe data层_Caffe实现多标签输入,添加数据层(data layer)
- 该不该放弃单片机,嵌入式这条路?
- bird 报表_轻松完成Birt报告
- Docker 容器的运行(八)
- MySql 应用语句
- 随想录(编写简单资源管理代码)
- 加快FineReport报表设计的几个心得体会
- C++编程问题--glibc detected *** ./a.out: munmap_chunk(): invalid pointer: xxxxxx
- tp模式 生命周期 命名空间 路由
- 代码帝:一个月10万行代码
- Content-type 对照表
- 如何经营好自己的朋友圈
- 20145306 信息安全系统设计基础 第五周博客总结
- c语言tc2.0编译器下载,c语言编译器|c语言编译器(wintc)_绿茶手机网
- php 七牛云获得上传token,客户端生成七牛上传token
- mysql error 1534_如何解決mysqlimport: Error: 13, Can”t get stat of 的問題 | 學步園
- 数据库系统概论 第三章 第五大题 实验报告
- 【时间序列】时间序列统计分析相关知识的总结与梳理