def init_player(name):
        # -- Reading of the XML file
        tree = etree.parse("data/characters.xml").getroot()
        player_t = tree.xpath(name)[0]
        player_class = player_t.find('class').text.strip()
        race = player_t.find('race').text.strip()
        lvl = player_t.find('lvl')
        if lvl is None:
            # If lvl is not informed, default value is assumes to be 1
            lvl = 1
        else:
            lvl = int(lvl.text.strip())
        defense = int(player_t.find('initDef').text.strip())
        res = int(player_t.find('initRes').text.strip())
        hp = int(player_t.find('initHP').text.strip())
        strength = int(player_t.find('initStrength').text.strip())
        move = int(player_t.find('move').text.strip())
        sprite = 'imgs/dungeon_crawl/player/' + player_t.find(
            'sprite').text.strip()
        compl_sprite = player_t.find('complementSprite')
        if compl_sprite is not None:
            compl_sprite = 'imgs/dungeon_crawl/player/' + compl_sprite.text.strip(
            )

        equipment = player_t.find('equipment')
        equipments = []
        for eq in equipment.findall('*'):
            equipments.append(Level.parse_item_file(eq.text.strip()))
        gold = int(player_t.find('gold').text.strip())

        # Creating player instance
        player = Player(name,
                        sprite,
                        hp,
                        defense,
                        res,
                        move,
                        strength, [player_class],
                        equipments,
                        race,
                        gold,
                        lvl,
                        compl_sprite=compl_sprite)

        # Up stats according to current lvl
        player.stats_up(lvl - 1)
        # Restore hp due to lvl up
        player.healed()

        inventory = player_t.find('inventory')
        for it in inventory.findall('item'):
            item = Level.parse_item_file(it.text.strip())
            player.set_item(item)

        return player
Esempio n. 2
0
class Game(pyglet.window.Window):
    def __init__(self):
        super(Game, self).__init__(width=SCREEN_WIDTH,
                                   height=SCREEN_HEIGHT,
                                   fullscreen=FULLSCREEN)
        pyglet.clock.schedule_interval(self.update, 1 / 60.0)
        self.level = Level()

    def update(self, dt):
        self.push_handlers(keys)
        self.level.update(dt)

    def on_draw(self):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        self.level.draw()
Esempio n. 3
0
    def load_game(self):
        try:
            save = open("saves/main_save.xml", "r")

            # Test if there is a current saved game
            if save:
                tree_root = etree.parse("saves/main_save.xml").getroot()
                index = tree_root.find("level/index").text.strip()
                level_name = 'maps/level_' + index + '/'
                game_status = tree_root.find("level/phase").text.strip()
                turn_nb = 0
                if game_status != 'I':
                    turn_nb = int(tree_root.find("level/turn").text.strip())

                # Load level with current game status, foes states, and team
                self.level_id = int(index)
                level = Level(level_name, self.level_id, game_status, turn_nb,
                              tree_root.find("level/entities"))
                self.play(level)
                save.close()
                return
        except FileNotFoundError:
            # No saved game
            self.background_menus.append([self.active_menu, True])

            name = "Load Game"
            entries = [[{
                'type': 'text',
                'text': "No saved game.",
                'font': fonts['MENU_SUB_TITLE_FONT']
            }]]
            width = self.screen.get_width() // 2
            self.active_menu = InfoBox(name,
                                       "",
                                       "imgs/interface/PopUpMenu.png",
                                       entries,
                                       width,
                                       close_button=1)
    def load_game(self):
        try:
            save = open("saves/main_save.xml", "r")

            # Test if there is a current saved game
            if save:
                tree_root = etree.parse("saves/main_save.xml").getroot()
                level_name = tree_root.find("level/name").text.strip()
                game_status = tree_root.find("level/phase").text.strip()
                turn_nb = 0
                if game_status != 'I':
                    turn_nb = int(tree_root.find("level/turn").text.strip())
                team = []
                for player in tree_root.findall("team/player"):
                    name = player.find("name").text.strip()
                    level = int(player.find("level").text.strip())
                    p_class = player.find("class").text.strip()
                    race = player.find("race").text.strip()
                    gold = int(player.find("gold").text.strip())
                    exp = int(player.find("exp").text.strip())
                    hp = int(player.find("hp").text.strip())
                    strength = int(player.find("strength").text.strip())
                    defense = int(player.find("defense").text.strip())
                    res = int(player.find("res").text.strip())
                    move = int(player.find("move").text.strip())
                    current_hp = int(player.find("currentHp").text.strip())
                    pos = (int(player.find("position/x").text.strip()),
                           int(player.find("position/y").text.strip()))
                    state = player.find("turnFinished").text.strip()
                    inv = []
                    for it in player.findall("inventory/item"):
                        it_name = it.find("name").text.strip()
                        item = Level.parse_item_file(it_name)
                        inv.append(item)

                    equipments = []
                    for eq in player.findall("equipments/equipment"):
                        eq_name = eq.find("name").text.strip()
                        eq = Level.parse_item_file(eq_name)
                        equipments.append(eq)

                    # -- Reading of the XML file for default character's values (i.e. sprites)
                    tree = etree.parse("data/characters.xml").getroot()
                    player_t = tree.xpath(name)[0]

                    sprite = 'imgs/dungeon_crawl/player/' + player_t.find(
                        'sprite').text.strip()
                    compl_sprite = player_t.find('complementSprite')
                    if compl_sprite is not None:
                        compl_sprite = 'imgs/dungeon_crawl/player/' + compl_sprite.text.strip(
                        )

                    p = Player(name,
                               sprite,
                               hp,
                               defense,
                               res,
                               move,
                               strength, [p_class],
                               equipments,
                               race,
                               gold,
                               level,
                               compl_sprite=compl_sprite)
                    p.earn_xp(exp)
                    p.set_items(inv)
                    p.set_current_hp(current_hp)
                    p.set_pos(pos)
                    if state == "True":
                        p.turn_finished()

                    team.append(p)

                # Load level with current game status, foes states, and team
                level = Level(level_name, team, game_status, turn_nb,
                              tree_root.find("level/entities"))
                self.play(level)
                save.close()
                return
        except FileNotFoundError as err:
            pass

        # No saved game
        self.background_menus.append([self.active_menu, True])

        name = "Load Game"
        entries = [[{
            'type': 'text',
            'text': "No saved game.",
            'font': ITEM_DESC_FONT
        }]]
        width = self.screen.get_width() // 2
        self.active_menu = InfoBox(name,
                                   "",
                                   "imgs/interface/PopUpMenu.png",
                                   entries,
                                   width,
                                   close_button=1)
 def load_level(level, team):
     return Level('maps/level_' + level + '/', team)
Esempio n. 6
0
 def load_level(level, team):
     return Level('maps/level_' + str(level) + '/', team, level)
Esempio n. 7
0
 def load_level(level, team=None):
     if team is None:
         team = []
     return Level('maps/level_' + str(level) + '/', level, players=team)
Esempio n. 8
0
 def __init__(self, initial, final, level):
     self.initial = Value(initial)
     self.final = Value(final)
     self.level = Level(level)
Esempio n. 9
0
 def __init__(self):
     super(Game, self).__init__(width=SCREEN_WIDTH,
                                height=SCREEN_HEIGHT,
                                fullscreen=FULLSCREEN)
     pyglet.clock.schedule_interval(self.update, 1 / 60.0)
     self.level = Level()
Esempio n. 10
0
    pg.init()

    # Load fonts
    fonts.init_fonts()

    # Window parameters
    pg.display.set_caption("In the name of the Five Cats")
    screen = pg.display.set_mode((MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT))

    # Load constant sprites
    Destroyable.init_constant_sprites()
    Breakable.init_constant_sprites()
    Movable.init_constant_sprites()
    Sidebar.init_constant_sprites()
    Level.init_constant_sprites()

    # Load some data
    races = Loader.load_races()
    classes = Loader.load_classes()
    Character.init_data(races, classes)

    clock = pg.time.Clock()

    start_screen = StartScreen(screen)

    quit_game = False
    while not quit_game:
        for e in pg.event.get():
            if e.type == pg.QUIT:
                quit_game = True
Esempio n. 11
0
if __name__ == "__main__":
    from src.constants import *
    import pygame as pg
    pg.init()

    #Window paramaters
    screen = pg.display.set_mode((WIN_WIDTH, WIN_HEIGHT), pg.RESIZABLE)
    pg.display.set_caption('On testing...')

    clock = pg.time.Clock()
    fps_font = pg.font.SysFont(None, 20, True)  # Use pygame's default font

    from src.Level import Level

    # Init the first level
    level = Level('maps/level_test/')

    end = False
    while not (level.is_ended() or end):
        for e in pg.event.get():
            if e.type == pg.QUIT:
                end = True
            elif e.type == pg.MOUSEBUTTONUP:
                if e.button == 1 or e.button == 3:
                    level.click(e.button, e.pos)
            elif e.type == pg.MOUSEMOTION:
                level.motion(e.pos)
            elif e.type == pg.MOUSEBUTTONDOWN:
                if e.button == 1 or e.button == 3:
                    level.button_down(e.button, e.pos)
        level.update_state()
Esempio n. 12
0
    # Open the map file to get all of the individual level files in the proper order
    map_file = open("map.dat", "r")

    # Initialize a counter
    i = 0
    # For each line of the map file
    for line in map_file:
        # Split the line into individual filenames
        files = line.split()
        # Create a list to hold the row of levels
        levelRow = [0] * len(files)
        # For each file in the line
        for j in range(0, len(files)):
            # Add a new level to the row
            levelRow[j] = Level("maps\\" + files[j], i, j)
        # Add the row of levels to the level list
        levels.append(levelRow)
        # Tick
        i = i + 1
    # Close the map file
    map_file.close()

    # Initialize coordinates for the current level
    currentLevelX = 2
    currentLevelY = 1
    # Initialize a variable to represent the level currently being drawn
    currentLevel = levels[1][2]

    # Initialize the player
    player = Player(100, 100)
    def load_game(self):
        try:
            save = open("saves/main_save.xml", "r")

            # Test if there is a current saved game
            if save:
                tree_root = etree.parse("saves/main_save.xml").getroot()
                index = tree_root.find("level/index").text.strip()
                level_name = 'maps/level_' + index + '/'
                game_status = tree_root.find("level/phase").text.strip()
                turn_nb = 0
                if game_status != 'I':
                    turn_nb = int(tree_root.find("level/turn").text.strip())
                team = []
                for player in tree_root.findall("team/player"):
                    name = player.find("name").text.strip()
                    level = int(player.find("level").text.strip())
                    p_class = player.find("class").text.strip()
                    race = player.find("race").text.strip()
                    gold = int(player.find("gold").text.strip())
                    exp = int(player.find("exp").text.strip())
                    hp = int(player.find("hp").text.strip())
                    strength = int(player.find("strength").text.strip())
                    defense = int(player.find("defense").text.strip())
                    res = int(player.find("resistance").text.strip())
                    current_hp = int(player.find("currentHp").text.strip())
                    pos = (int(player.find("position/x").text.strip()) *
                           TILE_SIZE,
                           int(player.find("position/y").text.strip()) *
                           TILE_SIZE)
                    state = player.find("turnFinished").text.strip()
                    inv = []
                    for it in player.findall("inventory/item"):
                        it_name = it.find("name").text.strip()
                        item = LoadFromXMLManager.parse_item_file(it_name)
                        inv.append(item)

                    equipments = []
                    for eq in player.findall("equipment/*"):
                        eq_name = eq.text.strip()
                        eq = LoadFromXMLManager.parse_item_file(eq_name)
                        equipments.append(eq)

                    skills = [
                        (LoadFromXMLManager.load_skill(skill.text.strip())
                         if skill.text.strip()
                         not in LoadFromXMLManager.skills_infos else
                         LoadFromXMLManager.skills_infos[skill.text.strip()])
                        for skill in player.findall('skills/skill/name')
                    ]

                    # -- Reading of the XML file for default character's values (i.e. sprites)
                    tree = etree.parse("data/characters.xml").getroot()
                    player_t = tree.xpath(name)[0]

                    sprite = 'imgs/' + player_t.find('sprite').text.strip()
                    compl_sprite = player_t.find('complementSprite')
                    if compl_sprite is not None:
                        compl_sprite = 'imgs/' + compl_sprite.text.strip()

                    p = Player(name,
                               sprite,
                               hp,
                               defense,
                               res,
                               strength, [p_class],
                               equipments,
                               race,
                               gold,
                               level,
                               skills,
                               compl_sprite=compl_sprite)
                    p.earn_xp(exp)
                    p.items = inv
                    p.set_current_hp(current_hp)
                    p.pos = pos
                    if state == "True":
                        p.turn_finished()

                    team.append(p)

                # Load level with current game status, foes states, and team
                self.level_id = int(index)
                level = Level(level_name, team, self.level_id, game_status,
                              turn_nb, tree_root.find("level/entities"))
                self.play(level)
                save.close()
                return
        except FileNotFoundError:
            # No saved game
            self.background_menus.append([self.active_menu, True])

            name = "Load Game"
            entries = [[{
                'type': 'text',
                'text': "No saved game.",
                'font': fonts['MENU_SUB_TITLE_FONT']
            }]]
            width = self.screen.get_width() // 2
            self.active_menu = InfoBox(name,
                                       "",
                                       "imgs/interface/PopUpMenu.png",
                                       entries,
                                       width,
                                       close_button=1)