Linux系统中玩到让你停不下来的命令行游戏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统中玩到让你停不下来的命令行游戏相关的知识,希望对你有一定的参考价值。
参考技术A大家好,我是良许。
在使用 Linux 系统时,命令行不仅可以让我们在工作中提高效率,它还可以在生活上给我们提供各种 娱乐 活动,因为你可以使用它玩许多非常有意思的 游戏 ,这些 游戏 可都不需要使用专用显卡。
命令行 游戏 尽管比较简单,看上去只是一行行枯燥的代码,但有,还是有不少的 Linux 系统 游戏 却要复杂和有趣一些。实际上,命令行 游戏 一个重要的功能就是需要我们发挥想象力和创造力,在空白的纸上描绘出动人的景象,这非常有利于开发我们的大脑。
下面,我们将介绍几款可以在 Linux 系统中用命令行也能玩的 游戏 。
网络黑客 于1987年首次发布,这款 游戏 还在一直在不停的开发中(3.6.6版本于2020年3月8日发布)。
在一些网友眼中,这款 游戏 被看作是所有流氓类 游戏 的鼻父。尤其是近年来类似的 游戏 也大受欢迎,诸如超越光速、以撒的结合、盗贼遗产、节奏地牢、暗黑地牢等。
这类 游戏 围绕着 探索 和生存展开, 游戏 开始时,你要创造自己的角色,扮演一个传统的梦幻性角色,比如骑士或巫师,然后 游戏 会给你介绍你所扮演角色的主要目标,那就是在地牢的最底层找到尽可能多的护身符,剩下的目标取决于你自己了,可以任意地在 游戏 中任意发挥。
矮人要塞 是在这个名单中唯一一个没有开源的 游戏 ,不过我们任然选择把它放入此次名单中,因为它的影响力和受欢迎程度实在太大了。
在矮人要塞这个 游戏 中,你要么负责控制一个矮人玩要塞模式,挖地洞、种田、狩猎等,要么玩冒险模式,在一个随机产生的大世界里玩耍,这个世界是由首都、村庄、地下墓穴、迷宫、强盗营地等组成的。
要塞模式包括很多面,从手工生产到与邻居交易,再到防御敌人;冒险模式虽然依赖于传统的流氓 游戏 机制,但是其开发深度远远超过像网络黑客这样的 游戏 。
弗罗茨 其实并不是一款真正意义的 游戏 ,它是 Infocom 公司的 游戏 和其他 Z-machine 游戏 (如佐克)的解释器。 佐克 是有史以来最流行的文本冒险 游戏 之一,与上世纪80年代发布的其他文本冒险 游戏 不同,佐克可以解释相当复杂的文本命令(用水晶钥匙开门),就凭这个,它大大提高了 游戏 的可玩性,会给你带来栩栩如生的感觉。
佐克分为三部 游戏 (佐克 l:伟大的地下帝国,佐克 II:罗博兹的巫师,佐克 III:地牢大师),你可以直接从Infocom网站免费下载所有 游戏 。 为了找到更有趣的 Z-machine 游戏 ,下面介绍几场不容错过的 游戏 比赛:
迷路的猪 :是一款非常有趣的 游戏 , 游戏 难度适中。 游戏 大致的内容是你跟随一个兽人,你们必须找回一头逃走的猪。这款 游戏 于2007年发布,在2007年的互动小说大赛中名列第一。
蜘蛛网 :这个 游戏 大致是让你扮演一个被俘间谍的角色,你的目标是向审问者讲述一个似是而非的故事。可别小看这个 游戏 ,你在 游戏 中说的每一句话、每一个细节都会被质疑,你需要发挥聪明才智去和审问者博弈。
见证者 :这个 游戏 由 Infocom 公司创建,它是一个谋杀类的文本 游戏 ,充满神秘和冒险,故事发生在洛杉矶一个安静的郊区,玩家扮演一个侦探,负责调查一个叫 Freeman Linder 的有钱人,他害怕自己的生命受到威胁,玩家需要根据所提供的线索解开谜团。
当我们在等待程更新下载或者安装时,有几个简单的 游戏 来打发时间是很不错的,BSD 游戏 就是不错的选择。BSD 游戏 包含有一个数量相当大的 Linux 系统 游戏 命令行,它们有些最初是与一些BSD 游戏 一起分发的。
BSD 游戏 包括冒险,算术,双陆棋,五子棋,黑客,智力竞赛,俄罗斯方块等。
要启动任何包含在BSD 游戏 中的 游戏 包,只需在终端中输入其名称并按下 enter 键。
大灾变:黑暗之日 是一款基于回合制的生存 游戏 ,在这个 游戏 中,幸存者必须为看到另一个日出而战斗,因为僵尸、杀人机器人、巨型昆虫和其他致命的敌人无处不在。
游戏 以一种相当典型的流氓式的方式开始:你醒来时没有记忆,你的直接目标包括保证食物安全、 探索 你的周围环境等,你的目的是在这个过程中不被杀死。
大灾变:黑暗之日 可以在终端软件上玩,也可以用图形化的 tileset 玩。除了 Linux 系统,它还可在 Windows、macOS、ios 和 android 上运行。
2014年,意大利网络开发商加布里埃尔·西鲁利(Gabriele Cirulli)发布了《2048》,互联网立刻爱上了它,因为这个 游戏 虽然简单却让人着迷。这个 游戏 的目的是移动有编号的瓷砖,使两个具有相同编号的瓷砖相互接触,从而使它们合并为一个瓷砖,按照这个方式,直到玩家创建一个编号为2048的瓷砖。
GitHub 页面虽然提供了有关如何下载和安装2048客户端的说明,但实际上只需要两个命令:
受最初投币 游戏 的启发,贪吃蛇是一款多人玩家的 Linux 系统命令行 游戏 , 游戏 屏幕上最多有四条由 游戏 玩家控制的蛇,其他的蛇是系统生成。 如果您的系统上安装了贪吃蛇,您可以在终端中输入以下命令开始 游戏 :
该 游戏 由 WASD 方向键或 vim 键绑定控制,您可以随时按 Escape 或 Ctrl+C 退出 游戏 。
Flappy Paddle现身江湖!使用强化学习DQN让你划船划到停不下来
【飞桨开发者说】韩磊,台湾清华大学资讯工程学系硕士,现创业公司算法工程师,百度强化学习7日营学员
强化学习7日打卡营AI Studio课程主页:
https://aistudio.baidu.com/aistudio/course/introduce/1335
B站课程链接:
https://www.bilibili.com/video/BV1yv411i7xd
《Flappy Bird》相信大家都玩过或者看过,这款游戏在2014年火遍全球。其操作非常简单,只需要点击屏幕,让主角小鸟顺利地穿过水管之间的缝隙而不碰触任何障碍物。小鸟穿过的水管越多,得到的分数也就越高。
今天我们也来玩一玩这个游戏,不过我们使用强化学习的算法来让主角小鸟自己学会穿过水管躲避障碍,进而魔改环境,制作特殊的三人环境,让游戏进阶为《Flappy Paddle》。别愣着,看下去,看完我们一起划船。
学习这篇文章,你可以做出下面视频中的效果。这里在红黑两支队伍被淘汰之后,结束了录制。因为蓝色的算法可以跑很久,这里只是作为展示,所以没有继续录下去。
飞桨有众多方便好用的开发工具套件,其中PARL就是在强化学习方向的一个高性能、灵活的框架,目前已经在Github上开源。PARL支持大规模并行计算,同样提供了算法的可复现性保证。PARL的框架逻辑清晰,容易上手,从Model到Algorithm再到Agent,逐步构建智能体。同时PARL也提供了一些经典的强化学习算法代码示例,如PG、DDPG、A2C等,方便开发者的调研和验证。不仅如此,PARL还提供了比较完善的算法基类,这使得PARL的扩展性也很好,开发更为轻松快捷。
在我们这个项目中,使用的就是PARL这个开发工具套件。PARL的仓库,针对很多经典的强化学习方法也提供了对应的例子。本项目使用的DQN方法,也是在PARL的实现上的变化。
环境解析
对于强化学习问题,一般是智能体(Agent)和环境(Environment)的一个交互问题。智能体需要对环境或部分环境做出观测(Observation),并根据环境做出动作(Action),而环境对这个动作做出奖惩(Reward)。
-
对于观测值,我们可以通过getGameState函数得到一个观测字典,其中包含了8个字段,包括了玩家(游戏里是一个小鸟)的坐标信息、速度信息、玩家距离下一水管和再下一根水管的位置信息。当然你也可以直接使用getScreenRGB函数得到画面,并以它为观测值。这里为了简单操作,我们以观测字典为例。同时,我们也能发现这个观测值是连续的。 -
对于动作,我们可以通过getActionSet函数得到环境所支持的动作。在《Flappy Bird》这个游戏里,只有两个动作:1、点击屏幕让小鸟展翅高飞,2、什么都不做让小鸟自由滑翔。由此我们可以知道环境接受的动作是离散有限的。 -
在奖惩方面,环境是这样定义:reward = 当前帧的总分 - 前一帧的总分。总分的变化有两种情况:1、玩家通过管子,得一分。2、玩家撞天花板、地板,管子则游戏失败,扣五分。
算法选择
前一小节中,我们发现环境的观测是连续的,环境接受的动作是离散有限的。对于这种情况,可以选用Deep Q-Network(以下简称DQN)或是Policy Gradient(以下简称PG)。DQN作为查表法的扩展,把观测值从有限离散扩展到了连续空间,PG也有处理连续空间观测值的能力。两者的区别在于,DQN对观测值对应的每个动作计算Q值,并选择相应的动作;而PG则直接给出动作,省略了中间步骤。
搭建DQN及训练
这里再简单的介绍一下DQN。DQN作为Q-learning在连续观测值上的扩展,使用网络来代替传统的表格,增加了泛化的能力。DQN的训练和Q-learning一样,不断的让Q(s,a)逼近TargetQ=r+γmaxQ(s’,*)。这里利用的是神经网络的拟合能力。由于TargetQ在不断变化,DQN中使用了固定Q目标的方法,让算法更新更为平稳。除此之外,DQN中还使用了经验池的方法,提高了样本的利用率。同时这一机制也可以用来打散数据,消除样本之间的关联性。
class Model(parl.Model):
def __init__(self, act_dim):
hid0_size = 64
hid1_size = 32
hid2_size = 16
self.fc 0 = layers.fc(size=hid0_size, act= 'relu', name= "fc0")
self.fc1 = layers.fc(size=hid1_size, act= 'relu', name= "fc1")
self.fc2 = layers.fc(size=hid2_size, act= 'relu', name= "fc2")
self.fc3 = layers.fc(size=act_dim, act=None, name= "fc3")
def value(self, obs):
h 0 = self.fc 0(obs)
h1 = self.fc1(h 0)
h2 = self.fc2(h1)
Q = self.fc3(h2)
return Q
class catModel(parl.Model):
def __init__(self, act_dim):
hid0_size = 64
hid1_size = 32
hid2_size = 16
self.fc 0 = layers.fc(size=hid0_size, act= 'relu', name= "catfc0")
self.fc1 = layers.fc(size=hid1_size, act= 'relu', name= "catfc1")
self.fc2 = layers.fc(size=hid2_size, act= 'relu', name= "catfc2")
self.fc3 = layers.fc(size=act_dim, act=None, name= "catfc3")
def value(self, last_obs, obs):
oobs = fluid.layers.concat(input=[last_obs, obs], axis=- 1, name= 'concat')
h 0 = self.fc 0(oobs)
h1 = self.fc1(h 0)
h2 = self.fc2(h1)
Q = self.fc3(h2)
return Q
from parl.algorithms import DQN
修改贴图资源,制作三人环境
现在让我们来划船吧,其实最简单的就是替换一下贴图资源,在PyGame-Learning-Environment
/ple/games/flappybird/assets文件夹中。把这个小bird换成我们的划船选手~
-
初始化定义三个player。 -
为每个player添加score和live属性及每个player对应的得分和死亡处理,以及游戏的score和结束条件。 -
设计新的actionset, 以能接受三个输入(实际上是一个输入包含三个Agent的三个action)。 -
设计新的observation。在此之前只返回一个观测值,但现在要针对每个player返回其对应的观测值。 -
图像绘制。在原来的基础上多绘制两个player。
成果
结果已经展示在文章的开篇视频中。这里训练了三个模型,两个隐层的模型,拿到了均分147分;拼接的模型,拿到了157分,而三个隐层的模型,则拿到了2000分左右的平均成绩。当然,针对不同的参数量的模型应该有对应的学习率等超参数层面的调整,这里仅是为了展示,并没有在这方面做更多的探索和优化。
总结
百度AI Studio课程平台
END
以上是关于Linux系统中玩到让你停不下来的命令行游戏的主要内容,如果未能解决你的问题,请参考以下文章
Flappy Paddle现身江湖!使用强化学习DQN让你划船划到停不下来