创建基于网页的《末日骰子》图形化版本及优化玩法
1. 《末日骰子》现有服务器的局限性及改进方向
目前的 dod-request-handler
存在一些局限性,它无法支持多个玩家同时进行不同游戏,若多个玩家同时尝试玩不同游戏, dod-request-handler
会产生混淆。不过,将其扩展为支持多个并行游戏的真正的 Web 服务器并非难事。具体操作如下:
- 从 Web 服务器作为参数传递的头部数据中提取会话信息。
- 将所有引用的变量(如 *cur-game-tree*
)存储在一个哈希表中,使用会话信息作为键。这样每个玩家都将拥有自己的游戏树,引擎就能并行处理多个游戏。不过,实现这个多游戏版本的 dod-request-handler
需自行完成。
此外, dod-request-handler
还存在一个安全问题,它使用 read-from-string
函数从 URL 读取信息,该函数可能会被有经验的恶意 Lisp 程序员利用来运行任意代码。
2. 游戏初始化及相关功能函数
- 初始化新游戏 :使用
web-initialize
函数初始化游戏引擎以开始新的《末日骰子》游戏。
(defun web-initialize ()
(setf *from-tile* nil)
(