相关文件
想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复魔塔
Python源码、问题解答学习交流群:773162165
开发环境
Python版本:3.6.7
相关模块:
pygame
json
os
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
运行说明
电脑需要安装:
Python3.6或3.7
Pygame(从pip安装即可)
运行test.py即可进行游戏~
操作说明
Demo的游戏内容取自《中秋2019:桂魄》的咸鱼难度,应该挺容易的。目前游戏内容基本完整,实现了事件流,能够解析的事件会不断增加。游戏可以不依靠背包内的初始道具通关!不过如果实在是连咸鱼难度都打不过的话,那就随便用道具吧~
当前可用的快捷键:
- X = 怪物手册
- G = 楼层传送器
- T = 玩家背包(带分类二级菜单)
- S = 存档界面
- D = 读档界面
- A =撤回上一关键步(打怪&开门)
- Z = 勇士转身(顺时针)
- H = 帮助界面
- B = 文本框Demo(测试用)
- P =开关显伤层(默认开启)
- ESC = 一般情况用来在各种菜单中进行返回操作
- Enter = 一般情况用来在各种菜单中进行确认操作
在例如怪物手册,存档界面等菜单中,可以通过左右方向键快速跨页面移动高亮光标。
/tools文件夹下有一个使用Tkinter写的地图数据编辑器。这个编辑器非常简陋,但是能用,而且编辑完数值后会自动保存。
/tools文件夹下还有一个”一键H5魔塔地图转Python魔塔地图“工具,目前没有写GUI。这个转换器需要使用到json5这个包,因为H5魔塔中的地图文件并不是符合规范的JSON文件(关于这个问题可以搜索”trailing comma json“来了解更多)。常规的json包无法解析这样的JSON文件,所以只能使用json5。
效果展示
代码展示
def init():
global_var.set_value("font_name", FONT_NAME)
global_var.set_value("RootScreen", RootScreen)
global_var.set_value("action_control", action_control)
# 设置PlayerCon为全局变量(必须要在CurrentMap.set_map之前完成)
global_var.set_value("PlayerCon", PlayerCon)
# 初始化地图
CurrentMap.set_map(PLAYER_FLOOR)
CurrentMap.add_sprite(PlayerCon)
global_var.set_value("CurrentMap", CurrentMap)
WriteLog.debug(__name__, "初始化地图完成")
# 初始化BlockData(建立通过id反查地图编号的字典)
BlockDataReverse = {
}
for map_obj in BlockData:
block_id = BlockData[map_obj]["id"]
BlockDataReverse[block_id] = map_obj
global_var.set_value("BlockDataReverse", BlockDataReverse)
# 状态栏占位(如果删除,会影响游戏内地图的位置)
StatusBarArea = RootScreen.add_child("left", BLOCK_UNIT * 4)
StatusBarArea.priority = 15
RootScreen.add_child(CurrentMap)
# 初始化UI图层
# --- UI0 - 状态栏
STATUSBAR = ui.StatusBar(mode='copy', surface=RootScreen) # 必须按ground的方式初始化
STATUSBAR.priority = 145
RootScreen.add_child(STATUSBAR)
global_var.set_value("STATUSBAR", STATUSBAR)
WriteLog.debug(__name__, "初始化状态栏图层完成")
# --- UI1 - 怪物手册
BOOK = ui.Book(mode='copy', surface=RootScreen) # 必须按ground的方式初始化
BOOK.priority = 140 # 显示的优先级 高于地图 所以在地图上
RootScreen.add_child(BOOK)
global_var.set_value