def new_game(): a.page() a.t('“啪”,你从床上掉了下去。', True) a.debug('!!!!!!!!!!!!!') a.t() a.t('“唔~”,好疼。', True) a.t() a.t('一直睡觉你都不安分,今天也如往常一样,你从床上掉了下来。', True) a.t() a.t('………………', True) a.t() a.t('…………', True) a.t() a.t('……', True) a.t() a.t('但似乎今天情况有些不同。', True, style={'color': 'red'}) a.page() a.t('“咳咳咳……”', True, style={'shake_duration': 3}) a.t() a.t('“你剧烈地咳嗽起来。”', True) a.t() a.t('你跌落在地所激起的大量灰尘随着你的呼吸进入你的鼻腔。', True) a.t() a.t('“怎么回事!咳咳咳……为什么我房间里面会有这么多灰尘!”', True) a.t() a.t('你挣扎着爬起来,却发现', True) a.t() a.t('『陌生的天花板』', True) a.t() a.t('这是哪里?!', True, style={'color': 'red'}) a.goto(center)
def ui_make_chara(character_type='玩家'): def set_temp(key_value): temp.str_data[key_name] = key_value def make_input(k_str: str): # noinspection PyShadowingNames key_name = k_str era.t(str(k_str) + ': ') era.input(set_temp, str(temp.str_data[key_name])) era.t() def go_next(): temp.ctrl_able = True era.data['chara'].add_chara(temp) era.goto(ui_main) # 页面 def ui_make_chara_1(): # 显示属性 era.page() make_input('名字') era.b('确定', go_next) key_name = '' temp = character.Character() temp.set_default(1, character_type) era.goto(ui_make_chara_1)
def add_default_person(): a.data['db']['player'] = { 'name': 'Adam', '性别': '男', "money": 1000, 'item': [], } a.goto(init_pet)
def _ctrl_button(**kwargs): """一个动作控件 :param kwargs: args.act: 控件指向的动作 args.chara: 控件的所有者角色 """ era.page() act = kwargs['act'] chara: Optional['character.Character'] = kwargs['chara'] chara.acts.manual_plan_acts(act) chara.acts.work() chara.settle_when_turn_end() era.t(wait=True) era.goto(ui_turn_focus)
def _running(): def _ctrl_button(**kwargs): """一个动作控件 :param kwargs: args.act: 控件指向的动作 args.chara: 控件的所有者角色 """ era.page() act = kwargs['act'] chara: Optional['character.Character'] = kwargs['chara'] chara.acts.manual_plan_acts(act) chara.acts.work() chara.settle_when_turn_end() era.t(wait=True) era.goto(ui_turn_focus) _search_turn() if len(self.to_do_chara) == 0: self.time_pass() era.goto(ui_turn_focus) for i in self.to_do_chara: if i.num_data.action_bar < 100: continue i.num_data.action_bar -= 100 i.acts.set_default(i, self.characters) i.acts.check_acts() # 判断所有可用动作 if i.ctrl_able: # 对可控制角色,提供选择 if i.acts.able_acts != 0: era.page() for a in i.acts.able_acts: era.b(a.name, _ctrl_button, act=a, chara=i) era.t() else: era.page() i.acts.auto_plan_acts() i.acts.work() i.settle_when_turn_end() era.t(wait=True) _running()
def change_page(page): # 在这里定义一个简单的换页逻辑 a.clear_gui(1) # 从引擎的界面逻辑中去除掉当前的页面 a.goto(page) # 进入一个新页面,该页面与原页面属于兄弟节点
# 封面 # ├─ 开始游戏 # │ ├─ 使用默认人物 # │ └─ 新建自定义人物 # ├─ 读取游戏 # ├─ 游戏设置 # └─ 退出游戏 # 或是: # 游戏循环主界面 # ├─ 探险 # │ ├─ 查看敌人 # │ └─ 战斗 # ├─ 查看人物 # ├─ 商店 # └─ ??? # 但在实际开发过程中,界面与界面之间的逻辑常常会比较混乱,如: # 从一个界面到另一个界面的转换,常常是通过显式调用的方式,这种方式有以下不方便的地方: # 1. 上一界面应当知道自己将显示流引入了哪一个界面,才能够实现进入某一页面的逻辑 # 2. 下一个界面必须知道显示流是从哪一个界面来的,才能够实现返回上一页面的逻辑 # 因此,要实现一个进入该页面/退出到上一页面的操作,就常常需要把两个页面写死,这样就带来了开发的成本提高,降低了灵活度。 # Era.js 引擎内置了游戏界面管理机制,你只需要写出每个界面所包含的内容,并通过合适的方式进行调用, # 游戏引擎就会自动对界面逻辑进行记忆,从而简单实现进入页面/退出到上一页面/上一页/下一页/返回根页面等操作。 # 现在,我们对其进行详细讲解: # 我们提出了一个概念:界面=函数 # 即将一个页面绑定在一个函数上。如以下语句所示: a.goto(cover) # 我们调用了 API 中的 goto 函数,并指向了另一个名为 cover 的函数, # 这样,我们就进入了我们的页面体系的首个页面:cover # 接下来,请将本文件中的代码滚动到顶端,寻找【第2章 第2节 游戏封面(下)】并继续阅览!
def goto_select_location(number): a.tmp()['succubus'] = succubus(number) a.tmp()['succubus_mode'] = number a.tmp()['location_mode'] = 0 a.goto(select_location)
def load_pet(pet): a.data['db']['player']['pets'] = [pet] a.page() a.t('你将{}带回了家。'.format(a.data['db']['player']['pets'][0]['name']), True) a.clear_gui() a.goto(loop)
def turn_prepare(): era.page() era.goto(ui_turn_focus)
def train_start(): era.clear() era.page() era.data['environment_focus'].time_pass() era.goto(ui_turn_focus)
def load_goto(): era.data['chara'] = character.Character() # data.load() era.goto(ui_main)
def target_choose(target: str): c.target = c.charalist[int(target[1])] era.goto(ui_main)
def go_next(): temp.ctrl_able = True era.data['chara'].add_chara(temp) era.goto(ui_main)
def set_new_game_difficulty(num: int): # setup.game_difficulty(num) era.goto(ui_start_new_game_set)
era.data['environment_focus'] = train i: character.Character for i in c: if i.id != 0: train.add_chara(i) i.environment = train era.t('xxx了xxx,然后xxx') era.t() era.b('开始', era.goto, train_start) def ui_turn_focus(): def turn_prepare(): era.page() era.goto(ui_turn_focus) a = era.data era.clear_gui() era.data['environment_focus'].turn() era.b('下一回合', era.goto, turn_prepare) era.b('结束', era.goto, ui_main) if __name__ == "__main__": # 程序入口 try: era.init() # 初始化引擎 era.goto(ui_start_new_game_set) # 进入游戏封面 except Exception: pass