Uživatelské nástroje

Nástroje pro tento web


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