main.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import pygame
  2. # pygame setup
  3. pygame.init()
  4. screen = pygame.display.set_mode((1280, 720))
  5. clock = pygame.time.Clock()
  6. running = True
  7. dt = 0
  8. force_coef = 10
  9. player_applied_force = pygame.Vector2(0, 0)
  10. player_mass = 1
  11. player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
  12. player_speed = pygame.Vector2(0, 0)
  13. raketa = pygame.image.load("raketa.png").convert_alpha()
  14. def draw_arrow(surface, color, start, end, width=3):
  15. pygame.draw.line(surface, color, start, end, width)
  16. direction = (end - start).normalize()
  17. arrow_size = 10
  18. perpendicular = pygame.Vector2(-direction.y, direction.x)
  19. point1 = end - direction * arrow_size + perpendicular * arrow_size / 2
  20. point2 = end - direction * arrow_size - perpendicular * arrow_size / 2
  21. pygame.draw.polygon(surface, color, [end, point1, point2])
  22. while running:
  23. for event in pygame.event.get():
  24. if event.type == pygame.QUIT:
  25. running = False
  26. screen.fill("purple")
  27. angle = player_speed.angle_to(pygame.Vector2(0, -1))
  28. rotated_raketa = pygame.transform.rotate(raketa, angle)
  29. raketa_rect = rotated_raketa.get_rect(center=player_pos)
  30. screen.blit(rotated_raketa, raketa_rect)
  31. player_applied_force = pygame.Vector2(0, 0)
  32. keys = pygame.key.get_pressed()
  33. if keys[pygame.K_w]:
  34. player_applied_force.y -= force_coef
  35. if keys[pygame.K_s]:
  36. player_applied_force.y += force_coef
  37. if keys[pygame.K_a]:
  38. player_applied_force.x -= force_coef
  39. if keys[pygame.K_d]:
  40. player_applied_force.x += force_coef
  41. acceleration = player_applied_force / player_mass
  42. player_speed += acceleration * dt
  43. player_pos += player_speed * dt
  44. # Draw force arrow
  45. if player_applied_force.length() > 0:
  46. arrow_end = player_pos + player_applied_force * 2
  47. draw_arrow(screen, "yellow", player_pos, arrow_end)
  48. # Draw speed arrow
  49. if player_speed.length() > 0:
  50. arrow_end = player_pos + player_speed * 2
  51. draw_arrow(screen, "cyan", player_pos, arrow_end)
  52. pygame.display.flip()
  53. dt = clock.tick(60) / 1000
  54. pygame.quit()