Battle & City 坦克大战

简介

2015年,大一下学期用 C 语言写的坦克大战。当时院里要求两周内用 C 写个小作业,其实主要考察的就是 C 语言基础、文件的读写以及链表等数据结构。其他人写的都是“图书管理系统”、“学员管理系统”之类的。我脑子一抽,决定写个“坦克大战”。

构思花了2天,编写花了一周多一个上午。因为老师们临时改变了检查时间,检查当天上午刚写完“地图编辑器”,下午就拿着电脑找老师检查去了。和老师兴奋地攀谈之后,老师露出神秘的微笑,看着我说,做的不错,但这不是我们想要的,于是给了个 A-,哈哈。

这个小作业算是比较烧脑细胞的,我自己蛮喜欢的。因为时间仓促,很多想法没有实现(比如坦克子弹的多种类型,砖块的多种类型,颜色等)。

调用了点 Windows API,用来控制光标坐标,用来打印一些特殊字符。没有使用第三方图形库,所有图形都是靠光标移动坐标打印特殊字符拼接而成的。

其实用 C++ 写起来更方便,但老师不允许使用 C++(怕你直接用STL)。写不了类,写不了 template,硬是用 C 针对坦克列表、子弹列表等分别写了链表作为容器,怪麻烦的。

开始游戏

地图编辑器

自制地图,并存储在地图列表中。

隐藏光标

上面gif演示里,光标没有隐藏。觉得难受的话,可以在主函数内添加如下代码,把光标隐藏掉。

1
2
3
4
5
6
// HANDLE hSqureConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;

GetConsoleCursorInfo(hSqureConsole, &CursorInfo);
CursorInfo.bVisible = false;
SetConsoleCursorInfo(hSqureConsole, &CursorInfo);

源码 & 运行

GitHub: https://github.com/HugHoo/BattleAndCity

1
2
3
4
5
git clone https://github.com/HugHoo/BattleAndCity.git

cd BattleAndCity/Debug

tank1.0.exe