Exemple #1
0
def run_game():
    background = pygame.image.load('sprites/bkg.png')
    background_red = pygame.image.load('sprites/bkgred.png')
    background_dark_red = pygame.image.load('sprites/bkgdarkred.png')
    background_light = pygame.image.load('sprites/bkglight.png')
    pygame.init()
    GL = Game_Logic()
    screen = pygame.display.set_mode((510, 500))
    screen.fill((125, 125, 125))
    spellbook = Spellbook(screen)
    pygame.display.flip()
    pygame.display.set_caption('Wizards')
    icon = pygame.image.load('sprites/logo.png')
    pygame.display.set_icon(icon)

    prev_time = pygame.time.get_ticks(
    )  #Used for getting time between minion attacks
    text_box = TextBox(screen)

    round = 1

    character_party = [Wizard(
        'dark', 5, text_box, 140,
        True)]  #player's party (index always 0 unless we extend on game)
    enemy_party = [
        Wizard('earth', 1, text_box),
        Wizard('water', 1, text_box),
        Wizard('fire', 1, text_box),
        Wizard('dark', 1, text_box),
        Wizard('light', 1, text_box)
    ]  #Max size for party is 5

    current_pics = [0, 24, 12, 16, 8]  #for animation purposes
    wizard_element_pic = 0
    target_num = 2  #index of what enemy to target

    shifting = False  #is the shift key being held

    play_intro(screen)

    while True:
        #print(pygame.time.get_ticks()) -> use if statements to do constant attacking

        screen.fill((0, 0, 0))
        if character_party[0].hp > character_party[0].max_hp * 0.4:
            screen.blit(background, (0, 0))
        elif character_party[0].hp > character_party[0].max_hp * 0.2:
            screen.blit(background_red, (0, 0))
        else:
            screen.blit(background_dark_red, (0, 0))
        GL.update_HP_bar(screen, character_party[0])
        GL.update_enemy_HP_bar(screen, enemy_party)
        GL.update_screen(screen, character_party, enemy_party, current_pics,
                         target_num,
                         wizard_element_pic)  #animates all characters

        screen.blit(icon, (150, 250))  #player character

        for i in range(len(current_pics)):
            current_pics[i] = current_pics[i] + 2 if current_pics[
                i] <= 27 else 0  # for animation

        wizard_element_pic = wizard_element_pic + 2 if wizard_element_pic <= 27 else 0

        text_box.update(screen)

        if shifting:
            spellbook.open(screen)

        #pygame.display.update()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            elif event.type == pygame.KEYDOWN and event.key != pygame.K_LSHIFT:  #checks to see if target needs to be changed or if user is typing
                spell = text_box.input(event)
                new_index = GL.key_LR(event, target_num, enemy_party)
                if new_index != None:
                    target_num = new_index
                    print('new target num', target_num)
                if spell != None:
                    if spell.count(' ') >= 1:
                        GL.check_valid_prefix_spell(character_party[0],
                                                    spell.rpartition(' ')[0],
                                                    spell.rpartition(' ')[2],
                                                    enemy_party, target_num)
                    else:
                        GL.check_valid_spell(character_party[0], spell,
                                             enemy_party[target_num])
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_LSHIFT:
                shifting = True
            elif event.type == pygame.KEYUP and event.key == pygame.K_LSHIFT:
                shifting = False

        #game attempt
        if pygame.time.get_ticks(
        ) - prev_time > 5000:  #checks if 5 seconds have passed (for first level) then all units attack, attacking animation NOT IMPLEMENTED YET
            prev_time = pygame.time.get_ticks()
            GL.ai_constant_attack(screen, enemy_party, character_party[0])
            screen.fill((0, 0, 0))
            screen.blit(background_red, (0, 0))
            GL.update_HP_bar(screen, character_party[0])
            GL.update_enemy_HP_bar(screen, enemy_party)
            GL.update_screen_attacking(screen, character_party, enemy_party,
                                       current_pics, target_num,
                                       wizard_element_pic)
            text_box.update(screen)
            screen.blit(icon, (150, 250))
            if shifting:
                spellbook.open(screen)
            print(character_party[0].hp)
        pygame.display.flip()
        pygame.time.wait(40)

        #if not GL.health_is_gt_0(character_party[0]):   #checks if the main character has health greater than 0, breaks loop if less than 0
        #   break

        if GL.all_enemies_dead(enemy_party):
            round += 1
            enemy_party = GL.new_enemies(round, text_box)

        print(character_party[0].hp)
        print(target_num)

        print('len', len(enemy_party))
Exemple #2
0
     # print(zoomLevel)
 elif key == pygame.K_SPACE:
     paused = not paused
 elif key == pygame.K_UP:
     offset[1] += movepr * zoomLevel
 elif key == pygame.K_DOWN:
     offset[1] -= movepr * zoomLevel
 elif key == pygame.K_LEFT:
     offset[0] += movepr * zoomLevel
 elif key == pygame.K_RIGHT:
     offset[0] -= movepr * zoomLevel
 elif key == pygame.K_c:
     done = False
     colorInput = TextBox("hex: ", (width, 16), 12)
     while not done:
         hexColor = colorInput.input()
         if hexColor is not None:
             R, G, B = parseHex(hexColor)
             done = True
         filled = colorInput.getFilled()
         s.blit(filled, (0, height - filled.get_height()))
         update()
         clock.tick(24)
     penColor = pygame.Color(R, G, B)
 elif key == pygame.K_r:
     radInput = TextBox("radius: ", (width, 16), 12)
     done = False
     while not done:
         radSize = radInput.input()
         if radSize is not None:
             radius = int(radSize)