99from stopwatch import Stopwatch
1010from booster import Booster
1111from boosterType import BoosterType
12-
13-
14- def new_collision_place (x ,y , wall : Wall , car : Car ):
15- options = []
16-
17- distance_right_wall = abs (x - wall .rect .right )
18- options .append ((distance_right_wall , "distance_right_wall" ))
19-
20- distance_left_wall = abs (x - wall .rect .left )
21- options .append ((distance_left_wall , "distance_left_wall" ))
22-
23- distance_bottom_wall = abs (y - wall .rect .bottom )
24- options .append ((distance_bottom_wall , "distance_bottom_wall" ))
25-
26- distance_top_wall = abs (y - wall .rect .top )
27- options .append ((distance_top_wall , "distance_top_wall" ))
28-
29- best = (float ('inf' ), None )
30- for dist in options :
31- if best [0 ] > dist [0 ]:
32- best = dist
33-
34- #print(best)
35-
36- if best [1 ] == "distance_right_wall" : # OK
37- #car.position.set_x(wall.rect.right)
38- return Vector2D (wall .rect .right , y )
39-
40- elif best [1 ] == "distance_left_wall" :
41- #car.position.set_x(wall.rect.left)
42- return Vector2D (wall .rect .left - car .rect .w , y )
43-
44- elif best [1 ] == "distance_bottom_wall" : # OK
45- #car.position.set_y(wall.rect.bottom)
46- return Vector2D (x , wall .rect .bottom )
47-
48- else :
49- #car.position.set_y(wall.rect.top)
50- return Vector2D (x , wall .rect .top - car .rect .h )
12+ from math import sin , cos , radians
5113
5214
5315class Engine :
@@ -60,8 +22,8 @@ def __init__(self, refresh_rate):
6022 self .clock = pg .time .Clock ()
6123
6224 #move to map
63- self .all_walls = pg .sprite .Group ()
64- self .all_surfaces = pg .sprite .Group ()
25+ # self.all_walls = pg.sprite.Group()
26+ # self.all_surfaces = pg.sprite.Group()
6527
6628 #it would be nice if booster stayed here
6729 self .all_boosters = pg .sprite .Group ()
@@ -79,67 +41,55 @@ def start_timer(self):
7941 return stopwatch
8042
8143 def run (self ):
82- wall1 = Wall (Vector2D (250 , 300 ), 60 , 60 , False )
83- self .all_walls .add (wall1 ) # beginning of sprites
84- wall2 = Wall (Vector2D (20 , 150 ), 60 , 20 , True )
85- self .all_walls .add (wall2 ) # beginning of sprites
86-
87- surface1 = Surface (Vector2D (150 , 20 ), 100 , 50 , SurfaceType .ASPHALT )
88- self .all_surfaces .add (surface1 )
89- surface2 = Surface (Vector2D (400 , 200 ), 100 , 80 , SurfaceType .ICE )
90- self .all_surfaces .add (surface2 )
91-
9244 #temporarily for boosters
93- booster1 = Booster (Vector2D (700 , 700 ), 30 , "dt" ,BoosterType .SPEED , self .clock .tick (self .refresh ))
94- self .all_boosters .add (booster1 )
95-
45+ # booster1 = Booster(Vector2D(700, 700), 30, "dt",BoosterType.SPEED, self.clock.tick(self.refresh))
46+ # self.all_boosters.add(booster1)
9647
9748 traction = 0.15
9849
99- car = Car (0 , Vector2D (10 , 10 ), 0 , 0 , 10 , 200 )
10050 # car_img = pg.image.load("./data/car.png") #done temporarily inside the car class
51+
10152 x , y = self .screen .get_size ()
102- curr_map = Map (0 , x , y , car , None , None )
53+
54+ curr_map = Map (0 , x , y )
10355 map_img = pg .image .load ("./data/grass.png" )
56+ curr_map .place_objects ()
57+
58+ car = Car (0 , Vector2D (10 , 10 ), 0 , 0 , 10 , 50 , curr_map )
59+
10460 run = True
10561 stopwatch = self .start_timer ()
10662
10763 while run :
10864 dt = self .clock .tick (self .refresh )
10965 self .screen .blit (map_img , (0 , 0 ))
11066
111- self .all_surfaces .draw (self .screen )
112- self .all_surfaces .update ()
67+ curr_map .all_surfaces .draw (self .screen )
68+ curr_map .all_surfaces .update ()
11369
11470 #self.screen.blit(car.image, (car.position.x, car.position.y))
11571 #self.all_cars.draw(self.screen)
11672 #added
11773
118- self .all_walls .draw (self .screen )
119- self .all_walls .update ()
74+ curr_map .all_walls .draw (self .screen )
75+ curr_map .all_walls .update ()
12076
121- car .update (dt )
12277 car .move (dt ) # maybe car also should be coded as a sprite???
78+ car .update (dt )
12379
12480 self .screen .blit (car .image , (car .position .x , car .position .y ))
12581
126- collisions = pg .sprite .spritecollide (car , self .all_walls , False )
127- if collisions : # it's a list of objects/sprites that collided with the car
128- for col in collisions :
129- car .position = new_collision_place (car .position .x , car .position .y , col , car )
130- car .speed = - car .speed * traction # well the setter is needed
131-
132- slides = pg .sprite .spritecollide (car , self .all_surfaces , False )
133- if slides :
134- #print("surface here")
135- for slide in slides :
136- traction = slide .adjust_fraction ()
137-
138- #collisions with boosters
139- pick_ups = pg .sprite .spritecollide (car , self .all_boosters , False ) #maybe in this case it can be set to true
140- if pick_ups :
141- for boost in pick_ups :
142- pass #activate booster!
82+ test1 = Surface (Vector2D (car .rect .x , car .rect .y ), 10 , 10 , SurfaceType .ICE )
83+ self .screen .blit (test1 .image , test1 .rect .center )
84+
85+ test2 = Surface (Vector2D (car .rect .centerx , car .rect .centery ), 10 , 10 , SurfaceType .GRASS )
86+ self .screen .blit (test2 .image , (car .rect .centerx , car .rect .centery ))
87+
88+ # test3 = Surface(Vector2D(car.rect.right, (car.rect.top + car.rect.bottom)/2), 10, 10, SurfaceType.SAND)
89+ # self.screen.blit(test3.image, (car.rect.right, (car.rect.top + car.rect.bottom)/2))
90+
91+ pg .draw .rect (self .screen , (0 ,0 ,0 ), car , 3 )
92+
14393
14494
14595 #print(traction) no we have to include different surfaces in the movement of the car
0 commit comments