import pygame import sys import random import objects import math class Player(): def __init__(self, x, y): image_path = "assets/Sprites/Characters/Default/character_green_walk_a.png" image_path2 = "assets/Sprites/Characters/Default/character_green_walk_b.png" self.image1 = pygame.image.load(image_path).convert_alpha() self.image2 = pygame.image.load(image_path2).convert_alpha() self.rect = self.image1.get_rect() self.pos = pygame.Vector2(x, y) self.velocity = pygame.Vector2(0, 0) self.acceleration = pygame.Vector2(0, 0) self.on_ground = False self.speed = 20 self.jump_strength = -300 self.current_image = 0 self.image = self.image1 self.frame_counter = 0 self.animation_speed = 30 def animate(self): game_fps = 15 self.frame_counter += 1 if self.frame_counter>=game_fps: if self.current_image == 0: self.current_image = 1 else: self.current_image = 0 self.frame_counter = 0 if self.current_image == 0: self.image = self.image1 else: self.image = self.image2 def update(self): #self.velocity.x *= 0.5 print("updating---", self.pos, self.velocity, self.acceleration) def show(self, surface): surface.blit(self.image, self.rect) def apply_force(self, force_x, force_y): self.acceleration.x += force_x self.acceleration.y += force_y def move(self): self.velocity += self.acceleration if self.on_ground: self.velocity.y = 0 self.pos.y = 600 print("moving---", self.acceleration, self.velocity) self.pos += self.velocity # Update the rect position self.rect.bottomleft = self.pos self.velocity *=0.85 class Game(): def __init__(self): self.height = 760 self.width = 1280 self.window = pygame.display.set_mode((self.width, self.height)) self.window_rect = self.window.get_rect() self.clock = pygame.time.Clock() self.window.set_colorkey((35, 35, 35)) self.debug_grid = True self.background = (35, 35, 35) self.player = Player(100, 100) self.dt = 0 def main(self): self.event_handler() self.blit() def event_handler(self): """ This method handles mouse and keyboard events for the scene and passes them on as is needed. """ for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit(0) keys = pygame.key.get_pressed() direction_x = 0 direction_y = 0 if keys[pygame.K_d]: direction_x += 1 self.player.apply_force(direction_x, direction_y) if keys[pygame.K_a]: direction_x -= 1 self.player.apply_force(direction_x, direction_y) if keys[pygame.K_SPACE]: direction_y += self.player.jump_strength/60 self.player.on_ground = False self.player.apply_force(direction_x, direction_y) if self.player.pos.y <= 600: print("falling") direction_y += 1 self.player.apply_force(direction_x, direction_y) else: self.player.on_ground = True self.player.move() def update(self, events): pass def blit(self): self.window.fill(self.background) if self.debug_grid: for y in range(1, int(self.window_rect.height/32) + 1): pygame.draw.line(self.window, (150, 150, 150), (0, y * 32), (self.window_rect.width, y * 32)) for x in range(1, int(self.window_rect.width/32) + 1): pygame.draw.line(self.window, (150, 150, 150), (x * 32, 0), (x * 32, self.window_rect.height)) pygame.draw.line(self.window, (255, 0, 0), (0, 600), (1280, 600)) self.player.animate() self.player.show(self.window) self.player.update() pygame.display.flip() self.clock.tick(60) self.dt = self.clock.tick(60) / 1000 pygame.display.set_caption('Physics galore!') pygame.init() pygame.font.init() scene = Game() while scene is not None: scene.main()