兰达·哈克:战术小队ASCII类流氓地牢爬虫的游戏引擎库

[bsd3型,游戏,游戏引擎,图书馆,程序,类侠盗][建议标签]

LambdaHack是一个针对ASCII流氓的Haskell游戏引擎库任意主题、大小和复杂性的游戏,可选战术班战斗。它与样品一起包装地牢爬虫在一个奇怪的幻想设置。示例游戏可以是在浏览器中试用http://lambdahack.github.io.

有关最近的改进,请参阅更改日志文件以及短期计划的问题跟踪。长期目标包括多人战术小队战斗,游戏内容创建、自动平衡和持久性内容修改基于玩家行为。欢迎捐款。

已知使用LambdaHack库的其他游戏:

注意:此库中的所有模块都保持可见,让游戏覆盖并重用它们。OTOH,以反映一些模块是实现细节相对于其他代码,源代码遵循以下原则惯例。如果模块与目录同名,模块是目录的专用接口。不允许引用目录中的模块接口模块除外。此策略仅具有约束力开发图书馆时,图书馆用户是免费的访问任何模块,因为库作者位于没有位置猜测他们的特殊需求。

这是一个变通方法.cabal文件,将其展平以消除内部库,直到为它们生成haddock已修复。原始.cab文件位于.cab.bkp文件中。


[跳到自述]

模块

[索引][快速跳跃]

旗帜

手动标记

姓名描述违约
带_费用_资产

启用经过良好测试的代码的昂贵断言

残疾人
释放

准备发布(公开内部函数和类型等)

启用
支持节点

编译以使JS blob在终端中与NodeJS一起工作

启用
jsaddle(jsaddle)

切换到JSaddle前端(可能是位只读的)

残疾人

使用-f<标志>启用标志,或-f-<标志>禁用该标志。更多信息

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS公司] 0.1.20080412,0.1.20080413,0.1.20090606,0.1.20110117,0.1.20110918,0.2.0,0.2.1,0.2.6,0.2.6.5,0.2.8,0.2.10,0.2.10.5,0.2.10.6,0.2.12,0.2.14,0.4.9.0,0.4.99.0,0.4.100.0,0.4.101.0,0.4.101.1,0.5.0.0,0.6.0.0,0.6.1.0,0.6.2.0,0.7.0.0,0.7.1.0,0.8.0.0,0.8.1.0,0.8.1.1,0.8.1.2,0.8.3.0,0.9.3.0,0.9.3.1,0.9.4.0,0.9.4.1,0.9.5.0,0.10.2.0,0.10.3.0,0.11.0.0,0.11.0.1(信息)
更改日志 CHANGELOG.md公司
依赖关系 ansi端子(>=0.10),资产失效(>=0.1.2 && <0.2),异步(>=2.2.1),基础(>=4.10 && <99),基本紧凑型(>=0.10.0),二元的(>=0.8),字节删除(>=0.9.2),容器(>=0.5.3.0),deepseq公司(>=1.3),目录(>=1.1.0.1),枚举映射集(>=0.5.2.2),文件嵌入(>=0.0.11),文件路径(>=1.2.0.1),ghc紧凑型,ghcjs数据库,ghcjs-dom公司(>=0.9.1.1),可散列的(>=1.1.2.5),hsini公司(>=0.2 && <0.5.2 || >=0.5.2.2),钥匙(>=3),兰达·哈克,微型飞行器(>=0.5.0.0),开放式浏览器(>=0.2),optparse应用程序(>=0.13),漂亮的表演(>=1.6),原始的(>=0.6.1.0),快速检查,sdl2(>=2),sdl2-ttf(>=2),分裂混合物(>=0.0.3),stm公司(>=2.4),template-haskell模板(>=2.6),文本(>=0.11.2.3),第th个提升实例,时间(>=1.4),变压器(>=0.4),无序控制器(>=0.2.3),矢量(>=0.11),矢量二进制实例(>=0.2.3.1),女巫(>=0.3),zlib公司(>=0.5.3.1)[详细信息]
许可证 BSD-3条款
作者 Andres Loeh、Mikolaj Konarski等
维护人员 米科拉伊·科纳斯基(Mikolaj Konarski)<mikolaj.konarski@funktory.com>
类别 游戏引擎,游戏
主页 https://lambdahack.github.io网址
Bug跟踪器 http://github.com/LambdaHack/LambdaHack/issues
源回购 头部:git克隆git://github.com/LambdaHack/LambdaHack.git
已上传 通过米科拉伊·科纳尔斯基2023-10-30T09:45:31Z
分配 架构(architecture):0.11.0.1,借方:0.9.5.0,LTSHaskell公司:0.11.0.1,NixOS:0.11.0.1
反向依赖关系 2直接,0间接[详细信息]
可执行程序 兰达·哈克
下载 总计30512人(过去30天内122人)
额定值 2.25(票数:2)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 用户上传的文档[生成日志]
截至2023-10-30年,所有报告的构建都失败[所有2个报告]

LambdaHack-0.11.0.1自述文件

[返回包描述]

兰达·哈克

黑客攻击 加入Discord的聊天 加入Matrix聊天

LambdaHack是Haskell1ASCII rogue-like游戏引擎库2任意主题、大小和复杂性的游戏,可选战术班战斗。它与样品一起包装地牢爬虫在一个奇怪的幻想设置。示例游戏可以是在浏览器中试用http://lambdahack.github.io.

作为引擎功能的示例,下面是一个展示击落爆炸物。一对情侣被击落足以伤害敌人。其他人在离我们党员更近的地方爆炸了并从空中取出可能会对他们造成伤害的弹丸。游戏中的实际画面。

游戏截图

这是逃跑场景中的半自动隐形快跑示例游戏,本地二进制,SDL2前端,单个微型位图字体。敌方团伙拥有庞大的数字和设备优势。我们队用自动驾驶仪抢劫该地区,直到第一个敌人被发现。然后他们侦察出敌人的阵地。然后英雄1抽签敌人,不幸的是敌人也开火了,这是他勇敢的时候击落炸药以避免最严重的破坏。然后女主角2偷袭了在敌人后方到达剩余的宝藏。完成了,船长发出撤退的信号,然后前往下一个区域(动物园)。

使用发动机

要使用引擎,您需要指定要按程序生成。你宣布什么是游戏世界由(实体、它们的关系、物理和传说)组成引擎构建世界并运行它。该库允许您编译现成的游戏二进制文件,使用提供的或定制的主回路。有几个前端可用(默认为SDL2对于桌面,有一个JavaScript浏览器前端)以及许多其他通用发动机部件很容易被超越,但灵活性的根本来源在于严格并通过引擎代码与只读代码的类型分离来实施内容和来自服务器的客户端(人工和人工智能控制的)。

有关最近的改进,请参阅更改日志文件以及短期计划的问题跟踪程序。长期目标包括多人战术团队战斗、游戏内容创建、自动平衡和持久性内容修改基于玩家行为。欢迎捐款。请向提供反馈mikolaj.konarski@funktory.com或者,最好是,在任何公共论坛上。

已知使用LambdaHack库的不同存储库中的游戏:

  • 星星的诱惑6,一款近期的Sci-Fi游戏

注:引擎和LambdaHack示例游戏捆绑在一起在一次黑客攻击中根据许可发布的包裹英国标准D3许可证。欢迎您通过分叉和修改创建自己的游戏单个包,但请考虑最终拆分您的更改到一个独立的内容密集型包中,该包依赖于上游引擎库。这将有助于我们交流想法和分享改进到公共代码库。或者,您可以已经开始开发通过克隆和改写《星光诱惑》实现分离10并随意与LambdaHack示例游戏规则混合和合并。请注意,LambdaHack示例游戏源自Hack/Nethack视频和叙事传统9而《星光诱惑》则使用了更自由的形式Moria/Angband样式(它还使用AGPL许可证,并且BSD3+AGPL=AGPL,因此,请确保您希望将代码和内容解放到这样的程度)。

安装二进制档案中的示例游戏

游戏在浏览器中运行得相当慢(在Chrome上速度最快)尽管它是可伸缩的,但在所有用途上都限于方形字体。此外,保存文件在浏览器上容易损坏,例如,当游戏仍在保存进度时关闭(这需要很长时间)。因此,在尝试游戏后,如果体系结构中存在本机二进制文件,您可能更喜欢使用它。

预编译的游戏二进制文件可通过发布页面获得11(以及来自GitHub Actions的Linux开发版本18和AppVeyor中的Windows19).要使用预编译的二进制存档,请将其解压缩并运行可执行文件或使用安装程序中的程序快捷方式,如果可用。在Linux上,确保已安装SDL2库在您的系统上(例如,在Ubuntu上是libsdl2-2.0-0和libsdl2-ttf-2.0-0)。对于Windows(不再支持XP),SDL2和所有其他需要的库包含在游戏的二进制存档中。

屏幕和键盘配置

游戏UI可以通过配置文件进行配置。默认配置设置与二进制文件中内置的设置相同,位于github游戏定义/config.ui.default.当游戏首次运行时,或当配置文件被删除,文件被写入默认的用户数据位置,哪个是~/.兰达·哈克/在Linux上,C: \Users\<用户名>\AppData\Roaming\LambdaHack\(或C: \文档和设置\用户\应用程序数据\ LambdaHack\或其他东西)检查/应用/本地存储人民币菜单下在Chrome浏览器中运行时。如果用户配置文件过时或损坏,它会自动与旧的保存文件一起移走了。在下一个游戏开始时,新的默认配置文件出现在其位置。

屏幕字体和窗口大小可以通过编辑进行更改用户数据文件夹中的配置文件。默认位图字体16 x 16 x宽bdf用于游戏地图涵盖了大多数国家的角色拉丁字母(例如为玩家角色指定自定义名称)并生成一个720p高清尺寸的游戏窗口。这个8x8磅/平方英尺位图字体生成一个小窗口,只包含拉丁-1字符。配置文件参数所有字体缩放允许进一步扩大窗口大小调整,自动切换到大型的可扩展版本游戏地图字体(16x16xw.羊毛)。配置文件选项选择字体集管理不仅仅是游戏地图的主字体,还有矩形字体的形状,如果有的话,其中较长的文字覆盖在地图上。

用于高分辨率显示和/或请求全屏模式在配置文件中,所有字体缩放需要设置。例如,刻度3适用于4K显示器。否则,字母可能是太小,或者在OS X的全屏或视网膜显示器上,屏幕可以作为一个整体自动缩放,而不是每个字母分别软化方形字体的字母边缘宁可像素级完美、清脆。

如果你没有数字键盘,你可以用左手移动键设置(axwdqezc)或Vi编辑器键(也称为rogue-like键)或鼠标。如果数字键盘不工作,切换Num Lock键有时会有所帮助。如果使用Shift键和键盘键运行不起作用,请尝试使用Control键。游戏完全可以用鼠标玩,以及只有键盘,但最有效的组合可能是用于菜单、go-to、查看地图、瞄准远处的鼠标其他一切的位置和键盘。

如果运行ANSI终端前端(--前端ANSI在命令行上),然后是数字键盘(尤其是小键盘*,/5)可能不起作用正确地说,这取决于您使用的终端仿真器。摇摆不定Num Lock键可能会有帮助或使问题变得更糟。作为一种变通方法这些问题,数字用于ANSI前端的移动,不幸的是,这阻止了数字键选择英雄。需要同时按下Control和Shift的命令将不起作用两者都是,但幸运的是,它们对游戏性并不重要。

为了使ANSI前端可用于屏幕阅读器,我们做了一些努力,但如果没有反馈,很难说这个设置有多容易使用。这在Windows上不起作用,因为需要额外的代码。作为屏幕阅读器支持的副作用,没有瞄准线ANSI前端中的nor路径和一些地图位置高亮显示使用终端光标执行。屏幕阅读器也可以工作关闭动画效果更好,使用--无动画或相应的配置文件或游戏主菜单选项。

从源代码编译库和示例游戏

要使用基于SDL2的标准前端进行编译,您需要SDL2适用于您的操作系统的库。在Linux上,请记住安装-dev版本例如,Ubuntu Linux 16.04上的libsdl2-dev和libsdl2-ttf-dev。为浏览器编译JavaScript更加复杂并且需要ghcjs15编译器和可选的Google Closure编译器16.

LambdaHack库的最新官方版本可以下载,为SDL2编译并使用“cabal”工具自动安装,它可能已经是您的操作系统发行版的一部分,但如果它太旧(需要3.4或更高版本)您可以下载整个当前编译套件,如中所述https://www.haskell.org/下载/.您可以从Hackage获取并运行LambdaHack包如下

阴谋集团更新cabal安装LambdaHack~/.cabal/bin/LamdaHack公司

对于较新的快照,请从github克隆源代码5然后跑阴谋集团LambdaHack从主目录。或者,如果你想在这个代码库中进行开发,以下内容大大加快了周转速度

cp电缆.项目.local.开发电缆.项目.本地

然后可以使用

阴谋集团建筑

并用

玩游戏

SDL2前端二进制文件还包含ANSI终端前端(--前端ANSI(在命令行上)用于屏幕阅读器和简化的黑白线终端前端(--前端电传打字机)适用于电传打字机终端或键盘和打印机使用大量纸张,除非使用禁用动画--无动画).电传打字机前端用于CI和定义的一些测试和基准在Makefile中。终端前端让您自行处理字体选择和颜色设置,你将不会有彩色方块轮廓SDL2前端中存在的特殊头寸,但仅限于原油光标高亮显示。终端前端应在Windows上运行,但Windows会禁用GUI应用程序的控制台,所以它们不会。

测试和调试

单元测试和集成测试可以使用运行和显示

电缆测试--test-show-details=直接

和文档测试

cabal安装doctest--overwrite-policy=always&&cabal构建cabal repl--build-depends=QuickCheck--with-ghc=doctest定义cabal repl--build-depends=QuickCheck--build dependes=template-haskell--with-ghc=doctest库:LambdaHack

这个生成文件包含许多示例自动播放测试命令。大量使用屏幕保护程序游戏模式的测试(AI与AI)电传打字机前端也聚集在一起进行长时间的测试.其中一些是CI在每次推送到github时运行的。带前缀的测试命令前端启动AI与AI游戏在标准SDL2前端上查看它们。

运行LambdaHack——帮助以查看所有调试选项的简要说明。其中--闻一闻选项非常有用(尽管冗长并且最初是神秘的),用于显示客户端之间的流量和服务器。配置文件中的一些选项可能很有用也用于调试,尽管它们大多与命令行选项重叠(并将在某个时候完全合并)。

编码样式

时尚的Haskell用于缓冲区保存时的轻微自形;看见.stylinsh-haskell.yaml(.stylinish-haskell).如文件中所定义,缩进为2个空格宽,屏幕为80列宽。使用空格,而不是制表符。避免了虚假的空白。鼓励在算术运算符周围使用空格。一般来说,放松并尝试坚持文件中明显的风格你正在编辑。将大的格式更改放在单独的提交中。

CI检查代码hlint公司。使用非常自由的配置文件.hlint.yaml公司.如果hlint仍然太麻烦,可以添加更多异常。

为所有模块标头以及所有函数和类型提供Haddock来自主要模块,尤其是作为接口的模块获取整个模块目录。除此之外,只有非常重要的功能和类型通过有黑线鳕来区分。如果次要的有评论,它们不应该是黑线鳕他们被允许描述实现细节,并且已经过时。除非过于冗长,否则更喜欢断言而不是注释。

游戏手册和UI中的“指点人”在源代码中被称为“领导者”尽管源代码命名UI命名应保持一致。如果UI名称固定不变,可能会在某个时候重命名源代码。

这个代码库是一个无透镜状态广泛使用的实验。到目前为止,它是有效的,没有产生更大的文件或批量具有新员工不需要的额外好处学习任何光学库。记录双关语等,绝对有帮助。

读取代码库的第一步

良好的开端可能是

https://github.com/LambdaHack/LambdaHack/blob/master/GameDefinition/game-src/Client/UI/Content/Input.hs

这就是键盘键被分配命令、帮助文本和类别的地方(包括特殊类别,表示一组键也会形成游戏内菜单)。此文件特定于特定游戏(因此游戏定义在路径中),引擎动态创建基于此文件和玩家配置文件的游戏内帮助屏幕这可能会部分覆盖它。

分配给键的命令由UI客户端解释(游戏中的每个派别都会额外使用一个客户端和玩家的客户端具有UI功能):

https://github.com/LambdaHack/LambdaHack/blob/master/engine-src/Game/LamdaHack/Client/UI/HandleHumanM.hs

至此,您已经看到了六个主要命令集之一(人性命令,其他人正在效果,UpdAtomic(升级原子),请求,响应,前沿需求)和大约十个不同的命令解释程序之一(大部分在把手*模块)。您还看到了一些UI客户端代码,但不是AI客户端或服务器(游戏仲裁器)代码。维基17包含不完全过时的进一步阅读客户端-服务器体系结构。

在这一点上,在试图掌握更多东西并沉溺于抽象之前,欢迎你来拿一些良好的首次发行-带标签的票并获得一些代码库的实际操作经验。

为了进一步研究,请注意,大多数命令都是在monad中解释的。服务器和客户端共享一些定制的monadic API,但monad的实现方式不同(在*实施模块)。所有这些单体都是状态单体(管理游戏状态的不同方面),因此,命令的语义是一个带有额外的状态转换器副作用(例如前端拉伸)。

“主循环”如下:UI客户端接收按键并解释它们对应的命令。只要其中一个命令不仅仅是本地UI操作,而是更改游戏主状态的请求,这样的请求被打包并发送到服务器(例如,请求将英雄转移到北方)。服务器响应“不可能,有墙”或通过发送给客户端(所有UI和AI客户端)进行反应可以看到事件)一系列的游戏状态改变响应。同样,AI客户端向服务器发送基于生成的请求感知到的游戏状态变化和每个AI派别的AI目标。

更多信息

有关更多信息,请访问wiki4并查看播放.md,信用COPYLEFT公司.

玩得高兴!