Пример #1
0
class Profile(GameEngineElement):
    def __init__(self, recall_string=None, name_entry_cb=None):
        GameEngineElement.__init__(self)
        self.name = ""
        self.dungeon_id = "al1.txt"
        self.position = (-1, -1)
        self.playerFacing = NORTH
        self.hero = Hero()

        # 4 types of stats and difficulties
        self.problem_stats = {}
        self.difficulty = {}
        for stat in ["mult", "div", "geo", "shop"]:

            # Each type of stat has 3 "levels" easy, medium, hard
            # Shop uses level for too much, too little, exact
            self.problem_stats[stat] = [(0, 0), (0, 0), (0, 0)]

            # Difficulty: 1=Easy 2=Meduim(default) 3=Hard
            self.difficulty[stat] = 2

        self.puzzlesSolved = 0
        self.inventory = []

        bg = pygame.image.load(MENU_PATH + "mafh_splash.gif").convert()
        self.background = DrawableObject([bg], "")
        self.background.scale(self.game_engine.width, self.game_engine.height)
        self.add_to_scene([self.background])

        # create background rect
        draw_width = self.game_engine.width / 4
        draw_height = self.game_engine.height / 4
        surf = pygame.Surface((draw_width + 60, draw_height + 60))
        surf.fill((150, 150, 255))
        self.blueRect = DrawableObject([surf], "")
        self.add_to_scene([self.blueRect])

        font = pygame.font.Font(None, 16)
        self.text_list = []
        self.text_list.append(DrawableFontObject("1", font))
        self.text_list.append(DrawableFontObject("2", font))
        self.text_list.append(DrawableFontObject("name", font))
        self.add_to_scene(self.text_list)

        if recall_string:
            self.load_from_json_string(recall_string)

        if self.name == "":
            self.name_cb = name_entry_cb
            self.add_to_engine()

    def reload_dungeon(self):
        self.__load_dungeon(self.game_engine.get_object("dungeon").id)
        # restore HP
        self.hero.setHealth(self.hero.maxHealthPoints())

    def next_dungeon(self):
        self.__load_dungeon(self.game_engine.get_object("dungeon").next)

    def __load_dungeon(self, id):
        self.position = (-1, -1)
        self.playerFacing = NORTH

        d = self.game_engine.get_object("dungeon")
        self.dungeon_id = id
        d.remove_from_engine()
        self.game_engine.remove_object("dungeon")
        self.game_engine.add_object("dungeon", Dungeon(self.dungeon_id))
        self.remove_keys()

    def load_from_json_string(self, recall_string):
        print "TO BE IMPLEMENTED"

    def dump_to_json_string(self):
        print "TO BE IMPLEMENTED"

    def update_problem_stat(self, p_type, level, correct):
        assert p_type in self.problem_stats
        assert level >= 0 and level < len(self.problem_stats) - 1

        correct, wrong = self.problem_stats[p_type][level]
        if correct:
            self.problem_stats[p_type][level] = (correct + 1, wrong)
        else:
            self.problem_stats[p_type][level] = (correct, wrong + 1)

    def move_to(self, x, y):
        self.position = (x, y)

    def turn(self, dir):
        if dir == RIGHT:
            self.playerFacing = (self.playerFacing - 1) % 4

        elif dir == LEFT:
            self.playerFacing = (self.playerFacing + 1) % 4

    def give_item(self, item):
        self.inventory.append(item)

    def remove_keys(self):
        i = 0
        new_inv = []
        for item in self.inventory:
            if not isinstance(item, Key):
                new_inv.append(item)
        self.inventory = new_inv

    def add_to_engine(self):
        super(Profile, self).add_to_engine()

    def remove_from_engine(self):
        super(Profile, self).remove_from_engine()

    def event_handler(self, event):
        """
        Handles user input (used only for name entry)
        """
        if event.type == pygame.KEYDOWN:
            if pygame.key.name(event.key) == "backspace":
                self.name = self.name[0:-1]
                return True
            elif pygame.key.name(event.key) == "return":
                self.remove_from_engine()
                self.name_cb()
                return True
            else:
                self.name += event.unicode
                return True

    def draw(self):
        """
        Draws user input for name to the screen
        """
        width = self.game_engine.width
        height = self.game_engine.height

        draw_width = width / 4
        draw_height = height / 4

        self.background.setPosition(0, 0)
        self.blueRect.setPosition(draw_width, draw_height)

        # name
        self.text_list[0].changeText(self.name, (0, 0, 0))
        self.text_list[0].setPosition(draw_width + 60, draw_height + 60)
        # text1
        self.text_list[1].changeText(_("Enter Name:"), (0, 0, 0))
        self.text_list[1].setPosition(draw_width, draw_height)
        # text2
        self.text_list[2].changeText(_("Return to continue"), (0, 0, 0))
        self.text_list[2].setPosition(draw_width + 20, draw_height + 20)
Пример #2
0
class Profile(GameEngineElement):
    def __init__(self, recall_string=None, name_entry_cb=None):
        GameEngineElement.__init__(self)
        self.name = ""
        self.dungeon_id = "al1.txt"
        self.position = (-1, -1)
        self.playerFacing = NORTH
        self.hero = Hero()

        # 4 types of stats and difficulties
        self.problem_stats = {}
        self.difficulty = {}
        for stat in ['mult', 'div', 'geo', 'shop']:

            # Each type of stat has 3 "levels" easy, medium, hard
            # Shop uses level for too much, too little, exact
            self.problem_stats[stat] = [(0, 0), (0, 0), (0, 0)]

            #Difficulty: 1=Easy 2=Meduim(default) 3=Hard
            self.difficulty[stat] = 2

        self.puzzlesSolved = 0
        self.inventory = []

        bg = pygame.image.load(MENU_PATH + "mafh_splash.gif").convert()
        self.background = DrawableObject([bg], '')
        self.background.scale(self.game_engine.width, self.game_engine.height)
        self.add_to_scene([self.background])

        #create background rect
        draw_width = self.game_engine.width / 4
        draw_height = self.game_engine.height / 4
        surf = pygame.Surface((draw_width + 60, draw_height + 60))
        surf.fill((150, 150, 255))
        self.blueRect = DrawableObject([surf], "")
        self.add_to_scene([self.blueRect])

        font = pygame.font.Font(None, 16)
        self.text_list = []
        self.text_list.append(DrawableFontObject("1", font))
        self.text_list.append(DrawableFontObject("2", font))
        self.text_list.append(DrawableFontObject("name", font))
        self.add_to_scene(self.text_list)

        if recall_string:
            self.load_from_json_string(recall_string)

        if self.name == "":
            self.name_cb = name_entry_cb
            self.add_to_engine()

    def reload_dungeon(self):
        self.__load_dungeon(self.game_engine.get_object('dungeon').id)
        #restore HP
        self.hero.setHealth(self.hero.maxHealthPoints())

    def next_dungeon(self):
        self.__load_dungeon(self.game_engine.get_object('dungeon').next)

    def __load_dungeon(self, id):
        self.position = (-1, -1)
        self.playerFacing = NORTH

        d = self.game_engine.get_object('dungeon')
        self.dungeon_id = id
        d.remove_from_engine()
        self.game_engine.remove_object('dungeon')
        self.game_engine.add_object('dungeon', Dungeon(self.dungeon_id))
        self.remove_keys()

    def load_from_json_string(self, recall_string):
        print "TO BE IMPLEMENTED"

    def dump_to_json_string(self):
        print "TO BE IMPLEMENTED"

    def update_problem_stat(self, p_type, level, correct):
        assert (p_type in self.problem_stats)
        assert (level >= 0 and level < len(self.problem_stats) - 1)

        correct, wrong = self.problem_stats[p_type][level]
        if correct:
            self.problem_stats[p_type][level] = (correct + 1, wrong)
        else:
            self.problem_stats[p_type][level] = (correct, wrong + 1)

    def move_to(self, x, y):
        self.position = (x, y)

    def turn(self, dir):
        if dir == RIGHT:
            self.playerFacing = (self.playerFacing - 1) % 4

        elif dir == LEFT:
            self.playerFacing = (self.playerFacing + 1) % 4

    def give_item(self, item):
        self.inventory.append(item)

    def remove_keys(self):
        i = 0
        new_inv = []
        for item in self.inventory:
            if not isinstance(item, Key):
                new_inv.append(item)
        self.inventory = new_inv

    def add_to_engine(self):
        super(Profile, self).add_to_engine()

    def remove_from_engine(self):
        super(Profile, self).remove_from_engine()

    def event_handler(self, event):
        """
        Handles user input (used only for name entry)
        """
        if event.type == pygame.KEYDOWN:
            if pygame.key.name(event.key) == 'backspace':
                self.name = self.name[0:-1]
                return True
            elif pygame.key.name(event.key) == 'return':
                self.remove_from_engine()
                self.name_cb()
                return True
            else:
                self.name += event.unicode
                return True

    def draw(self):
        """
        Draws user input for name to the screen
        """
        width = self.game_engine.width
        height = self.game_engine.height

        draw_width = width / 4
        draw_height = height / 4

        self.background.setPosition(0, 0)
        self.blueRect.setPosition(draw_width, draw_height)

        #name
        self.text_list[0].changeText(self.name, (0, 0, 0))
        self.text_list[0].setPosition(draw_width + 60, draw_height + 60)
        #text1
        self.text_list[1].changeText(_("Enter Name:"), (0, 0, 0))
        self.text_list[1].setPosition(draw_width, draw_height)
        #text2
        self.text_list[2].changeText(_("Return to continue"), (0, 0, 0))
        self.text_list[2].setPosition(draw_width + 20, draw_height + 20)
Пример #3
0
class GameMenuHolder( GameEngineElement ):
    def __init__(self, callback, background=None, width=1200, height=900):
        GameEngineElement.__init__(self, has_draw=True, has_event=False)
        self.menu = None
        self.callback = callback
        self.background = DrawableObject([pygame.image.load(background).convert()], '')
        self.background.scale(width, height)
        self.add_to_scene([self.background])
        self.width = width
        self.height = height

    def remove_from_engine(self):
        super( GameMenuHolder, self ).remove_from_engine()
        self.clear_menu()

    def draw(self):
        if self.background:
            self.background.setPosition(0,0)
        else:
            screen.fill((0, 0, 255))

    def menu_called(self, id):
        self.callback(id, self)

    def clear_menu(self):
        if self.menu:
            self.menu.clear_menu()
            self.menu.remove_from_engine()
            self.menu = None

    def show_menu(self,id):
        if self.is_in_engine():
            self.clear_menu()
        else:
            self.add_to_engine()

        if id == "title":
            menu_options = [
                        ["Adventure Play", lambda: self.show_menu("adventure"), "Begin a new game, create a new profile, or continue from a saved profile game"],
                        #['Creative Play', lambda: self.show_menu("creative"), "Play custom maps and learn how to create them"],
                        #['Network', lambda: self.show_menu("network"), "Play games with special rules or see the scoreboard"],
                        #['Extras', lambda: self.show_menu("extras"), "View special information for the loaded player profile"],
                        #['Options', lambda: self.menu_called("options"), "Change controls, language, difficulty, and other game settings"],
                        #['Options', lambda: self.show_menu("options"), "Change controls, language, difficulty, and other game settings"],
                        ['Exit Game', lambda: self.game_engine.stop_event_loop(), "Exit the game"]
            ]

        elif id == "adventure":
            menu_options = [
                        #["Continue",  lambda: self.menu_called("continue"), "Continue loaded game from the latest save"],
                        #["Level Select",  lambda: self.menu_called("level"), "Play completed levels from loaded game"],
                        #["Load Game", lambda: self.menu_called("load"), "Load player profile game data"],
                        ["New Game",  lambda: self.menu_called("new"), "Play story mode from the beginning"],
                        #["New Player Profile",  lambda: self.menu_called("newpro"), "Create a new player profile"],
                        ["Return to Title", lambda: self.show_menu("title"), "Return to the title menu"]
            ]

        elif id == "creative":
            menu_options = [
                        ["Play Custom Map",  lambda: self.menu_called("playcustom"), "NOT AVAILABLE-Play a custom made map"],
                        ["New Custom Map", lambda: self.menu_called("newcustom"), "NOT AVAILABLE-Learn how to create your own custom map"],
                        ["Share Map",  lambda: self.menu_called("sharecustom"), "NOT AVAILABLE-Share created maps with friends"],
                        ["Return to Title", lambda: self.show_menu("title"), "Return to the title menu"]
            ]

        elif id == "network":
            menu_options = [
                        ["Local Treasure Trekkers Play", lambda: self.menu_called("networktreasure"), "NOT AVAILABLE-Play a special time trial version of Fortune Hunter"],
                        ["View Scoreboard",  lambda: self.menu_called("networkscore"), "NOT AVAILABLE-View the scoreboard for your team"],
                        ["Return to Title", lambda: self.show_menu("title"), "Return to the title menu"]
            ]

        elif id == "extras":
            menu_options = [
                        ["View Bestiary",  lambda: self.menu_called("viewbestiary"), "NOT AVAILABLE-View monster information"],
                        ["View Treasures",  lambda: self.menu_called("viewtreasures"), "NOT AVAILABLE-View collected treasures"],
                        ["View Awards", lambda: self.menu_called("viewawards"), "NOT AVAILABLE-View awards"],
                        ["View Statistics",  lambda: self.menu_called("viewstats"), "NOT AVAILABLE-View statistics"],
                        ["Return to Title", lambda: self.show_menu("title"), "Return to the title menu"]
            ]

        elif id == "options":
            menu_options = [
                       ["Controls", lambda: self.menu_called("controls"), "NOT AVAILABLE-Change control scheme"],
                       ["Language", lambda: self.menu_called("language"), "NOT AVAILABLE-Change language setting"],
                       ["Audio", lambda: self.menu_called("audiu"), "NOT AVAILABLE-Toggle audio on or off"],
                       ["Subtitles", lambda: self.menu_called("subtitles"), "NOT AVAILABLE-Toggle subtitles on or off"],
                       ["FMCs", lambda: self.menu_called("fmcs"), "NOT AVAILABLE-Toggle FMCs on or off"],
                       ["Cooperative Play", lambda: self.menu_called("coop"), "NOT AVAILABLE-Toggle coop mode on or off"],
                       ["Game Difficulty", lambda: self.menu_called("difficulty"), "NOT AVAILABLE-Change the game difficulty setting"],
                       ["Merchant Difficulty", lambda: self.menu_called("merchant"), "NOT AVAILABLE-Change the merchant difficulty setting"],
                       ["Credits", lambda: self.menu_called("credits"), "NOT AVAILABLE-Watch the credits reel"],
                       ["About", lambda: self.menu_called("about"), "NOT AVAILABLE-Information on game and version"],
                       ["Return to Title", lambda: self.show_menu("title"), "Return to the title menu"]
            ]

        else:
            print "Invalid Menu", id
            return

        self.menu = GameMenu(menu_options, self.width, self.height)
Пример #4
0
class GameMenuHolder(GameEngineElement):
    def __init__(self, callback, background=None, width=1200, height=900):
        GameEngineElement.__init__(self, has_draw=True, has_event=False)
        self.menu = None
        self.callback = callback
        self.background = DrawableObject(
            [pygame.image.load(background).convert()], '')
        self.background.scale(width, height)
        self.add_to_scene([self.background])
        self.width = width
        self.height = height

    def remove_from_engine(self):
        super(GameMenuHolder, self).remove_from_engine()
        self.clear_menu()

    def draw(self):
        if self.background:
            self.background.setPosition(0, 0)
        else:
            screen.fill((0, 0, 255))

    def menu_called(self, id):
        self.callback(id, self)

    def clear_menu(self):
        if self.menu:
            self.menu.clear_menu()
            self.menu.remove_from_engine()
            self.menu = None

    def show_menu(self, id):
        if self.is_in_engine():
            self.clear_menu()
        else:
            self.add_to_engine()

        if id == "title":
            menu_options = [
                [
                    "Adventure Play", lambda: self.show_menu("adventure"),
                    "Begin a new game, create a new profile, or continue from a saved profile game"
                ],
                #['Creative Play', lambda: self.show_menu("creative"), "Play custom maps and learn how to create them"],
                #['Network', lambda: self.show_menu("network"), "Play games with special rules or see the scoreboard"],
                #['Extras', lambda: self.show_menu("extras"), "View special information for the loaded player profile"],
                #['Options', lambda: self.menu_called("options"), "Change controls, language, difficulty, and other game settings"],
                #['Options', lambda: self.show_menu("options"), "Change controls, language, difficulty, and other game settings"],
                [
                    'Exit Game', lambda: self.game_engine.stop_event_loop(),
                    "Exit the game"
                ]
            ]

        elif id == "adventure":
            menu_options = [
                #["Continue",  lambda: self.menu_called("continue"), "Continue loaded game from the latest save"],
                #["Level Select",  lambda: self.menu_called("level"), "Play completed levels from loaded game"],
                #["Load Game", lambda: self.menu_called("load"), "Load player profile game data"],
                [
                    "New Game", lambda: self.menu_called("new"),
                    "Play story mode from the beginning"
                ],
                #["New Player Profile",  lambda: self.menu_called("newpro"), "Create a new player profile"],
                [
                    "Return to Title", lambda: self.show_menu("title"),
                    "Return to the title menu"
                ]
            ]

        elif id == "creative":
            menu_options = [
                [
                    "Play Custom Map", lambda: self.menu_called("playcustom"),
                    "NOT AVAILABLE-Play a custom made map"
                ],
                [
                    "New Custom Map", lambda: self.menu_called("newcustom"),
                    "NOT AVAILABLE-Learn how to create your own custom map"
                ],
                [
                    "Share Map", lambda: self.menu_called("sharecustom"),
                    "NOT AVAILABLE-Share created maps with friends"
                ],
                [
                    "Return to Title", lambda: self.show_menu("title"),
                    "Return to the title menu"
                ]
            ]

        elif id == "network":
            menu_options = [[
                "Local Treasure Trekkers Play",
                lambda: self.menu_called("networktreasure"),
                "NOT AVAILABLE-Play a special time trial version of Fortune Hunter"
            ],
                            [
                                "View Scoreboard",
                                lambda: self.menu_called("networkscore"),
                                "NOT AVAILABLE-View the scoreboard for your team"
                            ],
                            [
                                "Return to Title",
                                lambda: self.show_menu("title"),
                                "Return to the title menu"
                            ]]

        elif id == "extras":
            menu_options = [[
                "View Bestiary", lambda: self.menu_called("viewbestiary"),
                "NOT AVAILABLE-View monster information"
            ],
                            [
                                "View Treasures",
                                lambda: self.menu_called("viewtreasures"),
                                "NOT AVAILABLE-View collected treasures"
                            ],
                            [
                                "View Awards",
                                lambda: self.menu_called("viewawards"),
                                "NOT AVAILABLE-View awards"
                            ],
                            [
                                "View Statistics",
                                lambda: self.menu_called("viewstats"),
                                "NOT AVAILABLE-View statistics"
                            ],
                            [
                                "Return to Title",
                                lambda: self.show_menu("title"),
                                "Return to the title menu"
                            ]]

        elif id == "options":
            menu_options = [
                [
                    "Controls", lambda: self.menu_called("controls"),
                    "NOT AVAILABLE-Change control scheme"
                ],
                [
                    "Language", lambda: self.menu_called("language"),
                    "NOT AVAILABLE-Change language setting"
                ],
                [
                    "Audio", lambda: self.menu_called("audiu"),
                    "NOT AVAILABLE-Toggle audio on or off"
                ],
                [
                    "Subtitles", lambda: self.menu_called("subtitles"),
                    "NOT AVAILABLE-Toggle subtitles on or off"
                ],
                [
                    "FMCs", lambda: self.menu_called("fmcs"),
                    "NOT AVAILABLE-Toggle FMCs on or off"
                ],
                [
                    "Cooperative Play", lambda: self.menu_called("coop"),
                    "NOT AVAILABLE-Toggle coop mode on or off"
                ],
                [
                    "Game Difficulty", lambda: self.menu_called("difficulty"),
                    "NOT AVAILABLE-Change the game difficulty setting"
                ],
                [
                    "Merchant Difficulty",
                    lambda: self.menu_called("merchant"),
                    "NOT AVAILABLE-Change the merchant difficulty setting"
                ],
                [
                    "Credits", lambda: self.menu_called("credits"),
                    "NOT AVAILABLE-Watch the credits reel"
                ],
                [
                    "About", lambda: self.menu_called("about"),
                    "NOT AVAILABLE-Information on game and version"
                ],
                [
                    "Return to Title", lambda: self.show_menu("title"),
                    "Return to the title menu"
                ]
            ]

        else:
            print "Invalid Menu", id
            return

        self.menu = GameMenu(menu_options, self.width, self.height)