def __init__(self, parent, bonus, code: str, position: (int, int) = (0, 0), level: int = 1, sex: BeeSex = None) -> None: RenderObject.__init__(self, parent=parent, position=position) GeneCode.__init__(self, code, bonus) self._localization = Localization("Bee") self.max_xp = 100 self.generation = 1 self.__sex = sex if sex else random.choice( [Bee.BeeSex.MALE, Bee.BeeSex.FEMALE]) self.__current_hp = 0 self.__max_level = 5 self.__current_xp = 1 self.xp_enabled = True prefix = self.get_prefix() self.name = self.get_random_name(prefix) self.change_level_to(level) self._image = None self.socket_id = -1 self.current_hp = self.max_hp self.set_locale_to_bonus()
def __init__(self, width: int, height: int) -> None: pygame.init() os.environ['SDL_VIDEO_CENTERED'] = '1' pygame.display.set_caption("Bee Island") self.__FPS = 60 self.__size = self.width, self.height = width, height self.__screen = pygame.display.set_mode(self.size) icon = pygame.image.load("{0}/icon.ico".format( resource_path("res/images/"))) pygame.display.set_icon(icon) Localization.set_locale(LocalList.RU) self.database = Database() self.main_player = Player() self.__scene_map = { "Map": MapScene(self, name="Map", player=self.main_player), "Farm": FarmScene(self, name="Farm", player=self.main_player), "Main": MainMenuScene(self, name="Main", player=self.main_player) } self.__current_scene = self.__scene_map["Map"] self.change_scene("Main") self.__prev_scene = None self.__done = False self.__clock = Clock()
def get_all_quests(self) -> list: query = open("{0}/scripts/get_all_quests.sql".format(self.__db_location_dir), 'r').read() cursor = self.__conn.execute(query, (Localization.get_current_locale(), Localization.get_current_locale())) all_quests = cursor.fetchall() template_list = [] for i in all_quests: q = QuestTemplate(title=i[1], desc=i[2], icon_pos=(i[3], i[4]), q_type=i[5], zone_id=i[6], quest_id=i[0]) rb = ResourceBag() for j in self.get_rewards_by_quest_id(i[0]): r = self.get_resource_by_id(j[0]) r.base_value = j[2] rb.append(r) q.resources_bag = rb template_list.append(q) return template_list
def get_resource_by_id(self, res_id: int) -> Resource: script_path = "{0}/scripts/get_resource_by_id.sql".format(self.__db_location_dir) query = open(script_path, 'r').read() locale = Localization.get_current_locale() cursor = self.__conn.execute(query, (locale, locale, res_id)) template = cursor.fetchone() r = Resource(r_id=template[0], locale_name=template[1], locale_desc=template[2], max_value=template[3]) return r
def change_lang(self, right: bool) -> None: if right: self.parent.main_window.change_lang( Localization.get_full_locale().get_next()) else: self.parent.main_window.change_lang( Localization.get_full_locale().get_prev()) self.current_lang_label.set_text( Localization.get_current_locale().upper()) db = Database.get_instance() old_resources = [] for r in self.parent.player.resources.bag: old_resources.append(r) self.parent.player.resources.bag.clear() for i in range(len(old_resources)): r = db.get_resource_by_id(old_resources[i].r_id) r.value = old_resources[i].value self.parent.player.resources.append(r) for b in itertools.chain(self.parent.player.farm.bees_from_all_hives, self.parent.player.farm.out_of_hive_bee_list): b.set_locale_to_bonus()
def on_scene_started(self) -> None: self._localization = Localization(path="scenes/{0}".format(self.name))
class Bee(RenderObject, GeneCode): __slots__ = ("_base_speed", "speed_mod", "hp_mod", "__current_hp", "name", "_image", "_max_hp", "__max_level", "xp_enabled", "__current_xp", "max_xp", "bonus", "_localization", "__sex", "socket_id", "generation") class BeeSex(Enum): MALE = 1, FEMALE = 2 def __init__(self, parent, bonus, code: str, position: (int, int) = (0, 0), level: int = 1, sex: BeeSex = None) -> None: RenderObject.__init__(self, parent=parent, position=position) GeneCode.__init__(self, code, bonus) self._localization = Localization("Bee") self.max_xp = 100 self.generation = 1 self.__sex = sex if sex else random.choice( [Bee.BeeSex.MALE, Bee.BeeSex.FEMALE]) self.__current_hp = 0 self.__max_level = 5 self.__current_xp = 1 self.xp_enabled = True prefix = self.get_prefix() self.name = self.get_random_name(prefix) self.change_level_to(level) self._image = None self.socket_id = -1 self.current_hp = self.max_hp self.set_locale_to_bonus() def get_prefix(self) -> str: return "m" if self.__sex is Bee.BeeSex.MALE else "f" def upgrade_name(self, mod: str) -> None: prefix = self.get_prefix() upgrades = self._localization.get_params_by_string( "{0}_prefixes".format(prefix))[mod] self.name = "{0} {1}".format(random.choice(upgrades), self.name) def draw(self, screen: pygame.Surface) -> None: if self._image: screen.blit(self._image, self._rect) def set_locale_to_bonus(self): try: if isinstance(self.bonus.__slots__, tuple): name = self.bonus.__slots__[0] else: name = self.bonus.__slots__ d = self._localization.get_params_by_string("bonuses")[name.lstrip( "_")] self.bonus.set_description(d) except AttributeError: pass def set_image(self, path: str) -> None: self._image = pygame.image.load("{0}{1}".format(self._res_dir, path)) self._rect.width = self._image.get_rect().width self._rect.height = self._image.get_rect().height def setup_bonus(self, q: Quest): self.bonus.setup_bonus(q) def remove_bonus(self, q: Quest): self.bonus.remove_bonus(q) def get_random_name(self, prefix) -> str: names = self._localization.get_params_by_string( "{0}_names".format(prefix)) result = random.choice(names) return result def modify_bonus(self): if self.bonus: self.bonus.modify() self.set_locale_to_bonus() def give_xp(self, value: int) -> None: if not self.xp_enabled: return if (self.current_xp + value) > self.max_xp: over_xp = self.current_xp + value - self.max_xp self.change_level_to(self.current_level + 1) value = over_xp self.__current_xp = value else: self.__current_xp += value @property def current_xp(self) -> int: return self.__current_xp @property def max_level(self) -> int: return self.__max_level def change_level_to(self, level: int) -> bool: if level < 0 or level > self.max_level: return False self.current_level = level self.__current_xp = 1 if level == 1: self._base_speed = 3 self._max_hp = 70 elif level == 2: self._base_speed = 4 self._max_hp = 92 elif level == 3: self._max_hp = 100 elif level == 4: self._max_hp = 150 elif level == 5: self._max_hp = 180 self._base_speed = 5 self.max_xp = math.ceil(math.exp(level) * 100) if level == self.max_level: self.xp_enabled = False self.max_xp = 0 return True
def get_rewards_by_quest_id(self, quest_id: int) -> list: query = open("{0}/scripts/get_rewards_by_quest_id.sql".format(self.__db_location_dir), 'r').read() cursor = self.__conn.execute(query, (Localization.get_current_locale(), quest_id)) rewards = cursor.fetchall() return rewards
def change_lang(self, lang: LocalList) -> None: Localization.set_locale(lang) self.__current_scene.on_scene_started()
def on_scene_started(self) -> None: self._localization = Localization(path="scenes/Quest") self._start_time = pygame.time.get_ticks() self._finish_button.hide() self._finish_button.stop_handle()
def __init__(self, parent): Menu.__init__(self, parent=parent, bg_name="settings_bg") self._title_label.set_text( text=self.parent.localization.get_string("settings")) self._title_label.set_position( (self.position[0] + self._bg_image.get_rect().centerx - self._title_label.size[0] / 2 + 10, self.position[1] + 3)) self.resolution_label = TextLabel( parent=self, font_size=18, bold=True, text=self.parent.localization.get_string("resolution")) right1 = TextLabel(parent=self, font_size=18, bold=True, text=">") self.right_resolution_button = TextButton( parent=self, text_label=right1, normal_image_path="left_right.png", text_padding=(10, -5)) self.right_resolution_button.set_position( (self._rect.right - self.right_resolution_button.size[0] - 20, self.position[1] + 75)) self.resolution_val_bg = pygame.image.load("{0}/settings.png".format( self._res_dir)) self.resolution_val_bg_rect = self.resolution_val_bg.get_rect() self.resolution_val_bg_rect.right = self.right_resolution_button._rect.left - 6 self.resolution_val_bg_rect.y = self.position[1] + 75 self.lang_val_bg = pygame.image.load("{0}/settings.png".format( self._res_dir)) self.lang_bg_rect = self.lang_val_bg.get_rect() self.lang_bg_rect.right = self.resolution_val_bg_rect.right self.lang_bg_rect.y = self.resolution_val_bg_rect.bottom + 15 left1 = TextLabel(parent=self, font_size=18, bold=True, text="<") self.left_resolution_button = TextButton( parent=self, text_label=left1, normal_image_path="left_right.png", text_padding=(10, -5)) self.left_resolution_button.set_position( (self.resolution_val_bg_rect.left - self.left_resolution_button.size[0] - 6, self.position[1] + 75)) self.resolution_label.set_position( (self.left_resolution_button.get_rect().left - self.resolution_label.size[0] - 20, self.position[1] + 72)) self.lang_label = TextLabel( parent=self, font_size=18, bold=True, text=self.parent.localization.get_string("lang")) right2 = TextLabel(parent=self, font_size=18, bold=True, text=">") self.right_lang_button = TextButton(parent=self, text_label=right2, normal_image_path="left_right.png", text_padding=(10, -5)) self.right_lang_button.set_position( (self.right_resolution_button.position[0], self.right_resolution_button.get_rect().bottom + 15)) left2 = TextLabel(parent=self, font_size=18, bold=True, text="<") self.left_lang_button = TextButton(parent=self, text_label=left2, normal_image_path="left_right.png", text_padding=(10, -5)) self.left_lang_button.set_position( (self.left_resolution_button.position[0], self.left_resolution_button.get_rect().bottom + 15)) self.lang_label.set_position( (self.left_lang_button.get_rect().left - self.lang_label.size[0] - 20, self.resolution_label.get_rect().bottom + 8)) self.left_resolution_button.set_image_by_state(ButtonState.HOVERED, "left_right_hover.png") self.right_resolution_button.set_image_by_state( ButtonState.HOVERED, "left_right_hover.png") self.left_lang_button.set_image_by_state(ButtonState.HOVERED, "left_right_hover.png") self.right_lang_button.set_image_by_state(ButtonState.HOVERED, "left_right_hover.png") self.right_resolution_button.add_action({ ButtonEventType.ON_CLICK_LB: lambda: self.change_resolution(right=True) }) self.left_resolution_button.add_action({ ButtonEventType.ON_CLICK_LB: lambda: self.change_resolution(right=False) }) self.current_resolution_label = TextLabel(parent=self, font_size=18, bold=True, text="{0}x{1}".format( Constants.WINDOW_W, Constants.WINDOW_H)) self.current_resolution_label.get_rect( ).center = self.resolution_val_bg_rect.center self.current_lang_label = TextLabel( parent=self, font_size=18, bold=True, text=Localization.get_current_locale().upper()) self.current_lang_label.get_rect().center = self.lang_bg_rect.center self.right_lang_button.add_action({ ButtonEventType.ON_CLICK_LB: lambda: self.change_lang(right=True) }) self.left_lang_button.add_action({ ButtonEventType.ON_CLICK_LB: lambda: self.change_lang(right=False) }) self.parent.stop_handle()