commit
f08bef4eef
@ -0,0 +1,66 @@
|
||||
import threading
|
||||
import time
|
||||
import random
|
||||
|
||||
class BumperCar(threading.Thread):
|
||||
def __init__(self, car_id):
|
||||
super().__init__()
|
||||
self.car_id = car_id
|
||||
self.x = random.randint(0, 99)
|
||||
self.y = random.randint(0, 49)
|
||||
self.directions = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]
|
||||
|
||||
def move(self):
|
||||
direction = random.choice(self.directions)
|
||||
self.x = (self.x + direction[0]) % 100
|
||||
self.y = (self.y + direction[1]) % 50
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
time.sleep(0.1)
|
||||
self.move()
|
||||
|
||||
def visualize_grid(cars):
|
||||
grid = [['-' for _ in range(100)] for _ in range(50)]
|
||||
for car in cars:
|
||||
grid[car.y][car.x] = 'X'
|
||||
for row in grid:
|
||||
print(''.join(row))
|
||||
|
||||
def check_collisions(cars):
|
||||
collided_cars = set()
|
||||
for i in range(len(cars)):
|
||||
for j in range(i + 1, len(cars)):
|
||||
if cars[i].x == cars[j].x and cars[i].y == cars[j].y:
|
||||
collided_cars.add((cars[i].car_id, cars[j].car_id))
|
||||
return collided_cars
|
||||
|
||||
def remove_collided_cars(cars, collided_cars):
|
||||
updated_cars = []
|
||||
for car in cars:
|
||||
if car.car_id not in sum(collided_cars, ()):
|
||||
updated_cars.append(car)
|
||||
return updated_cars
|
||||
|
||||
def simulation():
|
||||
num_cars = 20
|
||||
cars = []
|
||||
for i in range(num_cars):
|
||||
cars.append(BumperCar(i))
|
||||
|
||||
for car in cars:
|
||||
car.start()
|
||||
|
||||
|
||||
while True:
|
||||
#time.sleep(1)
|
||||
print("VVV New Grid VVV")
|
||||
visualize_grid(cars)
|
||||
collided_cars = check_collisions(cars)
|
||||
if collided_cars:
|
||||
print("Collision detected between cars:", collided_cars)
|
||||
cars = remove_collided_cars(cars, collided_cars)
|
||||
time.sleep(3)
|
||||
|
||||
if __name__ == "__main__":
|
||||
simulation()
|
Loading…
Reference in new issue