Python制作复古地牢文字冒险游戏


巨洞冒险(Colossal Cave Adventure),又名 ADVENT、Clossal Cave 或 Adventure,是八十年代初到九十年代末最受欢迎的基于文字的冒险游戏。这款游戏还作为史上第一款“互动小说(interactive fiction)”类游戏而闻名。在 1976 年,一个叫 Will Crowther 的程序员开发了这款游戏的一个早期版本,之后另一位叫 Don Woods 的程序员改进了这款游戏,为它添加了许多新元素,包括计分系统以及更多的幻想角色和场景。
今天的技术发展已经远远超越了那个时代,但我仍然对那个年代的游戏充满好奇。今天我就来用Python游戏实现一个复古风格的地牢文字冒险游戏。
游戏规则设计
游戏主要场景是迷宫,四周的#是墙壁,无法穿过。
M表示怪物,G表示哥布林,H表示玩家
遭遇怪物通常有几率对你造成一定的伤害,并且遭遇怪物后怪物并不会消失,下一次再来到这个格子时还会再遭遇怪物
哥布林是友善的,遭遇不同类型的哥布林有几率给你不同的增幅,加血,加小苹果等,哥布林遭遇后会消失
移动一格需要消耗1点血量
血量归零则游戏失败
游戏的核心就是:玩家需要合理规划路线,在血量归零前遭遇所有的怪物即可获得游戏胜利
胜利分数就是通关时剩余的小苹果数量,小苹果数量越多胜利分数越高。排行榜按照胜利分数排名。
地牢生成
地牢的生成算法是一个递归算法,算法过程有点类似分割房间。
首先,创造一块边长为s的正方形场地,随机一对x和y作为切割点,x为横向切割点,y为纵向切割点,通过把x行和y列的值全部设置为1(墙)把这块场地切割成4份
两条切割线构成了4面墙(可以看作是从交点延展开的四面墙),在其中三面墙上打个洞(置0表示空)使其整体连通,对这四个小房间进行递归调用,直到无法切割为止。

用图来解释,黑色部分的墙是第一次切割,把整个场地切割成四个房间,然后留三个门。绿色则是第二次递归切割,一样是切割成4个房间然后随机留三个门。循环往复,直到无法分割为止。
实现怪物和哥布林
因为怪物之间有共同点,哥布林之间也有共同点。所以可以很自然的使用抽象类去定义他们。
按照游戏设定,我们有富有的哥布林,医生哥布林和游戏哥布林。
他们都是哥布林,都有类似的特性,那就是需要初始化概率参数(init)和发动的能力(ability)。
所以我们可以用一个抽象类去规范化具体的哥布林子类。

如下图所示,这是一个富有的哥布林的类,它继承自Goblin,即我们上面的抽象类

这里我们重写了init和ability方法,使其具有特定的功能。
再看一下其他的哥布林也是类似的。

其他怪物也是用类似的方法去定义。
游戏控制器
游戏控制器控制着整个游戏,负责调用算法生成迷宫,生成怪物,把英雄放进地牢,显示文字提示等,也是游戏的主循环。
效果展示




最后,欢迎大家通过微信公众号联系我们。
微信公众号:320科技工作室。
- App下载
- 项目客服
- 培训客服
- 平台客服
TOP