Explorar el Código

circle movement

michal.korcak hace 1 mes
commit
b96489c61c
Se han modificado 1 ficheros con 65 adiciones y 0 borrados
  1. 65 0
      main.py

+ 65 - 0
main.py

@@ -0,0 +1,65 @@
+import pygame
+
+# pygame setup
+pygame.init()
+screen = pygame.display.set_mode((1280, 720))
+clock = pygame.time.Clock()
+running = True
+dt = 0
+
+force_coef = 10
+player_applied_force = pygame.Vector2(0, 0)
+player_mass = 1
+player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
+player_speed = pygame.Vector2(0, 0)
+
+
+def draw_arrow(surface, color, start, end, width=3):
+    pygame.draw.line(surface, color, start, end, width)
+    direction = (end - start).normalize()
+    arrow_size = 10
+    perpendicular = pygame.Vector2(-direction.y, direction.x)
+    point1 = end - direction * arrow_size + perpendicular * arrow_size / 2
+    point2 = end - direction * arrow_size - perpendicular * arrow_size / 2
+    pygame.draw.polygon(surface, color, [end, point1, point2])
+
+
+while running:
+    for event in pygame.event.get():
+        if event.type == pygame.QUIT:
+            running = False
+
+    screen.fill("purple")
+
+    pygame.draw.circle(screen, "red", player_pos, 40)
+
+    player_applied_force = pygame.Vector2(0, 0)
+
+    keys = pygame.key.get_pressed()
+    if keys[pygame.K_w]:
+        player_applied_force.y -= force_coef
+    if keys[pygame.K_s]:
+        player_applied_force.y += force_coef
+    if keys[pygame.K_a]:
+        player_applied_force.x -= force_coef
+    if keys[pygame.K_d]:
+        player_applied_force.x += force_coef
+
+    acceleration = player_applied_force / player_mass
+    player_speed += acceleration * dt
+    player_pos += player_speed * dt
+
+    # Draw force arrow
+    if player_applied_force.length() > 0:
+        arrow_end = player_pos + player_applied_force * 2
+        draw_arrow(screen, "yellow", player_pos, arrow_end)
+
+    # Draw speed arrow
+    if player_speed.length() > 0:
+        arrow_end = player_pos + player_speed * 2
+        draw_arrow(screen, "cyan", player_pos, arrow_end)
+
+    pygame.display.flip()
+    dt = clock.tick(60) / 1000
+
+pygame.quit()