import pygame, sys, math, random class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((width,height)) self.rect = self.image.get_rect(center = (screen_width/2,screen_height/2)) def rotate(surface,angle): rotated_surface = pygame.transform.rotozoom(surface,angle,1) rotated_rect = rotated_surface.get_rect(center= (920,800)) return rotated_surface,rotated_rect pygame.init() clock = pygame.time.Clock() screen_width, screen_height = 1900,1060 screen = pygame.display.set_mode((screen_width, screen_height)) standing_surface = pygame.transform.scale(pygame.image.load("player_square.png"), (40, 40)) jumping_surface = pygame.transform.scale(pygame.image.load("player_square.png"), (40, 40)) sword_weapon = pygame.image.load("player_sword.png").convert_alpha() background = pygame.image.load("menu_background_space.jpg") player_walking_image = standing_surface.copy() pygame.display.set_caption("Moving rectangle") pygame.mouse.set_visible(True) # pos, height, jumping, and gravity pos_x, pos_y = 920, 800 width = 0 height = 0 vel = 20 jumping = False y_gravity = 1 jump_height = 20 y_velocity = jump_height player_jumping = pygame.Surface((0,0)) #player groups player = Player() player_group = pygame.sprite.Group() player_group.add(player) jump_sfx = pygame.mixer.Sound("jump_sound.mp3") pos = pygame.mouse.get_pos() x_dist = pos[0] - width y_dist = -(pos[1] - height) angle = math.degrees(math.atan2(y_dist,x_dist)) sword = pygame.transform.rotate(sword_weapon, angle - 90) sword_rect = sword.get_rect(center = (width, height)) player_rect = standing_surface.get_rect(center=(920,800)) screen.blit(sword, sword_rect) angle = 0 #main code running = True while running: pygame.time.delay(10) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit() sys.exit() #keybind keys_pressed = pygame.key.get_pressed() if keys_pressed[pygame.K_SPACE]: jumping = True pygame.mixer.music.load('jump_sound.mp3') pygame.mixer.music.play() angle -= 15 screen.blit(background, (0, 0)) #sprite jumping keybind if jumping: pos_y -= y_velocity y_velocity -= y_gravity if y_velocity < -jump_height: jumping = False y_velocity = jump_height player_rect = jumping_surface.get_rect(center=(pos_x, pos_y)) screen.blit(jumping_surface, player_rect) else: player_rect = standing_surface.get_rect(center=(pos_x, pos_y)) screen.blit(standing_surface, player_rect) if keys_pressed[pygame.K_a] and pos_x > 0: pos_x -= vel elif keys_pressed[pygame.K_d] and pos_x < 1900 - width: pos_x += vel angle %= 360 rotated_image = pygame.transform.rotate(player_walking_image, angle) player_rect = rotated_image.get_rect(center=player_rect.center) screen.blit(background, (0, 0)) screen.blit(rotated_image, player_rect) pygame.draw.rect(screen, (0,255,0),(pos_x, pos_y, width, height)) pygame.display.update() pygame.display.flip() clock.tick(120)