main.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 = 20
  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_original = pygame.image.load("raketa.png").convert_alpha()
  14. raketa = pygame.transform.scale(raketa_original, (raketa_original.get_width() // 3, raketa_original.get_height() // 3))
  15. def draw_arrow(surface, color, start, end, width=3):
  16. pygame.draw.line(surface, color, start, end, width)
  17. direction = (end - start).normalize()
  18. arrow_size = 10
  19. perpendicular = pygame.Vector2(-direction.y, direction.x)
  20. point1 = end - direction * arrow_size + perpendicular * arrow_size / 2
  21. point2 = end - direction * arrow_size - perpendicular * arrow_size / 2
  22. pygame.draw.polygon(surface, color, [end, point1, point2])
  23. def rescale_rocket(raketa, speed):
  24. scale_factor = 1 + player_speed.length() * 0.01
  25. raketa_w, raketa_h = raketa.get_size()
  26. raketa_w *= scale_factor
  27. raketa_h /= scale_factor
  28. scaled_raketa = pygame.transform.scale(raketa, (raketa_h, raketa_w))
  29. return scaled_raketa
  30. while running:
  31. for event in pygame.event.get():
  32. if event.type == pygame.QUIT:
  33. running = False
  34. screen.fill("purple")
  35. angle = player_speed.angle_to(pygame.Vector2(0, -1))
  36. scaled_raketa = rescale_rocket(raketa, player_speed)
  37. rotated_raketa = pygame.transform.rotate(scaled_raketa, angle)
  38. raketa_rect = rotated_raketa.get_rect(center=player_pos)
  39. screen.blit(rotated_raketa, raketa_rect)
  40. player_applied_force = pygame.Vector2(0, 0)
  41. keys = pygame.key.get_pressed()
  42. if keys[pygame.K_w]:
  43. player_applied_force.y -= force_coef
  44. if keys[pygame.K_s]:
  45. player_applied_force.y += force_coef
  46. if keys[pygame.K_a]:
  47. player_applied_force.x -= force_coef
  48. if keys[pygame.K_d]:
  49. player_applied_force.x += force_coef
  50. if player_applied_force.length() > 0:
  51. player_applied_force.scale_to_length(force_coef)
  52. acceleration = player_applied_force / player_mass
  53. player_speed += acceleration * dt
  54. player_pos += player_speed * dt
  55. # Draw force arrow
  56. if player_applied_force.length() > 0:
  57. arrow_end = player_pos + player_applied_force * 2
  58. draw_arrow(screen, "yellow", player_pos, arrow_end)
  59. # Draw speed arrow
  60. if player_speed.length() > 0:
  61. arrow_end = player_pos + player_speed * 2
  62. draw_arrow(screen, "cyan", player_pos, arrow_end)
  63. pygame.display.flip()
  64. dt = clock.tick(60) / 1000
  65. pygame.quit()