comit before rollback

This commit is contained in:
2019-10-31 15:11:11 +01:00
parent 2e27d4a0c4
commit f9001ed8b3

26
car.py
View File

@@ -49,7 +49,7 @@ class Car(pygame.sprite.Sprite):
self.left_sensor = None self.left_sensor = None
self.right_sensor = None self.right_sensor = None
self.sensors = [self.left_sensor, self.center_sensor, self.right_sensor] self.sensors = [self.left_sensor, self.center_sensor, self.right_sensor]
self.probes = [self.vision_length] * 3 self.probes = [1] * 3
if brain: if brain:
self.brain = brain self.brain = brain
@@ -69,7 +69,7 @@ class Car(pygame.sprite.Sprite):
75 - int(random.random() * 20) - 10, 75 - int(random.random() * 20) - 10,
GY - 50 - int(random.random() * 20) - 10, GY - 50 - int(random.random() * 20) - 10,
) )
self.speed = 1 self.speed = 10
self.heading = random.random() * 20 self.heading = random.random() * 20
self.heading_change = random.random() * 30 self.heading_change = random.random() * 30
@@ -116,7 +116,7 @@ class Car(pygame.sprite.Sprite):
def probe_lines_proximity(self, lines): def probe_lines_proximity(self, lines):
# print(self.center_sensor, lines[0]) # print(self.center_sensor, lines[0])
self.probes = [self.vision_length * 2] * 3 self.probes = [1] * 3
for idx, sensor in enumerate( for idx, sensor in enumerate(
[self.left_sensor, self.center_sensor, self.right_sensor] [self.left_sensor, self.center_sensor, self.right_sensor]
): ):
@@ -126,22 +126,20 @@ class Car(pygame.sprite.Sprite):
if ip: if ip:
if self.draw_sensors: if self.draw_sensors:
pygame.draw.circle(screen, (125, 125, 255), ip, 4, 2) pygame.draw.circle(screen, (125, 125, 255), ip, 4, 2)
dist = int(distance(ip, self.rect.center)) dist = distance(ip, self.rect.center)
self.probes[idx] = min(dist, self.probes[idx]) self.probes[idx] = min(dist / self.vision_length, self.probes[idx])
if dist < 1 * self.speed or self.speed < 0.01: if dist < 5 * self.speed or self.speed < 1:
self.run = False self.run = False
self.speed = 0 self.speed = 0
# print(f'Car {id(self)} crashed') # print(f'Car {id(self)} crashed')
return return
else:
self.probes[idx] = self.vision_length * 1.1
# print(self.probes) # print(self.probes)
def probe_brain(self): def probe_brain(self):
res = self.brain.predict(np.array(self.probes + [self.speed])) res = self.brain.predict(np.array(self.probes + [self.speed]))
self.heading_change = res[0] * 30 self.heading_change = res[0]
self.throttle = res[1] * 5 self.throttle = res[1]
def update(self): def update(self):
# rotate # rotate
@@ -172,14 +170,10 @@ class Car(pygame.sprite.Sprite):
self.heading += self.heading_change * CAR_STEERING_FACTOR / self.speed self.heading += self.heading_change * CAR_STEERING_FACTOR / self.speed
self.heading = self.heading % 360 self.heading = self.heading % 360
self.speed += self.throttle # THROTTLE_POWER self.speed += self.throttle # * THROTTLE_POWER
# if self.throttle :
# self.speed += self.throttle #THROTTLE_POWER
# else :
# self.speed -= self.throttle #THROTTLE_POWER
self.speed = max(0, self.speed) self.speed = max(0, self.speed)
self.speed = min(self.speed, CAR_MAX_SPEED) self.speed = min(self.speed, CAR_MAX_SPEED)
print("speed", self.speed)
super().update() super().update()