博客
关于我
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/

你可能感兴趣的文章
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>