问题标签 [roguelike]

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 投票
1 回答
1233 浏览

objective-c - roguelike地图的数据结构

我需要一个流氓游戏中的地图数据结构

每个单元格应包含对象数组。地图的尺寸​​很大,但具有指定坐标的单元格内容应该可以非常快速地访问。地图应该是部分可序列化的(2kx4k 地图,我只想读取从 (3,4) 到 (40,20) 的图块)。

我现在拥有的最佳选择是 NSMutableDictionary,其中 coords 作为键,NSMutableSets 作为非空单元格的填充物。但我不确定非常频繁操作的速度:从单元格的此地图部分读取以绘制到屏幕。可能我应该在每个单元格中存储邻域单元格的指针吗?

目标平台 - Objective-C/iOS/Cocos2d

关于 Objective-C(甚至可能是 Cocos2d 框架的库)是否有任何解决方案?

0 投票
2 回答
6288 浏览

java - 使用 Java 在带有面板的网格中显示 ASCII 的最佳方法是什么?

我在Java方面没有太多经验,但我正在尝试编写一个简单的类似rogue的游戏来熟悉它,我只是想知道如何创建这样的界面:

Thomas Biskup 的 JADE 屏幕 有什么明显的方法可以让你去做这样的事情吗?作为 Java 新手,我真的不知道最好的方法是什么。

抱歉含糊其辞!

谢谢

0 投票
2 回答
450 浏览

design-patterns - 这是一种设计模式吗?如果有,它的名字是什么?

我目前正在用 C++ 开发一个回合制 RPG(类似流氓),并且我在我的代码中创建了一个看起来像某种设计模式的简洁架构,因为我记得在其他一些项目中看到过这样的代码结构。我想知道这是否是我偶然发现的某种设计模式,如果是,它的名称是什么。我在程序的其他部分特意应用了一些模式,例如Factory和Singleton,但下面是对程序另一部分的粗略描述,我不知道是不是模式:

我有一个名为GameElement的基类,它是可能出现在游戏字段中的每个对象的根。这个类实现了所有子类继承的关于四处移动、检测碰撞等的基本和复杂的行为,因为无论元素的类型如何,它都是常见的行为。另外,它有 2 个虚拟方法,默认情况下什么都不做,但可以被子类覆盖:handleCollision(GameElement* e)handleTurn()。可以重新实现handleCollision方法,以便对象在与另一个对象(尤其是玩家)发生碰撞时知道该怎么做,以及方法handleTurn存在,以便对象有机会在轮到他们时做他们想做的任何事情。到目前为止,我已经创建了几个子类,即SolidElementPushableElementFighterElement(用于玩家和敌人)、继承 FighterElement 的PlayerElement(玩家)和也继承FighterElementEnemyElement(万恶之根

还有一个名为GameEngine的类,它在run()方法中封装了游戏循环(也有 SDL 事件循环) 。这是此方法的(相当短的)实现:

在游戏循环中,它调用handlePlayerCollisions,它有一个循环通过当前场景中的整个GameElement*容器,在每个容器中调用handleCollision(player),这样如果该元素与玩家发生碰撞,取决于元素的类型,它可以对玩家做一些事情,例如伤害、挡住他的去路、移动(即被推动),或者类在其handleCollision方法中实现的任何其他事情。此外,调用了方法handleTurns ,它的作用与handlePlayerCollisions几乎相同,只是它调用了 handleTurn在每个元素中,以便他们可以做自己喜欢的事情。另一个调用的方法是updateScreen,它完全按照它的名字所说的那样做。最后一件事是用于处理按键输入的 SDL 事件循环。

如果这个架构是某种设计模式,并且如果我知道它是什么模式,那么我在其他项目中使用它会容易得多,并且在我需要或有的时候向其他人解释它会花费更少的时间至。

0 投票
2 回答
119 浏览

java - 使用 KeyStroke 进行输入,是否有更简单的读取 A - Z 键的方法?

首先,这不是用于键盘记录器,而是用于 roguelike 游戏中的输入,其中JLabelJFrame会说“名称:”并且我希望能够键入 A-Za-z。在查看了许多按键输入选项之后,我又回到了开始使用KeyStrokes 和Actions 的地方。

我想知道是否有办法添加一系列键,而不是重复 56 次:

我的意思是,我可以这样做,只是写一点复制和粘贴,但我真的很讨厌那样。必须有一个比使用KeyListener它不是很好的更优雅的解决方案,因为这意味着我必须以某种方式集中注意力,但我的窗口只是一个JFrame很大JLabel的窗口。

另外,我现在才做java几天,所以这就是为什么我可能错过了一个非常普遍的解决方案,但如果有的话,请分享!赞赏。

0 投票
1 回答
2612 浏览

java - 带有游戏循环的 Java 和 Swing

(不是这样)这里的简短问题。我正在使用 Swing 作为 UI 而不是控制台(这使得在 Eclipse 中更容易使用,等等),但我似乎遇到了障碍。

我遇到的问题是,当我进入游戏循环时,UI 将无法正常显示。我得到了一个丑陋的窗框,它在整个过程中给了我“纸牌”的效果,并且在运行时它的 RAM 使用量迅速增长。

我在这里错过了关于 Swing 的一些重要内容吗?我必须使用 Swing 的并发设置来执行此操作吗?如果是这样,最好的方法是什么?

完整代码如下:

0 投票
1 回答
329 浏览

c++ - Code::Blocks 中的 C++ 非类成员编译错误?

我正在尝试按照此处找到的教程来学习编程 roguelike 游戏背后的基本思想。我正在使用 Code::Blocks 10.05 从我的 USB 运行便携式并使用 MinGW 进行编译。Console.h 也来自我上面链接的网站。

当我试图设置这个类以确保一切正常时,我遇到了障碍:

当我尝试使用时,出现以下错误:

错误:在“控制台”中请求成员“清除”,它是非类类型“Win32Console()”|

任何帮助表示赞赏,谢谢!

编辑

在迅速为自己毁掉它们之后,我重新安装了 MinGW 和 Code::Blocks,现在又出现错误:

未定义对 `Win32Console::Win32Console() 的引用

0 投票
1 回答
766 浏览

haskell - 使用 Haskell 和 Repa 动态生成 Roguelike 地下城

在这里找到了类似的问题

我正在开发一个用 Haskell 编写的 roguelike 游戏。我决定使用 将世界表示为 2D 网格Data.Array.Repa,现在我希望动态生成随机地牢,其中可以包含直的或 90 度转弯的走廊,以及(几乎)任何大小和形状的房间。

我很难找出生成这些地牢的策略。醉汉的步行可能会奏效,但似乎它可能太不稳定并且不会产生很多房间。生成地牢的更好方法是什么?

另外,Data.Array.Repa在这里使用的数据结构是一个不错的选择吗?

0 投票
5 回答
1156 浏览

c++ - 在 DOS 窗口中的任意位置写入

我正在寻找一种以 Roguelike 方式显示“DOS”输出的方法,即。看起来你有一个充满字符(级别)的 DOS 窗口,当用户按下按钮、用鼠标点击等时,这些字符可以改变或移动。

在普通的 DOS 窗口中(比如经典 c++ 程序或 .bat 的输出),您只能“编写更多文本”,如果有任何变化很麻烦并导致伪影(更新后的关卡会慢慢滚动),您必须重新绘制整个关卡)。

我知道我可以使用 Qt 或 SDL 并用字符绘制 2D 瓷砖来克服这个问题,但我想做的事情似乎很复杂,有没有一种简单的方法(比如 C++ 库)可以让我在任何地方绘制字符/一个'DOS'窗口?

谢谢!

[编辑] 谢谢,我会检查你所有的建议,+1!

[编辑]PDCurses 获胜,可以在此处找到有关如何使用它的教程(上面写着 NCurses,但它对于一个简单的 Hello world 示例非常有效): http ://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

0 投票
1 回答
1527 浏览

python - Python / LibTCOD - libtcod.console_wait_for_keypress(True) 为每个输入触发两次

我正在阅读Roguebasin python/libtcod roguelike 教程。我遇到的问题是,每次key = libtcod.console_wait_for_keypress(True)调用时,主循环都不会触发一次,而是触发两次。处理键盘输入的代码如下:

代码从本教程的这一部分逐字提取(除了额外的四个空格缩进) 。请注意,该页面上有两个代码版本。我写了自己的版本,但即使直接复制/粘贴,我也会遇到问题。据我所知,这个问题贯穿了整个教程。

console_wait_for_keypress(True)应该等待一个键并将其放入“键”变量中,这样我就可以对其做出反应。所有其他输入都应该被刷新。然后再次调用主循环的新迭代console_wait_for_keypress(True),这应该等待新的输入,依此类推。相反,触发器的每第二次迭代都console_wait_for_keypress(True)无需等待新的输入。

游戏实际上运行良好,因为第二个输入不会触发任何console_is_key_pressed()条件,并且handle_keys()函数返回“didnt-take-turn”,它告诉游戏逻辑什么都不做。这仍然意味着对于每个周期,都会花费两个,这不是所需的行为。handle_keys()如果您打印每个循环的结果,问题很容易观察到。它在“None”和“didnt-take-turn”之间交替。

老实说,我对此感到困惑。简单地按住一个方向按钮似乎不会产生'didnt-take-turn'输出,但该功能应该用于单个按键。延迟不能太短,因为正常的按键总是会产生两个输出。libtcod 文档无法帮助我。

我应该怎么做才能使单次击键仅触发一次console_wait_for_keypress()

0 投票
1 回答
803 浏览

unity3d - Unity上导入的基于平铺的地图上的纹理问题

我正在尝试统一开发一款类似流氓的游戏。因此,我需要一个基于图块的地图。

感谢本教程,我轻松创建了一个 9x9 方形平铺地图。 http://classes.design.ucla.edu/Winter11/157B/wp-content/uploads/2011/01/BoardGameTutorialPart31.pdf

对于“太长,没看”的家伙,我基本上都是这样做的;

  1. 我使用 Adob​​e Illustrator 绘制了一个基于 2D 9x9 方形瓷砖的地图,并将其保存为 Illustrator 8 文件。
  2. 我将该 AI 文件导入 Autodesk Maya 并在其上使用 Mesh-> Seperate 工具。之后,我取消了所有瓷砖的父级,并创建了一个基于 3D 瓷砖的地图。我将 .FBX 文件导出到我的统一项目资产文件夹
  3. 我将 .FBX 文件从我的 Assets 文件夹中拖放到我的场景中。完毕。

现在,我的问题是,我想在单个图块上应用纹理。然而,每当我尝试将纹理应用到任何图块时,它的行为就像我只使用了 1 / 81 的纹理(请记住,它是一个 9x9 贴图)并且只将纹理的那部分应用到相关图块。

我正在上传截图以便更好地理解。

在此处输入图像描述

我用谷歌搜索了我的问题,根据我的发现,它正在发生,因为我没有做任何 UV 映射。好吧,问题是我不知道该怎么做(这将是我的第一款游戏,而且我是 3D 建模的超级新手)。只有网络上的示例是关于一般 UV 映射(如何映射立方体或其他一些通用形状)我不知道如何使用 Maya 将 UV 映射到基于图块的贴图。

实际上,即使我不知道这是否是 UV 映射问题。我被困住了。请帮我。

提前致谢!