From a9bbfd08af30bb613e523a3cf926bdb967bef75f Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Tue, 30 May 2023 13:09:04 -0700 Subject: [PATCH] better turning and mask handling --- game.py | 14 ++++++++------ models.py | 9 ++++++--- util.py | 2 ++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/game.py b/game.py index c8c54c0..9de7f65 100644 --- a/game.py +++ b/game.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3.11 import pygame from models import Car, Background, Track -from util import load_image +from util import load_image, limit class Window: def __init__(self, caption, size): @@ -41,12 +41,12 @@ class Window: if pressed[pygame.K_DOWN]: self.car.speed -= 0.2 if round(self.car.speed, 1) == 0.1: self.car.speed = 0 - c = 5 - a = c / (self.car.speed + 1) + a = 5 / (abs(self.car.speed) + 1) if self.car.speed == 0: a = 0 + a = limit(a, 0, 3.5) - if pressed[pygame.K_LEFT]: self.car.angle += a - if pressed[pygame.K_RIGHT]: self.car.angle -= a + if pressed[pygame.K_LEFT] and round(self.car.speed, 2) > 0.55: self.car.angle += a + if pressed[pygame.K_RIGHT] and round(self.car.speed, 2) > 0.55: self.car.angle -= a def _process_game_logic(self): self.car.update() @@ -54,7 +54,9 @@ class Window: def _draw(self): self.screen.fill((0, 0, 0)) - self.background.draw(self.screen) + # self.background.draw(self.screen) + self.screen.blit(self.track.mask_image, (0, 0)) + self.screen.blit(self.car.mask_image, self.car.mask_rect) self.car.draw(self.screen) pygame.display.flip() self.clock.tick(60) diff --git a/models.py b/models.py index b84bbe6..388dd21 100644 --- a/models.py +++ b/models.py @@ -33,6 +33,7 @@ class Car: self.mask = mask.from_surface(self.surface) self.mask_image = self.mask.to_surface() + self.mask_rect = self.mask_image.get_rect(center = self.rect.center) self.angle = 180 self.speed = 0 @@ -44,12 +45,14 @@ class Car: def draw(self, window): self.rect.topleft = (int(self.x), int(self.y)) rotated = rotate(self.surface, self.angle) - self.mask = mask.from_surface(rotated) - self.mask_image = self.mask.to_surface() surface_rect = self.surface.get_rect(topleft = self.rect.topleft) new_rect = rotated.get_rect(center = surface_rect.center) window.blit(rotated, new_rect.topleft) + self.mask = mask.from_surface(rotated) + self.mask_image = self.mask.to_surface() + self.mask_rect = self.mask_image.get_rect(center = surface_rect.center) + class Track: def __init__(self, filename, location, size): self.image = load_image(filename).convert_alpha() @@ -62,4 +65,4 @@ class Track: def detectCar(self, car: Car): if not self.mask.overlap(car.mask, (car.x, car.y)): - print('Off Track') + pass \ No newline at end of file diff --git a/util.py b/util.py index 9d8afd8..7561beb 100644 --- a/util.py +++ b/util.py @@ -15,3 +15,5 @@ def load_image(filename: str) -> Surface: raise Exception(f'Filepath not found: \'{path}\' cannot be found') return load(path) + +def limit(num, minimum=1, maximum=255): return max(min(num, maximum), minimum)