turtle:objekty
car.py
from turtle import Turtle 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
main.py
from turtle import Screen from car import Car 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.txt · Poslední úprava: 2026/07/28 06:53 autor: adam