diff --git a/images/back_main.jpg b/images/back_main.jpg new file mode 100644 index 0000000..eab2e3c Binary files /dev/null and b/images/back_main.jpg differ diff --git a/images/back_main.png b/images/back_main.png deleted file mode 100644 index d5917e4..0000000 Binary files a/images/back_main.png and /dev/null differ diff --git a/images/play_button.png b/images/play_button.png new file mode 100644 index 0000000..ea9f4b2 Binary files /dev/null and b/images/play_button.png differ diff --git a/main.py b/main.py index 7727a0e..61440d1 100644 --- a/main.py +++ b/main.py @@ -6,19 +6,43 @@ CLOCK = pygame.time.Clock() SCREEN = pygame.display.set_mode((1000, 800)) BLACK = (0,0,0) BACKGROUND = pygame.image.load("images/back.png") +BACK_MAIN = pygame.image.load("images/back_main.jpg") +BACK_MAIN = pygame.transform.scale(BACK_MAIN, (1000, 800)).convert_alpha() +level = 0 -G_X, G_Y = 100, 800 -G_GRAVITY = 1 -G_JUMP_HEIGHT = 20 -g_y_velocity = 20 -g_jumping = False + +class Goblin: + def __init__(self): + self.x = 100 + self.y = 800 + self.gravity = 1 + self.jump_height = 20 + self.y_velocity = 20 + self.jumping = False + self.start_x = 100 + self.start_y = 800 + + def reset_position(self): + self.x = self.start_x + self.y = self.start_y g_facing_right = True -K_X, K_Y = 300, 700 -K_GRAVITY = 1 -K_JUMP_HEIGHT = 20 -k_y_velocity = 20 -k_jumping = False +class Knight: + def __init__(self): + self.x = 300 + self.y = 700 + self.gravity = 1 + self.jump_height = 20 + self.y_velocity = 20 + self.jumping = False + + self.start_x = 300 + self.start_y = 700 + + def reset_position(self): + self.x = self.start_x + self.y = self.start_y + k_facing_right = True def get_image(sheet,frame_w, frame_h, width, height, scale, color): @@ -58,6 +82,9 @@ wall_left = pygame.Rect(0, 0, 1, 800) wall_bottom = pygame.Rect(0, 800, 1000, 1) wall_up = pygame.Rect(0, 0, 1000, 1) +#BUTTONS +button_play = pygame.image.load("images/play_button.png") +button_play_rect = button_play.get_rect(center=(500, 400)) #PLATFORM platform_image = pygame.image.load("images/sprites/platforms.png") platform = get_image(platform_image, 0, 0, 16, 9, 3, BLACK) @@ -76,9 +103,10 @@ while True: sys.exit() keys_pressed = pygame.key.get_pressed() - - prev_G_Y = G_Y - prev_K_Y = K_Y + mouse_pos = pygame.mouse.get_pos() + + SCREEN.fill((0,0,0)) + g_moving = False if keys_pressed[pygame.K_d]: @@ -93,7 +121,6 @@ while True: g_jumping = True g_y_velocity = G_JUMP_HEIGHT - k_moving = False if keys_pressed[pygame.K_KP6]: K_X += 5 @@ -107,28 +134,30 @@ while True: k_jumping = True k_y_velocity = K_JUMP_HEIGHT + # Goblin + g_y_velocity -= G_GRAVITY + G_Y -= g_y_velocity - SCREEN.blit(wall_image, wall_right) - SCREEN.blit(wall_image, wall_left) - SCREEN.blit(wall_image, wall_up) - SCREEN.blit(wall_image, wall_bottom) - SCREEN.blit(BACKGROUND, (0, 0)) - SCREEN.blit(door_image, door_rect) - SCREEN.blit(platform, platform_rect) - - if g_jumping: - G_Y -= g_y_velocity - g_y_velocity -= G_GRAVITY - if g_y_velocity < -G_JUMP_HEIGHT: - g_jumping = False - g_y_velocity = G_JUMP_HEIGHT + # Knight + k_y_velocity -= K_GRAVITY + K_Y -= k_y_velocity - if k_jumping: - K_Y -= k_y_velocity - k_y_velocity -= K_GRAVITY - if k_y_velocity < -K_JUMP_HEIGHT: - k_jumping = False - k_y_velocity = K_JUMP_HEIGHT + if G_X < 0: G_X = 0 + if G_X > 1000: G_X = 1000 + + if K_X < 0: K_X = 0 + if K_X > 1000: K_X = 1000 + + # Пол + if G_Y >= 800: + G_Y = 800 + g_y_velocity = 0 + g_jumping = False + + if K_Y >= 800: + K_Y = 800 + k_y_velocity = 0 + k_jumping = False g_anim_counter = g_anim_counter + 1 if g_moving else 0 k_anim_counter = k_anim_counter + 1 if k_moving else 0 @@ -142,11 +171,11 @@ while True: g_surface = STANDING_SURFACE if not g_facing_right: - g_surface = pygame.transform.flip(g_surface, True, False).convert_alpha() + g_surface = pygame.transform.flip(g_surface, True, False) + g_surface.set_colorkey(BLACK) g_rect = g_surface.get_rect(center=(G_X, G_Y)) - if k_jumping: up_thresh = K_JUMP_HEIGHT // 3 down_thresh = -up_thresh @@ -163,59 +192,44 @@ while True: k_surface = K_STAND if not k_facing_right: - k_surface = pygame.transform.flip(k_surface, True, False).convert_alpha() + k_surface = pygame.transform.flip(k_surface, True, False) + k_surface.set_colorkey(BLACK) k_rect = k_surface.get_rect(center=(K_X, K_Y)) - - if g_rect.colliderect(wall_right): - G_X -= 5 - if g_rect.colliderect(wall_left): - G_X += 5 - if g_rect.colliderect(wall_bottom): - G_Y -= 5 - if g_rect.colliderect(wall_up): - G_Y += 5 - if k_rect.colliderect(wall_right): - K_X -= 5 - if k_rect.colliderect(wall_left): - K_X += 5 + if level == 0: + SCREEN.blit(BACK_MAIN, (0, 0)) + SCREEN.blit(button_play, button_play_rect) - # Goblin - if g_rect.colliderect(platform_rect): - if g_y_velocity < 0: - G_Y = platform_rect.top - (g_rect.height / 2) + if button_play_rect.collidepoint(mouse_pos) and pygame.mouse.get_pressed()[0]: + level = 1 + if level == 1: + SCREEN.blit(BACKGROUND, (0, 0)) + SCREEN.blit(door_image, door_rect) + SCREEN.blit(platform, platform_rect) + SCREEN.blit(g_surface, g_rect) + SCREEN.blit(k_surface, k_rect) + # Goblin + if g_rect.colliderect(platform_rect) and g_y_velocity <= 0: + G_Y = platform_rect.top - g_rect.height / 2 + g_y_velocity = 0 g_jumping = False - g_y_velocity = 0 - else: - G_Y = platform_rect.bottom + (g_rect.height / 2) - g_y_velocity = 0 - else: - pass - # Knight - if k_rect.colliderect(platform_rect): - if k_y_velocity < 0: - K_Y = platform_rect.top - (k_rect.height / 2) + # Knight + if k_rect.colliderect(platform_rect) and k_y_velocity <= 0: + K_Y = platform_rect.top - k_rect.height / 2 + k_y_velocity = 0 k_jumping = False - k_y_velocity = 0 - else: - K_Y = platform_rect.bottom + (k_rect.height / 2) - k_y_velocity = 0 - else: - pass - SCREEN.blit(g_surface, g_rect) - SCREEN.blit(k_surface, k_rect) - if g_rect.colliderect(door_rect) and keys_pressed[pygame.K_e]: - print("Goblin wins!") - pygame.quit() - sys.exit() - if k_rect.colliderect(door_rect) and keys_pressed[pygame.K_KP5]: - print("Knight wins!") - pygame.quit() - sys.exit() + if g_rect.colliderect(door_rect) and keys_pressed[pygame.K_e]: + print("Goblin wins!") + level = 0 + + if k_rect.colliderect(door_rect) and keys_pressed[pygame.K_KP5]: + print("Knight wins!") + level = 0 + pygame.display.update() pygame.display.update() CLOCK.tick(60) \ No newline at end of file