def __init__(self, character_id: int, width: int): """ 初始化绘制对象 """ self.character_id: int = character_id """ 要绘制的角色id """ self.width: int = width """ 当前最大可绘制宽度 """ self.draw_title: bool = True """ 是否绘制面板标题 """ character_data = cache.character_data[character_id] sex_text = game_config.config_sex_tem[character_data.sex].name if character_id: message = _( "No.{character_id} 姓名:{character_name} 性别:{sex_text}").format( character_id=character_id, character_name=character_data.name, sex_text=sex_text, ) else: message = _( "No.{character_id} 姓名:{character_name} 称呼:{character_nick_name} 性别:{sex_text}" ).format( character_id=character_id, character_name=character_data.name, character_nick_name=character_data.nick_name, sex_text=sex_text, ) message_draw = draw.CenterDraw() message_draw.width = width / 2 message_draw.text = message hp_draw = draw.InfoBarDraw() hp_draw.width = width / 2 hp_draw.scale = 0.8 hp_draw.set( "HitPointbar", int(character_data.hit_point_max), int(character_data.hit_point), _("体力"), ) mp_draw = draw.InfoBarDraw() mp_draw.width = width / 2 mp_draw.scale = 0.8 mp_draw.set( "ManaPointbar", int(character_data.mana_point_max), int(character_data.mana_point), _("气力"), ) status_text = game_config.config_status[character_data.state].name status_draw = draw.CenterDraw() status_draw.width = width / 2 status_draw.text = _("状态:{status_text}").format( status_text=status_text) self.draw_list: List[Tuple[draw.NormalDraw, draw.NormalDraw]] = [ (message_draw, hp_draw), (status_draw, mp_draw), ] """ 要绘制的面板列表 """
def __init__(self, character_id: int, width: int): """ 初始化绘制对象 """ self.character_id: int = character_id """ 要绘制的角色id """ self.width: int = width """ 面板最大宽度 """ self.draw_list: List[draw.NormalDraw] = [] """ 绘制的文本列表 """ self.return_list: List[str] = [] """ 当前面板监听的按钮列表 """ character_data = cache.character_data[self.character_id] for social_type in game_config.config_social_type: type_config = game_config.config_social_type[social_type] type_draw = draw.LittleTitleLineDraw(type_config.name, self.width, ":") self.draw_list.append(type_draw) now_draw = draw.CenterDraw() if social_type in character_data.social_contact and len( character_data.social_contact[social_type]): character_list = list( character_data.social_contact[social_type]) now_draw = panel.PageHandlePanel(character_list, SeeCharacterInfoByNameDraw, 10, 5, self.width, 1, 1, 0) else: now_draw.text = _("空无一人") now_draw.width = self.width self.draw_list.append(now_draw)
def draw(self): """ 绘制面板 """ line = draw.LineDraw(":", self.width) line.draw() info_draw = draw.CenterDraw() info_draw.text = self.description info_draw.width = self.width info_draw.draw() line_feed.draw()
def draw(self): """ 绘制面板 """ character_data = cache.character_data[self.character_id] title_draw = draw.TitleLineDraw(_("人物服装"), self.width) title_draw.draw() draw_list = [] self.return_list = [] id_width = 0 for clothing_type in game_config.config_clothing_type: type_data = game_config.config_clothing_type[clothing_type] type_draw = draw.LittleTitleLineDraw(type_data.name, self.width, ":") draw_list.append(type_draw) if clothing_type in character_data.put_on and isinstance( character_data.put_on[clothing_type], UUID): now_draw = ClothingInfoDrawPanel( self.character_id, clothing_type, character_data.put_on[clothing_type], self.width, 1, len(self.return_list), ) self.return_list.append(str(len(self.return_list))) now_id_width = text_handle.get_text_index( now_draw.text_list[0]) if now_id_width > id_width: id_width = now_id_width else: now_text = _("未穿戴") if not self.character_id: now_id = len(self.return_list) now_id_text = text_handle.id_index(now_id) now_width = self.width - len(now_id_text) now_text = text_handle.align(now_text, "center", text_width=now_width) now_text = f"{now_id_text}{now_text}" now_draw = draw.Button(now_text, str(now_id), cmd_func=self.see_clothing_list, args=(clothing_type, )) self.return_list.append(str(now_id)) else: now_draw = draw.CenterDraw() now_draw.text = now_text now_draw.width = self.width draw_list.append(now_draw) draw_list.append(line_feed) for value in draw_list: if "id_width" in value.__dict__: value.id_width = id_width value.draw()
def draw(self): """ 绘制对象 """ scene_position = cache.character_data[0].position scene_position_str = map_handle.get_map_system_path_str_for_list( scene_position) scene_name = cache.scene_data[scene_position_str].scene_name title_draw = draw.TitleLineDraw(scene_name, self.width) food_type_list = [_("主食"), _("零食"), _("饮品"), _("水果"), _("食材"), _("调料")] self.handle_panel = panel.PageHandlePanel([], SeeFoodListByFoodNameDraw, 10, 5, self.width, 1, 1, 0) while 1: py_cmd.clr_cmd() food_name_list = list( cooking.get_restaurant_food_type_list_buy_food_type( self.now_panel).items()) self.handle_panel.text_list = food_name_list self.handle_panel.update() title_draw.draw() return_list = [] for food_type in food_type_list: if food_type == self.now_panel: now_draw = draw.CenterDraw() now_draw.text = f"{food_type}]" now_draw.style = "onbutton" now_draw.width = self.width / len(food_type_list) now_draw.draw() else: now_draw = draw.CenterButton( f"[{food_type}]", food_type, self.width / len(food_type_list), cmd_func=self.change_panel, args=(food_type, ), ) now_draw.draw() return_list.append(now_draw.return_text) line_feed.draw() line = draw.LineDraw("+", self.width) line.draw() self.handle_panel.draw() return_list.extend(self.handle_panel.return_list) back_draw = draw.CenterButton(_("[返回]"), _("返回"), window_width) back_draw.draw() line_feed.draw() return_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(return_list) if yrn == back_draw.return_text: cache.now_panel_id = constant.Panel.IN_SCENE break
def set( self, text_list: List[str], return_list: List[str], width: int, column: int, null_text: str = "", cmd_func: FunctionType = None, func_args: List[Tuple] = [], ): """ 设置绘制信息 Keyword arguments: text_list -- 按钮文本列表 return_list -- 按钮返回列表 width -- 绘制宽度 column -- 每行最大元素数 null_text -- 不作为按钮绘制的文本 cmd_func -- 列表元素按钮绑定函数 """ self.width = width self.column = column new_text_list = value_handle.list_of_groups(text_list, column) index = 0 self.return_list = return_list self.draw_list: List[List[draw.Button]] = [] for now_text_list in new_text_list: now_width = int(width / len(now_text_list)) now_list = [] for now_text in now_text_list: if now_text != null_text: now_button = draw.CenterButton( now_text, return_list[index], now_width, cmd_func=cmd_func, args=(return_list[index]), ) now_list.append(now_button) else: now_info_draw = draw.CenterDraw() now_info_draw.width = now_width now_info_draw.text = now_text now_info_draw.style = "onbutton" now_list.append(now_info_draw) index += 1 self.draw_list.append(now_list)
def draw(self): """ 绘制对象 """ title_draw = draw.TitleLineDraw(_("食物背包"), self.width) food_type_list = [_("主食"), _("零食"), _("饮品"), _("水果"), _("食材"), _("调料")] food_id_list = list( cooking.get_character_food_bag_type_list_buy_food_type( 0, self.now_panel).items()) self.handle_panel = panel.PageHandlePanel(food_id_list, SeeFoodListByFoodNameDraw, 10, 1, window_width, 1, 1, 0) while 1: if cache.now_panel_id != constant.Panel.FOOD_BAG: break self.handle_panel.update() title_draw.draw() line_feed.draw() return_list = [] for food_type in food_type_list: if food_type == self.now_panel: now_draw = draw.CenterDraw() now_draw.text = f"[{food_type}]" now_draw.style = "onbutton" now_draw.width = self.width / len(food_type_list) now_draw.draw() else: now_draw = draw.CenterButton( f"[{food_type}]", food_type, self.width / len(food_type_list), cmd_func=self.change_panel, args=(food_type, ), ) now_draw.draw() return_list.append(now_draw.return_text) line = draw.LineDraw("+", self.width) line.draw() self.handle_panel.draw() return_list.extend(self.handle_panel.return_list) back_draw = draw.CenterButton(_("[返回]"), _("返回"), window_width) back_draw.draw() return_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(return_list) if yrn == back_draw.return_text: cache.now_panel_id = constant.Panel.IN_SCENE break
def __init__(self, character_id: int, width: int): """ 初始化绘制对象 """ self.character_id: int = character_id """ 要绘制的角色id """ self.width: int = width """ 面板最大宽度 """ self.draw_list: List[draw.NormalDraw] = [] """ 绘制的文本列表 """ self.return_list: List[str] = [] """ 当前面板监听的按钮列表 """ character_data = cache.character_data[character_id] for nature_type in game_config.config_nature_tag: type_config = game_config.config_nature_tag[nature_type] nature_set = game_config.config_nature_tag_data[nature_type] type_value = 0 nature_draw_list = [] nature_group = value_handle.list_of_groups(list(nature_set), 1) for nature_list in nature_group: for nature_id in nature_list: nature_config = game_config.config_nature[nature_id] nature_value = 0 if nature_id in character_data.nature: nature_value = character_data.nature[nature_id] type_value += nature_value good_judge = False if nature_value >= 50: good_judge = True nature_draw = draw.CenterDraw() if good_judge: nature_draw.text = nature_config.good else: nature_draw.text = nature_config.bad nature_draw.width = int(self.width / len(nature_group)) nature_draw_list.append(nature_draw) judge_value = len(nature_set) * 100 / 2 nature_type_text = "" if type_value >= judge_value: nature_type_text = type_config.good else: nature_type_text = type_config.bad nature_draw = draw.LittleTitleLineDraw(nature_type_text, self.width, ":") self.draw_list.append(nature_draw) self.draw_list.append(nature_draw_list)
def __init__(self, text: Tuple[str, str], width: int, is_button: bool, num_button: bool, button_id: int): """ 初始化绘制对象 """ self.text = text[1] """ 食物名字 """ self.cid = text[0] """ 食物在食堂内的表id """ self.draw_text: str = "" """ 食物名字绘制文本 """ self.width: int = width """ 最大宽度 """ self.num_button: bool = num_button """ 绘制数字按钮 """ self.button_id: int = button_id """ 数字按钮的id """ self.button_return: str = str(button_id) """ 按钮返回值 """ name_draw = draw.NormalDraw() if is_button: if num_button: index_text = text_handle.id_index(button_id) button_text = f"{index_text}{self.text}" name_draw = draw.LeftButton( button_text, self.button_return, self.width, cmd_func=self.see_food_shop_food_list) else: button_text = f"[{self.text}]" name_draw = draw.CenterButton( button_text, self.text, self.width, cmd_func=self.see_food_shop_food_list) self.button_return = text self.draw_text = button_text else: name_draw = draw.CenterDraw() name_draw.text = f"[{self.text}]" name_draw.width = self.width self.draw_text = name_draw.text self.now_draw = name_draw """ 绘制的对象 """
def set(self, info_list: List[str], width: int, column: int): """ 设置绘制信息 Keyword arguments: info_list -- 信息列表 width -- 绘制宽度 column -- 每行最大元素数 """ self.width = width self.column = column new_info_list = value_handle.list_of_groups(info_list, column) for now_info_list in new_info_list: now_width = int(width / column) now_list = [] for now_info in now_info_list: now_info_draw = draw.CenterDraw() now_info_draw.width = now_width now_info_draw.text = now_info now_list.append(now_info_draw) self.draw_list.append(now_list)
def set(self, title_text: str, info_list: List[str], width: int): """ 设置绘制信息 Keyword arguments: title_text -- 标题 info_list -- 信息列表 width -- 标题宽度 """ self.width = width line = draw.LineDraw("=", width) self.draw_list.append(line) title = draw.CenterDraw() title.width = self.width title.text = title_text self.draw_list.append(title) for info_text in info_list: info = draw.RightDraw() info.width = width info.text = info_text self.draw_list.append(info) self.draw_list.append(line)
def __init__(self, text: int, width: int, is_button: bool, num_button: bool, button_id: int): """ 初始化绘制对象 """ self.text = text """ 道具id """ self.draw_text: str = "" """ 道具名字绘制文本 """ self.width: int = width """ 最大宽度 """ self.num_button: bool = num_button """ 绘制数字按钮 """ self.button_id: int = button_id """ 数字按钮的id """ self.button_return: str = str(button_id) """ 按钮返回值 """ name_draw = draw.NormalDraw() item_config = game_config.config_item[self.text] if is_button: if num_button: index_text = text_handle.id_index(button_id) button_text = f"{index_text}{item_config.name}" name_draw = draw.LeftButton(button_text, self.button_return, self.width, cmd_func=self.buy_item) else: button_text = f"[{item_config.name}]" name_draw = draw.CenterButton(button_text, item_config.name, self.width, cmd_func=self.buy_item) self.button_return = item_config.name self.draw_text = button_text else: name_draw = draw.CenterDraw() name_draw.text = f"[{item_config.name}]" name_draw.width = self.width self.draw_text = name_draw.text self.now_draw = name_draw """ 绘制的对象 """
def title_panel(): """ 绘制游戏标题菜单 """ clear_screen = panel.ClearScreenPanel() clear_screen.draw() width = config_normal.text_width title_info = panel.TitleAndRightInfoListPanel() game_name = config_normal.game_name info_list = [ config_normal.author, config_normal.verson, config_normal.verson_time ] title_info.set(config_normal.game_name, info_list, width) title_info.draw() lineFeed = draw.NormalDraw() lineFeed.width = 1 lineFeed.text = "\n" info = _("人类是可以被驯化的") lineFeed.draw() info_draw = draw.CenterDraw() info_draw.text = info info_draw.width = width info_draw.draw() lineFeed.draw() lineFeed.draw() line = draw.LineDraw("=", width) line.draw() now_list = [_("开始游戏"), _("读取存档"), _("退出游戏")] button_panel = panel.OneMessageAndSingleColumnButton() button_panel.set(now_list, "", 0) button_panel.draw() return_list = button_panel.get_return_list() ans = flow_handle.askfor_all(return_list.keys()) py_cmd.clr_cmd() now_key = return_list[ans] if now_key == now_list[0]: cache.now_panel_id = constant.Panel.CREATOR_CHARACTER elif now_key == now_list[1]: now_panel = see_save_info_panel.SeeSaveListPanel(width, 0) now_panel.draw() elif now_key == now_list[2]: os._exit(0)
def update(self): """ 更新绘制对象 """ self.return_list = [] start_id = self.now_page * self.limit total_page = int((len(self.text_list) - 1) / self.limit) if start_id >= len(self.text_list): self.now_page = total_page start_id = self.now_page * self.limit now_page_list = [] for i in range(start_id, len(self.text_list)): if len(now_page_list) >= self.limit: break now_page_list.append(self.text_list[i]) draw_text_group = value_handle.list_of_groups(now_page_list, self.column) draw_list: List[draw.NormalDraw] = [] self.end_index = self.button_start_id index = self.button_start_id line_feed = draw.NormalDraw() line_feed.text = "\n" line_feed.width = 1 for draw_text_list in draw_text_group: if self.row_septal_lines != "" and index: line_draw = draw.LineDraw(self.row_septal_lines, self.width) draw_list.append(line_draw) now_width = self.width if self.col_septal_lines != "": col_index = len(draw_text_list) + 1 col_width = text_handle.get_text_index(self.col_septal_lines) now_width -= col_width * col_index value_width = int(now_width / self.column) col_fix_draw = draw.NormalDraw() col_fix_draw.text = self.col_septal_lines col_fix_draw.width = 1 draw_list.append(col_fix_draw) for value in draw_text_list: is_button = 1 if value == self.null_button_text: is_button = 0 value_draw = self.draw_type(value, value_width, is_button, self.num_button, index) value_draw.draw_text = text_handle.align(value_draw.draw_text, "center", 0, 1, value_width) if self.num_button: self.return_list.append(str(index)) else: self.return_list.append(value_draw.button_return) index += 1 draw_list.append(value_draw) draw_list.append(col_fix_draw) draw_list.append(line_feed) if self.num_button: self.end_index = index if total_page: now_line = draw.LineDraw("-", self.width) draw_list.append(now_line) page_change_start_id = self.button_start_id if self.num_button: page_change_start_id = index old_page_index_text = text_handle.id_index(page_change_start_id) old_page_button = draw.CenterButton( _("{old_page_index_text} 上一页").format(old_page_index_text=old_page_index_text), str(page_change_start_id), int(self.width / 3), cmd_func=self.old_page, ) self.return_list.append(str(page_change_start_id)) draw_list.append(old_page_button) page_text = f"({self.now_page}/{total_page})" page_draw = draw.CenterDraw() page_draw.width = int(self.width / 3) page_draw.text = page_text draw_list.append(page_draw) next_page_index_text = text_handle.id_index(page_change_start_id + 1) next_page_button = draw.CenterButton( _("{next_page_index_text} 下一页").format(next_page_index_text=next_page_index_text), str(page_change_start_id + 1), int(self.width / 3), cmd_func=self.next_page, ) self.end_index = page_change_start_id + 1 self.return_list.append(str(page_change_start_id + 1)) draw_list.append(next_page_button) draw_list.append(line_feed) self.draw_list = draw_list
def draw(self): """ 绘制对象 """ school_id, phase = course.get_character_school_phase(0) time_table = cache.course_time_table_data[school_id][phase] weekday_text_list = [ game_config.config_week_day[i].name for i in game_config.config_week_day ] character_data: game_type.Character = cache.character_data[0] now_time_value = cache.game_time.hour * 100 + cache.game_time.minute while 1: now_week_text = game_config.config_week_day[self.now_week].name title_draw = draw.TitleLineDraw(_("课程表"), self.width) title_draw.draw() index = 0 return_list = [] for week_text in weekday_text_list: if week_text == now_week_text: if index == cache.game_time.weekday(): week_text = week_text + _("(今日)") now_draw = draw.CenterDraw() now_draw.text = f"[{week_text}]" now_draw.style = "onbutton" now_draw.width = self.width / len(weekday_text_list) now_draw.draw() else: if index == cache.game_time.weekday(): week_text = week_text + _("(今日)") now_draw = draw.CenterButton( f"[{week_text}]", week_text, self.width / len(weekday_text_list), cmd_func=self.change_now_week, args=(index, ), ) now_draw.draw() return_list.append(now_draw.return_text) index += 1 line_feed.draw() line = draw.LineDraw("+", self.width) line.draw() title_list = [_("课时"), _("科目"), _("教师"), _("上课时间"), _("下课时间")] title_list_draw = panel.CenterDrawTextListPanel() title_list_draw.set(title_list, self.width, 5) title_list_draw.draw() now_text_list = [] times_judge = 1 if self.now_week not in time_table: now_text_list.append(_("休息日")) else: for times in range(0, len(time_table[self.now_week]) + 1): course_time_id = game_config.config_school_session_data[ school_id][times] course_time_config = game_config.config_school_session[ course_time_id] course_time = str(course_time_config.start_time) minute = course_time[-2:] hour = course_time[:-2] course_time_text = f"{hour}:{minute}" course_end_time = str(course_time_config.end_time) end_minute = course_end_time[-2:] end_hour = course_end_time[:-2] course_end_time_text = f"{end_hour}:{end_minute}" now_time_judge = 0 if times_judge: if self.now_week == cache.game_time.weekday(): if now_time_value < course_time_config.end_time: now_time_judge = 1 times_judge = 0 if not times: now_class_text = _("早读课") if now_time_judge: now_class_text += _("(当前)") now_text = [ now_class_text, "", "", course_time_text, course_end_time_text ] now_text_list.append(now_text) continue cache.class_timetable_teacher_data.setdefault( school_id, {}) cache.class_timetable_teacher_data[school_id].setdefault( phase, {}) cache.class_timetable_teacher_data[school_id][ phase].setdefault(character_data.classroom, {}) cache.class_timetable_teacher_data[school_id][phase][ character_data.classroom].setdefault( self.now_week, {}) course_id = time_table[self.now_week][times] course_config = game_config.config_course[course_id] course_name = course_config.name times_text = _("第{times}节").format(times=times) if now_time_judge: times_text += _("(当前)") if (times in cache.class_timetable_teacher_data[school_id] [phase][character_data.classroom][self.now_week]): teacher_id = cache.class_timetable_teacher_data[ school_id][phase][character_data.classroom][ self.now_week][times] teacher_data: game_type.Character = cache.character_data[ teacher_id] teacher_name = teacher_data.name now_text = [ times_text, course_name, teacher_name, course_time_text, course_end_time_text, ] else: now_text = [ times_text, course_name, _("自习"), course_time_text, course_end_time_text, ] now_text_list.append(now_text) for now_text in now_text_list: now_draw = panel.LeftDrawTextListPanel() now_draw.set(now_text, self.width, 5) now_draw.draw() line_draw = draw.LineDraw("-", self.width) line_draw.draw() back_draw = draw.CenterButton(_("[返回]"), _("返回"), self.width) back_draw.draw() line_feed.draw() return_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(return_list) if yrn == back_draw.return_text: cache.now_panel_id = constant.Panel.IN_SCENE break