问题标签 [nethack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
1628 浏览

python - 如何将此 NetHack 函数移植到 Python?

我正在尝试编写一个 Python 函数,它返回与游戏 NetHack 中相同的月相值。这可以在hacklib.c中找到。

我试图简单地从 NetHack 代码中复制相应的函数,但我不相信我得到了正确的结果。

我写的函数是phase_of_the_moon().

我在网上找到的函数position()phase(),我用它们作为我函数成功的标志。它们非常准确,并且给出的结果与 nethack.alt.org 服务器大致匹配(参见http://alt.org/nethack/moon/pom.txt)。然而,我所追求的是原始 NetHack 功能的精确复制,特性完好无损。

我希望我的功能和“控制”功能至少提供相同的月相,但目前他们没有,我不知道为什么!

这是 NetHack 代码:

这是getlt()函数(也在 hacklib.c 中):

这是我的 Python 代码:

0 投票
5 回答
3491 浏览

artificial-intelligence - 构建 NetHack 机器人:贝叶斯分析是一个好策略吗?

我的一个朋友正在开始构建一个 NetHack 机器人(一个玩 Roguelike 游戏的机器人:NetHack)。对于类似的游戏 Angband 有一个非常好的工作机器人,但它工作的部分原因是回到城镇很容易并且总是能够在低等级浮渣获得物品。

在 NetHack 中,问题要困难得多,因为游戏奖励大胆的实验并且基本上构建为 1,000 个边缘案例。

最近我建议使用某种朴素贝叶斯分析,这与创建垃圾邮件的方式非常相似。

基本上,机器人首先会构建一个语料库,通过对它找到的每个项目或生物尝试所有可能的动作并存储该信息,例如,它有多接近死亡、负面影响的伤害。随着时间的推移,您似乎可以生成一个相当可玩的模型。

任何人都可以为我们指出一个好的开始的正确方向吗?我是在找错树还是误解了贝叶斯分析的概念?

编辑:我的朋友提出了一个允许 python 绑定的 NetHack 补丁的 github 存储库。它仍然处于相当原始的状态,但如果有人感兴趣的话......

0 投票
1 回答
1682 浏览

iphone - 在 UILabel 或类似中显示来自其他编码的“特殊”字符

我希望能够在我的 iPhone 上模拟一个终端,使用我在真正的 DEC 终端上喜欢的原始图形玩 Nethack 之类的游戏。Nethack 允许为 vt 兼容终端选择 DECgraphics 或为代码页 437 支持选择 IBMGraphics。

我知道这些特殊的图形字符是由发送到终端的字符串生成的(vt100.net 有大量的信息,包括终端手册和测试程序)。我可以接收和解释这些字符串,但我需要能够在 UIView 中重现和显示这些字符。

看起来 kCFStringEncodingMacVT100 和 kCFStringEncodingDOSLatinUS 是解开谜题的关键。这是一些部分代码,显示了我试图将“特殊字符”字形放到 UILabel 上:

我尝试了从 0 到 255 的 c 值。我可以显示从空格到 '~' 的字符,使用此代码之间的所有预期内容,但根本没有角或其他行字符。当没有要显示的字符时,charString 为 nil。

现在我很确定 Courier New TTF 有这些字符 - 在我的 Mac 上,我可以玩 Nethack,终端字体设置为 Courier New,我可以设置 DECgraphics 并且显示正常。

所以问题是:

  • 上面的代码有什么问题?
  • 有哪些免费提供的等宽 Truetype 字体支持 DEC 特殊字符和/或代码页 437?
  • 一旦你确定了那些字形,你如何测试一个 TTF?
  • 您如何在 UILabel 或类似文件中显示这些字形?

(我不想使用任何可用的图形图块集,我不喜欢它们。我知道至少有两个免费的 Nethacks 可用,但没有一个具有我想要的简单键盘界面,我发现弹出一个窗口因为一切都非常缓慢和令人沮丧。我知道这不是一个容易的项目。而且我可能想有一天去 Angband。)

0 投票
2 回答
393 浏览

c - NetHack 源代码中的“NEARDATA”是什么意思?

NetHack 源代码(用 C 编写)有一些我不明白的地方。

在 Nethack 3.4.3 源代码中可以找到以下代码:

(在http://nethackwiki.com/wiki/engrave.c#line9的 engrave.c 的第 9 行)

(在http://nethackwiki.com/wiki/cmd.c#line106的 cmd.c 的第 106 行)

(在 cmd.c 的第 157 行)

有人可以向我解释一下“NEARDATA”、“STATIC_VAR”、“STATIC_PTR”和“STATIC_DCL”是什么,以及它们的含义吗?

0 投票
1 回答
837 浏览

javascript - 如何从 Node.js 连接到 nethack?

我刚刚为游戏启动了一个 AI 机器人nethack,我无法绕过源代码中的“人工检查”。我正在谈论的代码部分是nethack/sys/unix/unixunix.c

我正在使用 JavaScript(更具体地说是 Node.js),由于上述原因,它不会让我从程序中播放,即使我正在生成一个 bash shell 子进程并告诉它 start nethack。我需要想办法绕过上述方法而不重新编译源代码。

我正在使用的当前代码是:

程序的输出是:

我可以使用什么 Node.js/JavaScript(而不是任何其他语言或框架,如果可能的话)黑魔法来解决这个问题?

0 投票
2 回答
751 浏览

c++ - NetHack 走廊实施

我只是在玩 NetHack,因为我正在为自己编写一个简化版本。我的问题是,走廊是如何实施的?几天来我一直在想一种方法,但无法提出任何合理的方法。

0 投票
1 回答
598 浏览

nethack - Nethack源代码在哪里

有没有可以查看DOS nethack源代码的地方?每当我尝试下载源代码文件时,它都不允许我打开该文件。是否有网站/在线 pdf 上面有代码?另外,如果有任何关于初级 c++ roguelike 的教程,你能告诉我链接吗?谢谢你。

0 投票
1 回答
905 浏览

python - 如何让 Python (2.7.x) 程序输出类似 nethack 的 ASCII 图形?

我正在寻找一个不断需要输出 ASCII 图形帧的控制台游戏,但我想知道如何使该功能更加流畅。虽然我不相信该nethack-console游戏不是用 Python 编写的,但我正在研究它如何能很好地显示似乎不会四处移动的“动画”帧,并且没有清楚地显示图形是“重印”的,反过来使图形非常一致,并且发生的任何动画“似乎都是在单个打印输出上完成的”。如果描述不够清楚,让我举个例子:

000X

如果“x”将向左移动一个单位,我想在控制台上看到这个:

00X0

并不是:

000X 00X0

0 投票
1 回答
1013 浏览

c - 如何在 Windows 7 中编译 NetHack?

我喜欢 NetHack,我想和源代码一起玩一些有趣的东西。在我这样做之前,我希望能够开箱即用地编译它,但我很难做到这一点。

我从这里下载了源代码,并按照这里的说明进行操作,但是没有用。

我最终得到以下

我看了看它正在谈论的那一行,但它并没有真正告诉我任何事情。我确实注意到在包含目录中创建的 date.h 文件总是空的,但这对我也没有多大帮助。我阅读了 Install.nt README,其中的说明似乎非常明确。但是,由于我没有更改任何内容,因此我不知道为什么它无法编译...

我认为自己是一个称职的程序员,但在 makefile 和将 C 代码编译成可执行应用程序方面我几乎一无所知,所以我很迷失在这里。我下载并安装了 MinGW ......一切,我的意思是当我运行 MinGW 安装程序时,没有任何东西被卸载。

我在这里做错了什么?

编辑:由于 date.h 被提及:

我确实注意到它似乎正在对 进行某种调用OPTIONS_FILE,这似乎已被注释掉。我将取消注释,看看会发生什么。

编辑 2那没有用。是否有可能我必须手动创建/更新 date.h 文件?如果是这样,我在里面放什么?听起来像谷歌的问题......

编辑 3我发现是一个更旧的版本,并试图改变它,但它也没有工作......

编辑 4有人提到Makedefs这似乎是崩溃的事情。我发现似乎导致问题的 C 函数:

另外我应该提到当它在编译过程中到达这一点时,立即有这个图像: 在此处输入图像描述

所以我们已经将问题(我认为?)缩小到破坏事物的 makedefs 帮助程序,所以现在我想下一步是找出原因?

编辑 5:建议在编译 Makedefs.c 时使用特殊参数。我查看了 Makefile 以找出编译发生的位置,我想我已经找到了发生的位置,但我真的不知道这里发生了什么。

我知道这$(*)是一个变量或 Makefile 等效的变量。

$(U)指向$(UTIL)/$(UTIL)指向../util$(MAKEOBJS)指向$(O)makedefs.o $(O)monst.o $(O)objects.o. $(O)考虑到我在半成功运行中观察到的行为(在大冻结之前编译了几个文件),$(OBJ)/o$(O)makedefs.oo/makedefs.owhich 是有意义的。

无论如何,$(link)指向gcc. $(LFLAGSU)指向$(LFLAGSBASEC)哪个指向$(linkdebug)哪个指向-g

$(CONFIG_H)指向大量头文件:

$(INCL)指向../include. $(CFLAGSU)指向$(CFLAGSBASE) $(WINPFLAG). $(CFLAGSBASE)指向-c $(cflags) -I$(INCL) $(WINPINC) $(cdebug) $(cflags)指向 指向-mms-bitfields $(WINPINC)指向-I$(WIN32) $(WIN32) 指向../win/win32 $(cdebug)指向-g $(WINPFLAG)指向-DTILES -DMSWIN_GRAPHICS -D_WIN32_IE=0x0400. . . 它就在那里。我认为这就是我需要修改的内容,以使其与 RossRidge -D_USE_32BIT_TIME_T 提到的内容一起工作。

但是,既然我已经走了那么远,我确实想找出其中一些东西的含义。当我看到第一行时$(U)makedefs.exe :。对我来说,这似乎是编译输出文件的目标声明?那是对的吗?@另外,之前$(link) $(LFLAGSU)和之后的含义是什么-o$$之后的含义是-o什么?

无论如何,我想尝试一下我想出的东西,看看它是否有效。... Aaaand 添加-D_USE_32BIT_TIME_TWINPFLAG没有工作。

最终(ish)编辑:原来罗斯里奇在他使用-D_USE_32BIT_TIME_T旗帜的建议中是正确的。我的错误是把它放在错误的地方。如果您查看框中的 Makefile.gcc,请查看第 165 行(在 IF 语句中)。你想-D_USE_32BIT_TIME_T在最后完成。但是您还需要在第 176 行的末尾添加它,该行位于该 IF 语句的 ELSE 末尾。所以整个块看起来像这样(不是一个巨大的变化,但如果你不这样做并且你在我的情况下运行,它仍然足以让它崩溃):

0 投票
1 回答
87 浏览

c - 无法使用 MinGW 编译先前修改的 Nethack - 缓存问题?

所以最近,我在搞乱Nethack的源代码,一个相当古老的游戏。我使用本指南来帮助我入门:编译 - Wikihack

为了测试,我首先编译了原始源代码。稍作调整后,我就可以毫无问题地运行它。接下来,我稍微编辑了源代码,并在现有怪物的基础上添加了两个示例怪物。游戏编译没有任何问题,我的测试怪物出现在游戏中。

之后,我尝试稍微调整一下怪物并重新编译。但是出于某种原因,我的任何调整都没有出现。我决定删除所有内容并从头开始,再次重建原始源,尚未进行任何修改。现在突然间,我遇到了错误,引用了丢失的测试怪物。

这怎么可能?我仔细检查了这个测试怪物不在源代码中(为什么应该在源代码中?它是原始源代码)。我唯一的解释是编译器出于某种原因正在缓存以前的数据。完全清空 monst.c 没有任何区别,但删除它会使编译器抱怨缺少文件。

这是有问题的错误:

我该如何解决这个问题?