From 3b4e7cd6f8bdd5ca096aa3a1ec2c7ed5116c7946 Mon Sep 17 00:00:00 2001 From: alexandre Date: Wed, 9 Oct 2019 14:53:05 +0200 Subject: [PATCH] car has sensors --- main.py | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 71e1388..0e1de30 100755 --- a/main.py +++ b/main.py @@ -1,11 +1,12 @@ +#!/usr/bin/env python import pygame from pygame.locals import HWSURFACE, DOUBLEBUF import math FLAGS= HWSURFACE | DOUBLEBUF #| FULLSCREEN -GX = 450 -GY = 450 +GX = 800 +GY = 800 CELL_COLOR = (80,80,80) CAR_SIZE=50 pygame.init() @@ -32,20 +33,42 @@ class Car(pygame.sprite.Sprite): self.speed = 5 self.heading = 0 self.heading_change = 0 + self.vision_length = 200 # line liength + self.vision_span = 22 # degrees + self.draw_sensors=True + # lets add 3 sensors as a start + # 1 straight ahead + # 2 left 15° + # 3 right 15 ° + # we will give each of them a max lenght to + # and we will eventually detect any line crossing the sensor and + # retain the min value as a distance to collision input + self.update_sensors() + + def update_sensors(self): + center = self.rect.center + vc = angle_to_vector(self.heading) + self.center_sensor = [center, [self.vision_length * vc[0] + center[0], -self.vision_length * vc[1] + center[1]]] + + vl = angle_to_vector(self.heading+self.vision_span) + self.left_sensor = [center, [self.vision_length * vl[0] + center[0], -self.vision_length * vl[1] + center[1]]] + + vr = angle_to_vector(self.heading-self.vision_span) + self.right_sensor = [center, [self.vision_length * vr[0] + center[0], -self.vision_length * vr[1] + center[1]]] - # def draw(self,screen): - # # self.surface.blit(self.image, (0,0)) - # screen.blit(self.surface, self.rect.center) def update_position(self): vec = angle_to_vector(self.heading) old_center = self.rect.center self.rect.center = (self.speed * vec[0] + old_center[0], -self.speed * vec[1] + old_center[1]) - # print(self.rect.center) + self.update_sensors() + if self.draw_sensors: + pygame.draw.line(screen, (255,0,0), self.center_sensor[0], self.center_sensor[1]) + pygame.draw.line(screen, (0,255,0), self.left_sensor[0], self.left_sensor[1]) + pygame.draw.line(screen, (0,0,255), self.right_sensor[0], self.right_sensor[1]) def update(self): - # rotate old_center = self.rect.center self.image = pygame.transform.rotate(self.original_image, self.heading) @@ -55,8 +78,6 @@ class Car(pygame.sprite.Sprite): self.heading += self.heading_change self.heading = self.heading % 360 - # self.rect = self.image.get_rect(center=self.rect.center) - # self.rect.x += self.speed screen = pygame.display.set_mode((GX, GY), FLAGS)