Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
 def on_scene_started(self) -> None:
     self._localization = Localization(path="scenes/{0}".format(self.name))
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 def change_lang(self, lang: LocalList) -> None:
     Localization.set_locale(lang)
     self.__current_scene.on_scene_started()
Ejemplo n.º 10
0
 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()
Ejemplo n.º 11
0
    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()