博客
关于我
Python制作复古地牢文字冒险游戏
阅读量:228 次
发布时间:2019-03-01

本文共 1212 字,大约阅读时间需要 4 分钟。

 

巨洞冒险(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科技工作室。

转载地址:http://lgbv.baihongyu.com/

你可能感兴趣的文章
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>