Beispiel #1
0
 def __init__(self):
     pygame.init()
     self.drawing_parameters = DrawingParameters()
     self.colors = self.drawing_parameters.get_colors()
     self.DISPLAYSURF = pygame.display.set_mode((512, 512))
     self.small_font = pygame.font.Font(None, 16)
     self.big_font = pygame.font.Font(None, 24)
     self.dimension = 512
     self.color = self.colors['grey']
     self.run_game()
Beispiel #2
0
class Game(object):
    def __init__(self):
        pygame.init()
        self.drawing_parameters = DrawingParameters()
        self.colors = self.drawing_parameters.get_colors()
        self.DISPLAYSURF = pygame.display.set_mode((512, 512))
        self.small_font = pygame.font.Font(None, 16)
        self.big_font = pygame.font.Font(None, 24)
        self.dimension = 512
        self.color = self.colors['grey']
        self.run_game()

    def clear_screen(self):
        self.DISPLAYSURF.fill(self.colors['black'])
        pygame.display.update()

    def goodbye(self):
        self.clear_screen()
        goodbye = self.big_font.render('GOODBYE', 1, self.color)
        self.DISPLAYSURF.blit(goodbye, (self.dimension - 300, self.dimension - 300))
        pygame.display.update()
        pygame.time.delay(2000)
        exit(0)

    def draw_start_menu(self):
        self.clear_screen()

        new_text = self.small_font.render('NEW GAME', 1, self.color)
        options_text = self.small_font.render('OPTIONS', 1, self.color)
        quit_text = self.small_font.render('QUIT', 1, self.color)

        self.DISPLAYSURF.blit(new_text, (self.dimension - 300, self.dimension - 300))
        self.DISPLAYSURF.blit(options_text, (self.dimension - 300, self.dimension - 275))
        self.DISPLAYSURF.blit(quit_text, (self.dimension - 300, self.dimension - 250))
        pygame.display.update()

    def draw_fight_question(self):
        fight_question = self.small_font.render('WANNA FIGHT ?', 1, self.color)
        selection_text = self.small_font.render('YES / NO', 1, self.color)

        self.DISPLAYSURF.blit(fight_question, (self.dimension - 335, self.dimension - 200))
        self.DISPLAYSURF.blit(selection_text, (self.dimension - 322, self.dimension - 175))

    def draw_character_info(self):
        position = self.dimension - 490
        for line in str(self.my_hero).split('\n'):
            rendered_line = self.big_font.render(line, 1, self.color)
            self.DISPLAYSURF.blit(rendered_line, (self.dimension - 500, position))
            position += 25

    def draw_monster_info(self, monster):
        position = self.dimension - 490
        for line in str(monster).split('\n'):
            rendered_line = self.big_font.render(line, 1, self.color)
            self.DISPLAYSURF.blit(rendered_line, (self.dimension - 200, position))
            position += 25
        self.draw_fight_question()

    def draw_encounter(self, monster):
        self.clear_screen()
        self.draw_character_info()
        self.draw_monster_info(monster)
        self.draw_fight_question()
        pygame.display.update()

    def draw_character_class_selection(self):
        self.clear_screen()
        position = self.dimension
        classes = {'Warrior', 'Rogue', 'Mage'}
        class_question = self.big_font.render('What type of hero would you like to be?', 1, self.color)
        self.DISPLAYSURF.blit(class_question, (self.dimension - 400, position - 450))
        for item in classes:
            rendered_line = self.big_font.render(item, 1, self.color)
            self.DISPLAYSURF.blit(rendered_line, (self.dimension - 400, position - 400))
            position += 25
        pygame.display.update()

    def draw_color_sheme_selection(self):
        self.clear_screen()
        position = self.dimension
        colors = {'RED', 'BLUE', 'GREEN'}
        color_question = self.big_font.render('Which color would you like?', 1, self.color)
        self.DISPLAYSURF.blit(color_question, (self.dimension - 400, position - 450))
        for item in colors:
            rendered_line = self.big_font.render(item, 1, self.color)
            self.DISPLAYSURF.blit(rendered_line, (self.dimension - 400, position - 400))
            position += 25
        pygame.display.update()

    def fighting(self, my_hero):
        self.clear_screen()
        my_map = Map(my_hero.get_hero_lvl())
        my_monster = Monster(my_map.get_map_monster_lvl_range(), my_hero.get_hero_lvl())
        start_fight = self.big_font.render('=== Start Fight ===', 1, self.color)
        self.DISPLAYSURF.blit(start_fight, (self.dimension - 350, self.dimension - 350))
        pygame.display.update()
        fight = Fight(my_hero, my_monster)
        fight.fighting(my_hero.get_hero_hp(), my_monster.get_monster_hp())
        fight_log = fight.get_fight_log()
        position = self.dimension - 300
        stop = False
        while stop is False:
            for line in fight_log:
                if position <= 450:
                    rendered_line = self.big_font.render(line, 1, self.color)
                    self.DISPLAYSURF.blit(rendered_line, (self.dimension - 350, position))
                    position += 25
                    pygame.display.update()
                    if fight_log.index(line) == len(fight_log) - 1:
                        stop = True
                else:
                    pygame.time.delay(1000)
                    self.clear_screen()
                    position = self.dimension - 300
                    rendered_line = self.big_font.render(line, 1, self.color)
                    self.DISPLAYSURF.blit(rendered_line, (self.dimension - 350, position))
                    position += 25
                    pygame.display.update()
                    if fight_log.index(line) == len(fight_log) - 1:
                        stop = True

        if fight is False:
            self.hero_died()

    @staticmethod
    def choose_character_class(hero_class):
        if hero_class == "WARRIOR":
            my_hero = Warrior()
            my_hero.add_base_stats()
            return my_hero
        elif hero_class == "MAGE":
            my_hero = Mage()
            my_hero.add_base_stats()
            return my_hero
        elif hero_class == "ROGUE":
            my_hero = Rogue()
            my_hero.add_base_stats()
            return my_hero
        else:
            print "WHAT ????"
            exit('unable to process your choice')

    def choose_color_sheme(self, color_choice):
        if color_choice == "RED":
            self.color = self.colors['red']
        elif color_choice == "BLUE":
            self.color = self.colors['blue']
        elif color_choice == "GREEN":
            self.color = self.colors['green']

    def spawn_monster(self):
        my_map = Map(self.my_hero.get_hero_lvl())
        my_monster = Monster(my_map.get_map_monster_lvl_range(), self.my_hero.get_hero_lvl())
        return my_monster

    def run_game(self):
        self.draw_start_menu()
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == MOUSEBUTTONDOWN:
                    mouse_pos = pygame.mouse.get_pos()
                    if mouse_pos[1] in range(190, 230, 1):
                        self.start_new_game()
                    elif mouse_pos[1] in range(235, 250, 1):
                        self.color_sheme_selection()
                    elif mouse_pos[1] in range(255, 270, 1):
                        self.goodbye()

    def color_sheme_selection(self):
        self.draw_color_sheme_selection()
        once = 0
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == MOUSEBUTTONDOWN:
                    mouse_pos = pygame.mouse.get_pos()
                    if mouse_pos[1] in range(115, 130, 1) and once == 0:
                        self.choose_color_sheme("BLUE")
                        self.run_game()
                        once += 1
                    elif mouse_pos[1] in range(140, 155, 1) and once == 0:
                        self.choose_color_sheme("GREEN")
                        self.run_game()
                        once += 1
                    elif mouse_pos[1] in range(165, 180, 1) and once == 0:
                        self.choose_color_sheme("RED")
                        self.run_game()
                        once += 1
        pygame.display.update()

    def start_new_game(self):
        self.draw_character_class_selection()
        once = 0
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == MOUSEBUTTONDOWN:
                    mouse_pos = pygame.mouse.get_pos()
                    if mouse_pos[1] in range(115, 130, 1) and once == 0:
                        self.my_hero = self.choose_character_class("WARRIOR")
                        self.start_encounter()
                        once += 1
                    elif mouse_pos[1] in range(140, 155, 1) and once == 0:
                        self.my_hero = self.choose_character_class("ROGUE")
                        self.start_encounter()
                        once += 1
                    elif mouse_pos[1] in range(165, 180, 1) and once == 0:
                        self.my_hero = self.choose_character_class("MAGE")
                        self.start_encounter()
                        once += 1
                elif event.type == KEYDOWN and event.key == K_ESCAPE:
                    self.draw_character_class_selection()
                    if once == 1:
                        once -= 1
        pygame.display.update()

    def start_encounter(self):
        my_monster = self.spawn_monster()
        self.draw_character_info()
        self.draw_encounter(my_monster)
        pygame.display.update()
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == MOUSEBUTTONDOWN:
                    mouse_pos = pygame.mouse.get_pos()
                    if mouse_pos[1] in range(335, 350) and mouse_pos[0] in range(190, 210):
                        self.fighting(self.my_hero)
                        pygame.time.delay(3000)
                        self.clear_screen()
                        self.start_encounter()
                    elif mouse_pos[1] in range(335, 350) and mouse_pos[0] in range(220, 235):
                        self.clear_screen()
                        self.draw_character_info()
                        pygame.display.update()
                        pygame.time.delay(2000)
                        self.run_game()
        pygame.display.update()