写在前面
作为 C++ 的学习者,我最近花了几天时间做了一个很简单的控制台回合制小游戏,取名为“Hero Era Battleground”。游戏内容就是英雄对战,由玩家扮演的英雄和电脑进行回合制的战斗,以杀死对方为目的。
说是“游戏”其实也算不上,因为它实在是太简陋了。这个小项目的目的主要是巩固 C++ 面向对象程序设计的思想,同时也学到了一些有关控制台的“非常规”操作,下面会有简单介绍。
本文可以给同我一样想做控制台游戏的 C++ 小白提供一些思路,项目源码在本文末尾可下载。
功能介绍
在游戏中,玩家需要扮演一个英雄与 NPC 进行对战,对战采用回合制。在每回合中,玩家和 NPC 可以从以下操作中进行选择:攻击、回血、购买装备、卖出装备、合成装备。
哦对了,敌人 NPC 的名字是随机的(我随便想了几个,创建时自动随机选一个),比如下面,Jed 当然是我,然后我的敌人是 Donald Trump。
如果你在第一局游戏中获胜了,那么你可以进行下一局,当然,你之前买的装备仍然可以保留到下一局。不过,为了增大难度,从第二局开始,敌人 NPC 一开始就会自带一个装备,而且初始的装备会随着局数的增加而变强。
本文地址:https://www.jeddd.com/article/hero-era-battleground-cpp.html
特色内容
第一个,也就是我前面说的“非常规”操作,就是彩色字体的应用。在这个游戏中,英雄名都是青色的,英雄生命值的颜色则会随着数字不同而改变,50以上显示绿色,20~50显示黄色,低于20显示红色。要改变控制台打印字体的颜色其实很简单,只需要使用一个函数即可,该函数调用 Windows API,如改为红色的代码如下:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED)
第二个,格式化输出,比如上面的显示英雄状态的表格。我看到有许多控制台游戏的表格都是用星号或者中划线来构成的,但个人感觉这样看起来比较丑。我用的是制表符,这样能够形成完美的表格。同时我在打印的时候使用了大量的 setw 函数来控制字段宽度,从而能够形成这种我认为比较漂亮的表格。
第三个,用 getch 函数接受用户输入。getch 是无缓冲输入,按下按键即被函数捕捉到。因此,这个游戏中,用户按下 A
键即可攻击,按下 R
键即可回血,不需要再按回车刷新缓冲区了。
源码下载
本项目使用 Visual Studio 2017 开发,Windows SDK 版本为 10.0.17134.0。由于调用了 Windows API,因此只适用于 Windows 操作系统。
文件结构如下图所示:
项目地址:https://github.com/Jed-Z/hero-era-battleground
查看文档:HeroEraBattleground_Doc_v1.0.3.pdf
写在后面
其实控制台游戏可以玩出很多花样的,回合制可以说是最简单的一种。如果你是一名 C++ 小白,相信本文能够给你一些启发,也随时欢迎与我交流。
本文地址:https://www.jeddd.com/article/hero-era-battleground-cpp.html
这种游戏做多了,你会上瘾的
甚至已经有点上瘾