def main(screen, clock): bg = util.get_image('background') map_button = util.get_image('maps_button') map_button = pygame.transform.scale(map_button, (350, 150)) cards_button = util.get_image('cards_button') cards_button = pygame.transform.scale(cards_button, (350, 150)) items_button = util.get_image('items_button') items_button = pygame.transform.scale(items_button, (350, 150)) screen.blit(bg, (0, 0)) screen.blit(map_button, (20, 100)) screen.blit(cards_button, (450, 100)) screen.blit(items_button, (900, 100)) while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() # x w x, y h y if 20 + 350 > mouse[0] > 20 and 100 + 150 > mouse[1] > 100: if click[0] == 1: return True, 0 elif 450 + 350 > mouse[0] > 450 and 100 + 150 > mouse[1] > 100: if click[0] == 1: return True, 1 elif 900 + 350 > mouse[0] > 900 and 100 + 150 > mouse[1] > 100: if click[0] == 1: return True, 2 if not util.tick(clock): return False, -1
def main(screen, clock): bg = util.get_image('background') bg_h = 934 logo = util.get_image('logo') start = util.get_image('start_button') start = pygame.transform.scale(start, (350, 150)) option = util.get_image('options_button') option = pygame.transform.scale(option, (400, 150)) bg_animation_ticks = 200 bg_ease = util.EaseOutSine(bg_animation_ticks, util.HEIGHT - bg_h, 0) logo_ease = util.EaseOutSine(bg_animation_ticks, -50, -160) for i in range(bg_animation_ticks): # Initialize & scroll start screen screen.fill([0, 255, 0]) screen.blit(bg, (0, next(bg_ease))) screen.blit(logo, (0, next(logo_ease))) if not util.tick(clock): return False for i in range(0, 200): start.set_alpha(i/20) # doesn't make the image fully opaque option.set_alpha(i/20) screen.blit(start, (450, 350)) screen.blit(option, (420, 500)) if not util.tick(clock): return False while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() x = 450 y = 350 w = 350 h = 150 if x+w > mouse[0] > x and y+h > mouse[1] > y: if click[0] == 1: return True if not util.tick(clock): return False
def main(screen, clock): bg = util.get_image('item_selection_background') bg = pygame.transform.scale(bg, (1280, 720)) return_button = util.get_image('return_button') return_button = pygame.transform.scale(return_button, (175, 60)) screen.blit(bg, (0, 0)) screen.blit(return_button, (1080, 640)) card_back = util.get_image('card_back', scale=(450, 458)) card_border = util.get_image('card_border', scale=(450, 458)) potion_image = util.get_image('Cards/potion', scale=(300, 300)) dragon_image = util.get_image('Cards/dragon', scale=(280, 280)) phoenix_image = util.get_image('Cards/phoenix', scale=(340, 340)) # blitting the selction items screen.blit(card_back, (-10, 20)) screen.blit(card_back, (410, 20)) screen.blit(card_back, (830, 20)) screen.blit(potion_image, (70, 90)) screen.blit(dragon_image, (511, 86)) screen.blit(phoenix_image, (875, 35)) screen.blit(card_border, (-10, 20)) screen.blit(card_border, (410, 20)) screen.blit(card_border, (830, 20)) # blitting the items selected card_back = pygame.transform.scale(card_back, (180, 188)) card_border = pygame.transform.scale(card_border, (180, 188)) potion_image = pygame.transform.scale(potion_image, (135, 135)) dragon_image = pygame.transform.scale(dragon_image, (112, 115)) screen.blit(card_back, (45, 510)) screen.blit(card_back, (245, 510)) screen.blit(potion_image, (75, 540)) screen.blit(dragon_image, (287, 536)) screen.blit(card_border, (45, 510)) screen.blit(card_border, (245, 510)) while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() # x w x, y h y if 1080 + 175 > mouse[0] > 1080 and 640 + 60 > mouse[1] > 640: if click[0] == 1: return True, 0 if not util.tick(clock): return False
def main(screen, clock): bg = util.get_image('map_selection_background') bg = pygame.transform.scale(bg, (1280, 720)) select_button_left = util.get_image('select_button_left') select_button_left = pygame.transform.scale(select_button_left, (150, 150)) select_button_right = util.get_image('select_button_right') select_button_right = pygame.transform.scale(select_button_right, (150, 150)) play_button = util.get_image('play_button') play_button = pygame.transform.scale(play_button, (350, 150)) return_button = util.get_image('return_button') return_button = pygame.transform.scale(return_button, (175, 60)) plain_forest = util.get_image('plain_forest') plain_forest = pygame.transform.scale(plain_forest, (866, 350)) mountain_background = util.get_image('mountain_background') mountain_background = pygame.transform.scale(mountain_background, (866, 350)) screen.blit(bg, (0, 0)) screen.blit(select_button_left, (50, 280)) screen.blit(select_button_right, (1100, 280)) screen.blit(play_button, (460, 550)) screen.blit(return_button, (1080, 640)) screen.blit(plain_forest, (222, 165)) while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if 1100 + 150 > mouse[0] > 1100 and 280 + 150 > mouse[1] > 280: if click[0] == 1: screen.blit(mountain_background, (222, 165)) if 460 + 350 > mouse[0] > 460 and 550 + 150 > mouse[1] > 550: if click[0] == 1: return True, 0 if 1080 + 175 > mouse[0] > 1080 and 640 + 60 > mouse[1] > 640: if click[0] == 1: return True, 1 if not util.tick(clock): return False, -1
def main(screen, clock, counting_text): lose_screen = util.get_image('lose_screen') lose_screen = pygame.transform.scale(lose_screen, (680, 680)) screen.blit(lose_screen, (300, 20)) screen.blit(counting_text, (600, 330)) font = pygame.font.SysFont(None, 64, italic=True) item_text = font.render("2", 1, (43, 3, 9)) screen.blit(item_text, (600, 375)) return_button = util.get_image('return_button') return_button = pygame.transform.scale(return_button, (175, 60)) screen.blit(return_button, (710, 560)) while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() # x w x, y h y if 710 + 175 > mouse[0] > 710 and 560 + 60 > mouse[1] > 560: if click[0] == 1: return True, 0 if not util.tick(clock): return False
def main(screen, clock): bg = util.get_image('card_selection_background') bg = pygame.transform.scale(bg, (1280, 720)) return_button = util.get_image('return_button') return_button = pygame.transform.scale(return_button, (175, 60)) screen.blit(bg, (0, 0)) screen.blit(return_button, (1080, 640)) card_back = util.get_image('card_back', scale=(200, 208)) card_border = util.get_image('card_border', scale=(200, 208)) knight_image = util.get_image('Cards/knight', scale=(100, 100)) lance_image = util.get_image('Cards/lance', scale=(100, 100)) archer_image = util.get_image('Cards/archer', scale=(100, 100)) wizard_image = util.get_image('Cards/wizard', scale=(100, 100)) # bltting card selection list screen.blit(card_back, (145, 150)) screen.blit(card_back, (395, 150)) screen.blit(card_back, (645, 150)) screen.blit(card_back, (895, 150)) screen.blit(knight_image, (190, 185)) screen.blit(archer_image, (455, 180)) screen.blit(lance_image, (710, 180)) screen.blit(wizard_image, (960, 180)) screen.blit(card_border, (145, 150)) screen.blit(card_border, (395, 150)) screen.blit(card_border, (645, 150)) screen.blit(card_border, (895, 150)) # blitting card selection card_back = pygame.transform.scale(card_back, (90, 98)) card_border = pygame.transform.scale(card_border, (90, 98)) knight_image = pygame.transform.scale(knight_image, (45, 49)) archer_image = pygame.transform.scale(archer_image, (45, 49)) lance_image = pygame.transform.scale(lance_image, (45, 49)) wizard_image = pygame.transform.scale(wizard_image, (45, 49)) screen.blit(card_back, (120, 560)) screen.blit(card_back, (220, 560)) screen.blit(card_back, (320, 560)) screen.blit(card_back, (420, 560)) screen.blit(knight_image, (149, 590)) screen.blit(archer_image, (251, 585)) screen.blit(lance_image, (353, 585)) screen.blit(wizard_image, (451, 585)) screen.blit(card_border, (120, 560)) screen.blit(card_border, (220, 560)) screen.blit(card_border, (320, 560)) screen.blit(card_border, (420, 560)) while True: mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() # x w x, y h y if 1080 + 175 > mouse[0] > 1080 and 640 + 60 > mouse[1] > 640: if click[0] == 1: return True, 0 if not util.tick(clock): return False
def main(screen, clock): char_id[2][5] = 1 start = pygame.time.get_ticks() # time = pygame.time.Clock() # Game loop frame = 0 char_frame = 0 enemy_frame = 0 # Background X Coordinates x_g = 0 x_bg = 0 # States drag_state = (False, ) display_grid_hor = False display_grid_ver = False global enemy_state global scattered_cards global scattered_cards_anim while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return False, "-1" elif event.type == pygame.MOUSEBUTTONDOWN: pos = pygame.mouse.get_pos() if pos[1] >= 624: card_num = -1 for i in range(len(card_state)): num = len(card_state) - i - 1 if pos[0] >= num * 97 + 15: card_num = card_state[num] card_state[num] = 0 break if card_num != 0: drag_state = (True, (pos[0] - (num * 97 + 15), pos[1] - 627), card_num) if card_num == 2: display_grid_hor = True elif card_num > 3: display_grid_hor = True display_grid_ver = True else: drag_state = (False, ) else: pos = pygame.mouse.get_pos() for i in scattered_cards: if (pos[0] >= i[1] and pos[0] <= i[1] + 90 and pos[1] >= i[2] and pos[1] <= i[2] + 90): empty_card = 0 for idx, j in enumerate(card_state): if j == 0: empty_card = idx break card_state[empty_card] = -1 scattered_cards_anim.append([ i[0], empty_card, util.EaseOutSine(SCATTER_FRAMES, i[1], 97 * empty_card + 15), util.EaseOutSine(SCATTER_FRAMES, i[2], 624) ]) i[1] = -200 break elif event.type == pygame.MOUSEBUTTONUP: if drag_state[0] and drag_state[2] > 3: pos = pygame.mouse.get_pos() x_pos = -1 y_pos = -1 for i in range(len(char_id)): num = len(char_id) - i - 1 if pos[1] >= get_y_pos((0, num)): y_pos = num break for i in range(len(char_id[0])): num = len(char_id[0]) - i - 1 if (pos[0] >= (num * GRID_SPACE_HOR + 122 - y_pos * (GRID_SPACE_HOR / 5))): x_pos = num break char_id[y_pos][x_pos] = drag_state[2] - 3 drag_state = (False, ) display_grid_hor = False display_grid_ver = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_a: enemy_state[0].append([0, 1280, enemy_health[0], -1]) if event.key == pygame.K_b: enemy_state[1].append([0, 1280, enemy_health[0], -1]) if event.key == pygame.K_c: enemy_state[2].append([0, 1280, enemy_health[0], -1]) if event.key == pygame.K_d: enemy_state[3].append([0, 1280, enemy_health[0], -1]) if event.key == pygame.K_e: enemy_state[4].append([0, 1280, enemy_health[0], -1]) if event.key == pygame.K_f: scattered_cards.append([4, 1280, get_scaty()]) if event.key == pygame.K_g: scattered_cards.append([5, 1280, get_scaty()]) if event.key == pygame.K_h: scattered_cards.append([8, 1280, get_scaty()]) if event.key == pygame.K_i: scattered_cards.append([1, 1280, get_scaty()]) if event.key == pygame.K_j: scattered_cards.append([2, 1280, get_scaty()]) if event.key == pygame.K_k: scattered_cards.append([3, 1280, get_scaty()]) if event.key == pygame.K_l: scattered_cards.append([6, 1280, get_scaty()]) if event.key == pygame.K_m: enemy_state[0].append([1, 1280, enemy_health[1], -1]) if event.key == pygame.K_n: enemy_state[1].append([1, 1280, enemy_health[1], -1]) if event.key == pygame.K_o: enemy_state[2].append([1, 1280, enemy_health[1], -1]) if event.key == pygame.K_p: enemy_state[3].append([1, 1280, enemy_health[1], -1]) if event.key == pygame.K_q: enemy_state[4].append([1, 1280, enemy_health[1], -1]) if event.key == pygame.K_r: enemy_state[0].append([2, 1280, enemy_health[2], -1]) if event.key == pygame.K_s: enemy_state[1].append([2, 1280, enemy_health[2], -1]) if event.key == pygame.K_t: enemy_state[2].append([2, 1280, enemy_health[2], -1]) if event.key == pygame.K_u: enemy_state[3].append([2, 1280, enemy_health[2], -1]) if event.key == pygame.K_v: enemy_state[4].append([2, 1280, enemy_health[2], -1]) # Drag State # Update Cards screen.blit(card_inventory, (0, 0)) for ii, i in enumerate(card_state): if i > 0: screen.blit(cards[i - 1], (97 * ii + 15, 624)) # Update Frame frame += 1 if frame % CHAR_FRAMERATE == 0: char_frame = (char_frame + 1) % 4 enemy_frame = (enemy_frame + 1) % 8 # Scroll the background x_g = util.scroll(screen, ground, x_g, 2) x_bg = util.scroll(screen, game_background, x_bg, 2, 13129) # Grid if display_grid_hor: screen.blit(grid_hor, (0, BACKGROUND_HEIGHT)) if display_grid_ver: screen.blit(grid_ver, (0, BACKGROUND_HEIGHT)) # Render character and enemy for ii, (char, enem) in enumerate(zip(char_id, enemy_state)): for jj, j in enumerate(enem): if j[2] <= 0 and j[3] < 8: j[3] = 8 # if j[0] == 0 and j[3] < 8: center = j[1] attack = False for kk, k in enumerate(reversed(char)): if (k > 0 and j[1] > get_x_pos( (9 - kk, ii)) and (j[1] < get_x_pos( (9 - kk, ii)) + porc_range) and char_state[ii][9 - kk] < 4): attack = True if (frame % CHAR_FRAMERATE == 0 and j[3] != -1 and j[3] != 8 and ((enemy_frame - j[3] + 8) % 8) == 7): char_state[ii][9 - kk] = 4 break if j[3] == -1 and attack: j[3] = enemy_frame if not attack and j[3] < 8: j[3] = -1 # if j[0] == 2 and j[3] < 8: center = j[1] attack = False for kk, k in enumerate(reversed(char)): if (k > 0 and j[1] > get_x_pos( (9 - kk, ii)) and (j[1] < get_x_pos( (9 - kk, ii)) + fly_range) and char_state[ii][9 - kk] < 4): attack = True if (frame % CHAR_FRAMERATE == 0 and j[3] != -1 and j[3] != 8 and ((enemy_frame - j[3] + 7) % 7) == 6): char_state[ii][9 - kk] = 4 break if j[3] == -1 and attack: j[3] = enemy_frame if not attack and j[3] < 8: j[3] = -1 # if j[0] == 1 and j[3] < 8: center = j[1] attack = False for kk, k in enumerate(reversed(char)): if (k > 0 and j[1] > get_x_pos( (9 - kk, ii)) and (j[1] < get_x_pos( (9 - kk, ii)) + wraith_range) and char_state[ii][9 - kk] < 4): attack = True if (frame % CHAR_FRAMERATE == 0 and j[3] != -1 and j[3] != 8 and ((enemy_frame - j[3] + 8) % 8) == 7): char_state[ii][9 - kk] = 4 break if j[3] == -1 and attack: j[3] = enemy_frame if not attack and j[3] < 8: j[3] = -1 if j[3] == -1: if j[0] == 1: j[1] = util.scroll_e( screen, enemy_idle_images[j[0]][(enemy_frame - j[3] + 8) % 8], enemy_idle_offsets[j[0]] + get_y_pos( (0, ii)), j[1], 2) elif j[0] == 2: j[1] = util.scroll_e( screen, enemy_idle_images[j[0]][(enemy_frame - j[3] + 4) % 4], enemy_idle_offsets[j[0]] + get_y_pos( (0, ii)), j[1], 2) else: j[1] = util.scroll_e( screen, enemy_idle_images[j[0]], enemy_idle_offsets[j[0]] + get_y_pos( (0, ii)), j[1], 2) elif j[3] < 8: if j[0] != 2: j[1] = util.scroll_e( screen, enemy_attack_animations[j[0]][(enemy_frame - j[3] + 8) % 8], enemy_idle_offsets[j[0]] + get_y_pos( (0, ii)), j[1], 2) else: j[1] = util.scroll_e( screen, enemy_attack_animations[j[0]][(enemy_frame - j[3] + 4) % 4], enemy_idle_offsets[j[0]] + get_y_pos( (0, ii)), j[1], 2) else: j[1] = util.scroll_e(screen, enemy_faint_animations[j[3] - 8], -70 + get_y_pos((0, ii)), j[1], 0) if frame % FAINT_FRAMERATE == 0: j[3] += 1 if j[3] > 22: j[1] = -1000 j[3] = -1 for jj, j in enumerate(char): if j == 1: center = get_x_pos((jj, ii)) + GRID_SPACE_HOR / 2 attack = False for k in enem: if k[1] > center and k[1] < center + knight_range: attack = True if (frame % CHAR_FRAMERATE == 0 and char_state[ii][jj] != -1 and char_state[ii][jj] < 4 and ((char_frame - char_state[ii][jj] + 4) % 4) == 2): k[2] -= char_damage[0] break if char_state[ii][jj] == -1 and attack: char_state[ii][jj] = char_frame if not attack and char_state[ii][jj] < 4: char_state[ii][jj] = -1 elif j == 2: center = get_x_pos((jj, ii)) + GRID_SPACE_HOR / 2 attack = False for k in enem: if k[1] > center and k[1] < center + lance_range: attack = True if (frame % CHAR_FRAMERATE == 0 and char_state[ii][jj] != -1 and char_state[ii][jj] < 4 and ((char_frame - char_state[ii][jj] + 4) % 4) == 3): k[2] -= char_damage[1] break if char_state[ii][jj] == -1 and attack: char_state[ii][jj] = char_frame if not attack and char_state[ii][jj] < 4: char_state[ii][jj] = -1 elif j == 3: center = get_x_pos((jj, ii)) + GRID_SPACE_HOR / 2 attack = False for k in enem: if k[1] > center and k[1] < center + archer_range: attack = True if (frame % CHAR_FRAMERATE == 0 and char_state[ii][jj] != -1 and char_state[ii][jj] < 4 and ((char_frame - char_state[ii][jj] + 4) % 4) == 3): k[2] -= char_damage[2] break if char_state[ii][jj] == -1 and attack: char_state[ii][jj] = char_frame if not attack and char_state[ii][jj] < 4: char_state[ii][jj] = -1 elif j == 5: center = get_x_pos((jj, ii)) + GRID_SPACE_HOR / 2 attack = False for k in enem: if k[1] > center and k[1] < center + wizard_range: attack = True if (frame % CHAR_FRAMERATE == 0 and char_state[ii][jj] != -1 and char_state[ii][jj] < 4 and ((char_frame - char_state[ii][jj] + 4) % 4) == 3): k[2] -= char_damage[4] break if char_state[ii][jj] == -1 and attack: char_state[ii][jj] = char_frame if not attack and char_state[ii][jj] < 4: char_state[ii][jj] = -1 if j > 0: state = char_state[ii][jj] if state == -1: screen.blit(idle_animations[j - 1][char_frame], get_pos(char_offsets[j - 1], (jj, ii))) elif state > -1 and state < 4: screen.blit( attack_animations[j - 1][(char_frame - state + 4) % 4], get_pos(char_offsets[j - 1], (jj, ii))) else: screen.blit(faint_animations[state - 4], get_pos((110, -100), (jj, ii))) if frame % FAINT_FRAMERATE == 0: char_state[ii][jj] += 1 if char_state[ii][jj] > 29: char_id[ii][jj] = 0 char_state[ii][jj] = -1 end = pygame.time.get_ticks() counting_time = end - start counting_text = font.render( str("{:.1f}m".format(counting_time / 1000)), 1, (43, 3, 9)) screen.blit(counting_text, (10, 10)) # Check Lose if check_lose(char_id): for i in enemy_state: i.clear() scattered_cards = [] scattered_cards_anim = [] return False, counting_text # Draw Card for i in scattered_cards: i[1] = util.scroll_e(screen, cards[i[0] - 1], i[2], i[1], 2) # Update Drag if drag_state[0]: screen.blit(cards[drag_state[2] - 1], (pygame.mouse.get_pos()[0] - drag_state[1][0], pygame.mouse.get_pos()[1] - drag_state[1][1])) # Refresh enemy states if frame % 1000 == 0: for idx, i in enumerate(enemy_state): enemy_state[idx] = [j for j in i if j[1] > -100] scattered_cards = [i for i in scattered_cards if i[1] > -100] scattered_cards_anim = [ i for i in scattered_cards_anim if i[0] is not None ] # Animate scattered cards for i in scattered_cards_anim: if i[0] is not None: try: screen.blit(cards[i[0] - 1], (next(i[2]), next(i[3]))) except StopIteration: card_state[i[1]] = i[0] screen.blit(cards[i[0] - 1], (97 * i[1] + 15, 624)) i[0] = None if not util.tick(clock, False): return False, counting_text