turtle:objekty
Toto je starší verze dokumentu!
car.py
from turtle import Turtle, Screen import random class Car(Turtle): def __init__( self, screen, controls=None, max_speed=8, acceleration=0.3, steering=4, friction=0.95, ): super().__init__("triangle") self.screen = screen # Physics self.speed = 0.0 self.max_speed = max_speed self.acceleration = acceleration self.steering = steering self.friction = friction # Input state self.forward_pressed = False self.backward_pressed = False self.left_pressed = False self.right_pressed = False # Keyboard control or AI? self.controls = controls self.ai = controls is None if controls: self._bind_controls() def _bind_controls(self): keys = self.controls self.screen.onkeypress( lambda: setattr(self, "forward_pressed", True), keys["forward"] ) self.screen.onkeyrelease( lambda: setattr(self, "forward_pressed", False), keys["forward"] ) self.screen.onkeypress( lambda: setattr(self, "backward_pressed", True), keys["backward"] ) self.screen.onkeyrelease( lambda: setattr(self, "backward_pressed", False), keys["backward"] ) self.screen.onkeypress( lambda: setattr(self, "left_pressed", True), keys["left"] ) self.screen.onkeyrelease( lambda: setattr(self, "left_pressed", False), keys["left"] ) self.screen.onkeypress( lambda: setattr(self, "right_pressed", True), keys["right"] ) self.screen.onkeyrelease( lambda: setattr(self, "right_pressed", False), keys["right"] ) def update(self): """Update one frame.""" if self.ai: self._random_driver() # Acceleration if self.forward_pressed: self.speed += self.acceleration if self.backward_pressed: self.speed -= self.acceleration # Clamp speed self.speed = max(-self.max_speed / 2, min(self.speed, self.max_speed)) # Friction self.speed *= self.friction # Steering depends on speed turn = self.steering * (abs(self.speed) / self.max_speed) if self.left_pressed: self.left(turn) if self.right_pressed: self.right(turn) self.forward(self.speed) def _random_driver(self): """Simple random AI.""" self.forward_pressed = random.random() < 0.85 self.backward_pressed = random.random() < 0.02 self.left_pressed = random.random() < 0.05 self.right_pressed = random.random() < 0.05
screen = Screen()
screen.setup(700, 700)
screen.tracer(False)
player = Car(
screen,
controls={
"forward": "w",
"backward": "s",
"left": "a",
"right": "d",
},
)
enemy = Car(screen) # Random driver
enemy.color("red")
enemy.goto(100, 100)
screen.listen()
def game_loop():
player.update()
enemy.update()
screen.update()
screen.ontimer(game_loop, 16) # ~60 FPS
game_loop()
screen.mainloop()
turtle/objekty.1785221424.txt.gz · Poslední úprava: 2026/07/28 06:50 autor: adam