问题标签 [mud]

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 投票
4 回答
1791 浏览

ruby - 我应该如何构建我的(主要是)基于文本的游戏服务器?

想想 MUD/MUCK,但可能带有头像或语言环境插图。我选择的语言是ruby​​ 。

我需要处理多个持久连接,数据在服务器及其各个客户端之间异步传输。单个数据库必须根据客户端会话中发生的活动保持最新。每个客户端会话中的活动可能需要立即更新多个其他客户端(用户进入房间;用户向另一个用户发送私人消息)。

这是一个目标项目 ,也是一个学习项目,所以我的意图是重新发明一两个轮子来学习更多关于并发网络编程的知识。但是,我对并发编程和网络编程都很陌生。以前,我几乎只在 Web 应用程序中的非持久、同步 HTTP 请求领域工作。所以,我想确保我正在重新发明正确的轮子。

根据emboss的出色回答,我已经开始研究某些 HTTP 服务器的内部结构,因为 Web 应用程序通常可以避免线程问题,因为服务器本身将问题抽象得如此彻底。

我不想使用 EventMachine 或 GS​​erver,因为我还不了解它们的作用。一旦我大致了解了它们的工作原理、它们解决了哪些问题以及它们为何有用,我就会对它感到满意。我的目标不是“编写游戏”,而是“编写游戏并了解一些较低级别的东西是如何工作的”。我也不清楚某些术语的界限;例如,“I/O-unbound apps”是“event-driven apps”的超集吗?反之亦然?

我当然对实现目标的一种正确方法感兴趣(如果存在),但总的来说,我想了解为什么它是正确的方法以及为什么其他方法不太可取。

任何你可以建议的书籍、电子书、在线资源、示例项目或其他花絮都是我真正想要的。

我现在做事的方式是使用IO#select阻塞连接的套接字列表,超时为0.1秒。它将读取的任何信息推送到线程安全的读取队列中,然后每当遇到超时时,它就会从线程安全的写入队列中提取数据。我不确定超时是否应该更短。还有第二个线程轮询套接字处理线程的读取队列并处理“请求”。这比我最初的工作方式要好,但仍然可能不理想。

我在 Hacker News 上发布了这个问题,并链接到了我正在研究的一些资源;任何类似的东西都会很棒:

0 投票
1 回答
684 浏览

c# - C# 跨平台 RichTextBox URL 或替代解决方案

我正在开发一个 C# 应用程序来与 MUD/MOO 服务器通信。基本上它需要文本并将其显示在屏幕上。目前我正在使用 RichTextBox 来显示文本,并且我的彩色文本工作正常,我只需要实现 URL,但是在执行此操作时我发现添加带有自定义文本的 URL(例如,不是 http://,比如:点击这里)我需要使用 Win32 API,我不能这样做......根本。这需要在 linux ( 可能还有 mac ) 上单声道工作。有没有办法使这项工作?或者我应该寻求哪些替代途径?(我正在考虑切换到 HTML,但有没有好的跨平台 HTML 控件?)(所有这些都必须是免费的)。

先谢谢了。

我最终使用以下方法做到了:

只需将所有链接附加到 Links 堆栈,并在 MouseDown 事件中使用 GetLink :)

0 投票
1 回答
456 浏览

python - sendLine 不会发送整数(Twisted Python)

我正在使用 Twisted 库在 Python 中编写 MUD。我目前正在尝试通过 sendLine 方法将整数发送到 LineReceiver 模块。但是,每当我尝试发送整数时,我都会在运行程序时收到以下错误消息:

导致错误的行是:

0 投票
1 回答
1440 浏览

c++ - 在 Linux 上不接受调用就监听套接字连接

我在 Ubuntu Linux 上运行代码它应该使用 Set 并选择检查监听套接字何时有活动(即有人试图连接)并让他们连接,问题是选择总是返回 0,当我尝试连接时它只是直接连接。但是在服务器上 Accept 永远不会被调用,因为 select 总是返回 0,所以我想知道是什么原因造成的?

是运行民意调查的代码以防万一

附加代码是:

它也在这里使用 { // 定义一个数据套接字,它将接收来自监听的连接 // 套接字 DataSocket datasock;

如您所见,它不会执行 .Accept 直到它从选择中获得活动之后,但它永远不会得到那么远的绑定和侦听调用在这里模板 void ListeningManager::AddPort(port p_port) { if( m_sockets.size( ) == MAX ) { 异常 e( ESocketLimitReached ); 抛出(e);}

0 投票
3 回答
1988 浏览

python - 绘制泥图

我正在尝试绘制一些泥浆的地图。我使用 python 和 graphviz 得到了类似的东西:

http://img23.imageshack.us/img23/5222/arrasz.png

正如您所看到的,我们有一些位置,并且会前往 N/S/W/E/Up/Down,我们将前往其他位置。

是否可以使用 graphviz 绘制此地图以使北部位置在南部,东部位置在西部位置的右侧?

我的意思是这样的:

或者也许有比graphviz更好的工具来自动绘制它?

0 投票
8 回答
46416 浏览

java - Java 连接以构建字符串或格式

我目前正在使用 java 编写一个 MUD(基于文本的游戏)。MUD 的主要方面之一是格式化字符串并将其发送回用户。这将如何最好地完成?

假设我想发送以下字符串:

你对某人说“你好!” - 其中“某人”、“说”和“你好!” 都是变量。哪个是最好的性能明智的?

"You " + verb + " to " + user + " \"" + text + "\""

或者

String.format("You %1$s to %2$s \"%3$s\"", verb, user, text)

或其他选择?

我不确定最终哪个会更容易使用(这很重要,因为它无处不在),但我现在正在考虑它,因为与 + 连接有点令人困惑一些较大的线路。我觉得在这种情况下使用 StringBuilder 只会使它更不可读。

这里有什么建议吗?

0 投票
1 回答
354 浏览

arrays - 这是使用 YAML 的有效方法吗?

我一般是snakeyaml和yaml的新手。我需要它来存储有关MUD的“房间”的信息。

房间的条目将如下所示:

基本上,每个房间都有一个id和一些文本要在玩家进入/搜索时显示给玩家。它还有一个“对象”数组,它们本身在同一个 yaml 文件中声明。

我的 yaml 文件中的这种配置是否可行?另外,我需要将每个房间和每个对象提取到数组中,所以它看起来像这样:

这种配置使我可以轻松地解析文件并通过创建一个循环并通过数组位置引用每个值来创建 GenericRoom 和 GenericObject 类。这是 SnakeYAML 可以为我做的事情吗?我一直在玩一些例子,但我对实际 YAML 缺乏了解,这让我很难得到好的结果。

0 投票
1 回答
407 浏览

java - 从带有套接字的泥浆中接收数据 - telnet 协商?

首先,为了让问题更容易理解,我对 Java 网络有一个相当了解,但是到目前为止我所做的所有网络都是发送命令-> 等待响应-> 重复. 最近我在业余时间尝试了一些有点不同的东西。我想连接到 Mud,我使用标准的泥客户端。但是,我开始思考并决定我是否可以创建一个服务器,然后连接到泥浆(所以,我会使用我的客户端连接到中间服务器,然后它会正确连接到泥浆) . 大多数情况下,这只是为了看看我一开始是否可以(我和几个朋友想建立游戏外聊天等),但我遇到了一些问题,现在想解决它们以供将来参考,因为它们看起来很公平重要的。

到目前为止,我设置了一个 ServerSocket,接受一个客户端连接,生成 BufferedReaders/PrintWriters 来保存输入和输出流(在每个新连接的线程内)。然后我在该客户端线程内生成第二个线程以连接到泥,然后不断循环读取行并将它们输出到客户端线程的输出流。客户端线程循环等待命令输入,并对其进行处理。

我不确定这种方法是否合适(正如我所提到的,我从未做过必须同时处理输入和输出的 Socket 编程)。主要问题是输出只是在几行后停止。服务器很好地连接到泥浆,它打印了大约 12 行左右的登录屏幕(我可以澄清这个数字,如果它很重要,双行间距使它有问题)。我环顾四周,在其他问题中提到需要发送字节序列(telnet 协商?我不熟悉该术语)以避免类似问题,但我找不到有关该问题的具体信息。

我相当确定这是我不知道的技术性问题,但是如果有人可以向我指出一些资源或提供通用解决方案等,那就太好了。

0 投票
5 回答
950 浏览

java - 将线程用作“会话”

我正在开发一个基于文本的游戏,MUD。我已经准备好程序的基本功能,现在我想允许一次连接多个客户端。我计划使用线程来实现这一点。

在我的游戏中,我需要存储每个玩家的当前位置或健康点等信息。我可以将它保存在数据库中,但由于它会很快改变,有时每秒一次,使用数据库效率会低(我说的对吗?)。

我的问题是:线程可以表现为“会话”,即持有每个用户独有的一些数据吗?

如果是的话,你能指导我一些我可以用来帮助我理解它是如何工作的资源吗?

如果没有,你有什么建议?数据库是一个不错的选择还是您会推荐其他东西?

干杯,Eleeist

0 投票
2 回答
260 浏览

javascript - 用 JavaScript 表示地牢然后用怪物填充它的最佳方式是什么?

我正在尝试创建一个 MUD 作为练习 JS 的有趣项目(我是一个完全的菜鸟,但受到 codecademy 的启发而学习更多!)我希望我能得到一些关于如何在 JS 中代表我的地牢的建议.

我想为我的地牢拥有的功能是:

  1. 地牢应该有随机数量的房间(在指定的参数内)
  2. 房间应该自动填充怪物
  3. (我们现在可以忽略房间是如何连接的)

鉴于 JS 是 OO 语言,我认为表示地牢的最佳方式是作为一个对象:

然后计划为 Room 对象创建方法,允许玩家与房间中的东西进行交互。

问题:

1)这是个好主意/会奏效吗?

2) 如何为对象生成随机数量的属性?

谢谢!