コード例 #1
0
    def setup(self):
        """
        initiates this screens attributes\n
        :return: None
        """
        Screen.setup(self)
        self._get_background().fill(resource.get_color("startmenu_background").rgb())

        self.__btns["START"]    = TextButton(resource.get_string("btn_start_text"))
        self.__btns["INFO"]     = TextButton(resource.get_string("btn_info_text"))
        self.__btns["EXIT"]     = TextButton(resource.get_string("btn_exit_text"))

        screen_mid_w = (self.get_width() / 2)

        # game title
        dimen_title     = resource.get_dimen("startscreen_title")
        game_title      = resource.get_string("game_title")
        font_res        = resource.get_font("startscreen_title")
        col = resource.get_color("startmenu_gametitle").rgb()
        font = pygame.font.SysFont(font_res.name, font_res.size)

        self.__text = font.render(game_title, 0, col)
        self.__text_dimen = resource.get_dimen("startscreen_title")
        self.__text_dimen.x = screen_mid_w - dimen_title.width

        # set buttons position
        button_marg = resource.get_dimen("button_marg")
        for i, btn in enumerate(self.get_btns().itervalues()):
            x = screen_mid_w - (btn.get_width() / 2)
            y = button_marg.top + ((i + 1) * button_marg.dist)
            btn.set_pos(x, y)
コード例 #2
0
ファイル: info_screen.py プロジェクト: mikael308/multimpyproj
    def __init__(self):
        """

        """
        ViewScreen.__init__(self)

        self._font_res = resource.get_font("info")
        self._font = pygame.font.SysFont(self._font_res.name,
                                         self._font_res.size)
        self._font_header = pygame.font.SysFont(self._font_res.name,
                                                self._font_res.size, True)
        self._dimen_article_padd = resource.get_dimen("info_article_padd")

        self.get_btns()["BACK"] = TextButton(
            resource.get_string("btn_back_text"),
            resource.get_dimen("info_btn_back"))
コード例 #3
0
ファイル: info_screen.py プロジェクト: mikael308/multimpyproj
    def __create_gameinfo_view(self):
        """
        creates a Surface containing gameinfo\n
        :return:
        """

        text_content = resource.get_string("info_gameinfo_text")
        rows = tools.divide_to_rows(
            resource.get_value("info_gameinfo_maxwidth"), text_content)

        header = self.__gameinfo_header_value.upper()
        article_dimen_wh = self._get_article_size(header, rows)

        surf = pygame.Surface(article_dimen_wh)
        surf.fill(self.__article_background_color)

        self._blit_rows(surf, header, self.__text_color, rows)

        return surf
コード例 #4
0
class GameController(Controller):
    """
    controller for use-case: game\n


    :author: Mikael Holmbom
    :version: 1.0
    """
    __game_title = resource.get_string("game_title")

    __gamefield_dimen = resource.get_dimen("gamefield")

    ## GAMELOGIC
    ####################
    __timespan_add_packet = resource.get_value("timespan_add_packet_start")
    __timespan_add_packet_factor_decr_factor = resource.get_value("timespan_add_packet_factor_decr_factor")

    ## GAMEOBJECTS
    ###################
    # users gameobject
    __player 			= None
    __points_to_next_level = resource.get_value("points_exp_level_up_start")
    __points_exp_needed_factor = resource.get_value("points_exp_needed_factor")

    # contain current games CPUs
    __cpus				= None
    # current packets not contained in buffer
    __pending_packet	= None
    __buffer			= None
    __trash				= None
    """
    memento object of this instance
    """
    __memento			= None

    __endstate			= None

    def __init__(self):
        """
        initialize gameengine\n
        defines screen and init pygame
        """
        Controller.__init__(self)

        self.__player 	= Player()
        self.__buffer 		= Buffer(resource.get_value("buffer_capacity"))
        self.__cpus 	= []
        self.__pending_packet 	= []
        self.__endstate = EndState()

    def setup(self):
        """
        setup the attributes of this gameengine\n
        :return:
        """

        Controller.setup(self)

        self.__create_memento()

        n_cpus = resource.get_value("n_cpus")
        packet_val_min = resource.get_value("packet_val_min")
        packet_val_max = resource.get_value("packet_val_max")

        self.__trash = Trash()
        trash_dimen = resource.get_dimen("trash")
        self.__trash.set_pos(trash_dimen.x, trash_dimen.y)

        # generates cpus with unique values
        vals = tools.unique_vals(n_cpus, packet_val_min, packet_val_max)
        for val in vals:
            self.__cpus.append(CPU(val))

        for i in range(0, resource.get_value("buffer_size_start")):
            self.add_packet()

        player_dimen = resource.get_dimen("player")
        self.__player.set_pos(player_dimen.x, player_dimen.y)

    def __collide_detection(self, obj, (x, y)):
        """
        detect if movement will result in a collision with wall, if so the movements will be modified to not collide\n
        :param obj: object to determine collision
        :type obj: src.game.gameobjects.GameObject
        :param (x, y): the relative movement direction
        :type (x, y): (int, int)
        :return: the
        """
        o_rect = obj.get_rect()
        ## COLLISION WITH WALL
        gf_w, gf_h = self.get_gamefield_dimen().wh()

        if x < 0:  # left movement
            dist = o_rect.left
            if dist + x < 0:
                x = dist * -1 # -1 because of negative direction
        elif x > 0:  # right movement
            dist = gf_w - o_rect.right
            if x > dist:
                x = dist

        if y < 0:  # up movement
            dist = o_rect.top
            if dist + y < 0:
                y = dist * -1 # -1 because of negative direction
        elif y > 0:  # down movement
            dist = gf_h - o_rect.bottom
            if y > dist:
                y = dist

        return x, y
コード例 #5
0
class ResultScreen(ViewScreen):
    """
    Screen used for use-case: result\n

    :author: Mikael Holmbom
    :version: 1.0
    """

    __endstate    = None

    __article_player= None
    __article_player_pos = None
    __article_player_color = resource.get_color("result_article_player").rgb()

    __background_color = resource.get_color("resultscreen_background").rgb()

    __text_color    = resource.get_color("resultscreen_text").rgb()

    __header_result = resource.get_string("result_header_player")

    def __init__(self):
        ViewScreen.__init__(self)
        self._dimen_article_padd = resource.get_dimen("result_article_padd")

    def set_endstate(self, endstate):
        """
        set this endstate to display as result\n
        :param endstate:
        :return:
        """
        self.__endstate = endstate

    def setup(self):
        ViewScreen.setup(self)

        self._get_background().fill(self.__background_color)

        self._font_res      = resource.get_font("result_playerinfo")
        self._font          = pygame.font.SysFont(self._font_res.name, self._font_res.size, self._font_res.style_bold, self._font_res.style_italic)
        self._font_res_header = resource.get_font("result_header")
        self._font_header   = pygame.font.SysFont(self._font_res_header.name, self._font_res_header.size, self._font_res_header.style_bold,self._font_res_header.style_italic)

        self.__article_player = self.__create_playerinfo_view()

    def __create_playerinfo_view(self):
        """
        create article displaying player result\n
        :return:
        """
        es = self.__endstate

        rows = []
        rows.append("score : " + str(es.score))
        rows.append("level : " + str(es.level))

        header = self.__header_result.upper()
        width, height = self._get_article_size(header, rows)
        surf = pygame.Surface((width, height))
        surf.fill(self.__article_player_color)

        main_surf = self._get_main_surface()
        mid_x = (main_surf.get_width() / 2) - (width / 2)
        mid_y = (main_surf.get_height() / 2) - (height / 2)
        self.__article_player_pos = mid_x, mid_y

        self._blit_rows(surf, header, self.__text_color, rows)

        return surf

    def render(self):
        ViewScreen.render(self)

        mainsurf = self._get_main_surface()
        mainsurf.blit(self.__article_player, self.__article_player_pos)
コード例 #6
0
ファイル: main.py プロジェクト: mikael308/multimpyproj
def start_game():
    i = StartMenuInterface()
    pygame.display.set_caption(resource.get_string("game_title"))
    i.maindisplay()
コード例 #7
0
ファイル: info_screen.py プロジェクト: mikael308/multimpyproj
class InfoScreen(ViewScreen):
    """
    screen used for use-case info\n

    :author: Mikael Holmbom
    :version: 1.0
    """

    __text_color = resource.get_color("info_text").rgb()

    __article_background_color = resource.get_color(
        "info_article_background").rgb()

    __controls_view = None
    __controls_dimen = resource.get_dimen("info_article_controls")
    __gameinfo_view = None
    __gameinfo_dimen = resource.get_dimen("info_article_gameinfo")

    __gameinfo_header_value = resource.get_string("info_header_gameinfo")
    __controls_header_value = resource.get_string("info_header_controls")

    def __init__(self):
        """

        """
        ViewScreen.__init__(self)

        self._font_res = resource.get_font("info")
        self._font = pygame.font.SysFont(self._font_res.name,
                                         self._font_res.size)
        self._font_header = pygame.font.SysFont(self._font_res.name,
                                                self._font_res.size, True)
        self._dimen_article_padd = resource.get_dimen("info_article_padd")

        self.get_btns()["BACK"] = TextButton(
            resource.get_string("btn_back_text"),
            resource.get_dimen("info_btn_back"))

    def setup(self):
        """

        :return:
        """
        ViewScreen.setup(self)
        self._get_background().fill(
            resource.get_color("infoscreen_background").rgb())

        # set back button position
        btn_back = self.get_btns()["BACK"]
        btn_y = self.get_height() - btn_back.get_height() - btn_back.get_dimen(
        ).bottom
        btn_back.set_pos(btn_back.get_dimen().left, btn_y)

        self.update()

    def update(self):
        """

        :return:
        """
        self.__controls_view = self.__create_controls_view()
        self.__gameinfo_view = self.__create_gameinfo_view()

    def render(self):
        """

        :return:
        """
        main_surf = self._get_main_surface()
        main_surf.blit(self._get_background(), (0, 0))

        main_surf.blit(self.__controls_view, self.__controls_dimen.pos())
        main_surf.blit(self.__gameinfo_view, self.__gameinfo_dimen.pos())

        for btn in self.get_btns().itervalues():
            self._blit(btn)

    def __create_controls_view(self):
        """
        creates a Surface containing controls information\n
        :return:
        """
        rows = []
        rows.append("__GAME__")
        rows.append("left: '" + pygame.key.name(game_controls.key_mov_left) +
                    "'")
        rows.append("up: '" + pygame.key.name(game_controls.key_mov_up) + "'")
        rows.append("right: '" + pygame.key.name(game_controls.key_mov_right) +
                    "'")
        rows.append("down: '" + pygame.key.name(game_controls.key_mov_down) +
                    "'")
        rows.append("grab/release packets: '" +
                    pygame.key.name(game_controls.key_pickup) + "'")
        rows.append("enabled/disable sound effects: '" +
                    pygame.key.name(game_controls.key_switch_sound_enabled) +
                    "'")
        rows.append("")

        rows.append("__NAVIGATION__")
        rows.append("back: '" + pygame.key.name(nav_controls.key_back) + "'")
        rows.append("exit: '" + pygame.key.name(nav_controls.key_quit) + "'")

        header = self.__controls_header_value.upper()
        width, height = self._get_article_size(header, rows)
        surf = pygame.Surface((width, height))
        surf.fill(self.__article_background_color)

        self._blit_rows(surf, header, self.__text_color, rows)

        return surf

    def __create_gameinfo_view(self):
        """
        creates a Surface containing gameinfo\n
        :return:
        """

        text_content = resource.get_string("info_gameinfo_text")
        rows = tools.divide_to_rows(
            resource.get_value("info_gameinfo_maxwidth"), text_content)

        header = self.__gameinfo_header_value.upper()
        article_dimen_wh = self._get_article_size(header, rows)

        surf = pygame.Surface(article_dimen_wh)
        surf.fill(self.__article_background_color)

        self._blit_rows(surf, header, self.__text_color, rows)

        return surf