init commit
							
								
								
									
										13
									
								
								assets/collisions.csv
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					starting_point_x,starting_point_y,len_x,len_y
 | 
				
			||||||
 | 
					0,0,620,3020
 | 
				
			||||||
 | 
					0,0,3120,670
 | 
				
			||||||
 | 
					0,2550,3120,470
 | 
				
			||||||
 | 
					2550,0,570,3020
 | 
				
			||||||
 | 
					970,1070,440,310
 | 
				
			||||||
 | 
					970,1500,220,270
 | 
				
			||||||
 | 
					1190,1600,280,170
 | 
				
			||||||
 | 
					980,1900,500,200
 | 
				
			||||||
 | 
					1640,1035,490,345
 | 
				
			||||||
 | 
					2130,1175,265,210
 | 
				
			||||||
 | 
					1795,1780,355,315
 | 
				
			||||||
 | 
					2150,1900,245,195
 | 
				
			||||||
		
		
			
  | 
							
								
								
									
										
											BIN
										
									
								
								assets/map.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 171 KiB  | 
							
								
								
									
										1556
									
								
								assets/map.tmx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								assets/map2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 965 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/map3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 297 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/map3col.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 348 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/mapBAK.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 480 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/map_col.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 387 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/perso_sprite.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										118
									
								
								game.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,118 @@
 | 
				
			|||||||
 | 
					# Example file showing a basic pygame "game loop"
 | 
				
			||||||
 | 
					import pygame
 | 
				
			||||||
 | 
					import math
 | 
				
			||||||
 | 
					import csv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pygame setup
 | 
				
			||||||
 | 
					pygame.init()
 | 
				
			||||||
 | 
					screen = pygame.display.set_mode((1080,720))
 | 
				
			||||||
 | 
					clock = pygame.time.Clock()
 | 
				
			||||||
 | 
					running = True
 | 
				
			||||||
 | 
					dt = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					player_sprite = pygame.Rect(100,100,50,50)
 | 
				
			||||||
 | 
					mur = pygame.Rect(500,100,100,100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Player:
 | 
				
			||||||
 | 
					    def __init__(self)-> None:
 | 
				
			||||||
 | 
					        self.x = 800
 | 
				
			||||||
 | 
					        self.y = 900
 | 
				
			||||||
 | 
					        self.mov_speed = 8
 | 
				
			||||||
 | 
					        self.rotate_speed = 5
 | 
				
			||||||
 | 
					        self.angle = 90
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def rotate(self, angle: math.degrees)-> None:
 | 
				
			||||||
 | 
					        self.angle += angle*self.rotate_speed
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def move(self, mov: int)-> None:
 | 
				
			||||||
 | 
					        new_x = self.x + self.mov_speed*mov*math.cos(math.radians(self.angle))
 | 
				
			||||||
 | 
					        new_y = self.y + self.mov_speed*mov*math.sin(math.radians(self.angle))
 | 
				
			||||||
 | 
					        if(game.test_collision(pygame.Rect(new_x-50, new_y-50, 100, 100), game.collisions) == False):
 | 
				
			||||||
 | 
					            self.x = new_x
 | 
				
			||||||
 | 
					            self.y = new_y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Game:
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        self.is_paused = False
 | 
				
			||||||
 | 
					        pygame.font.init()
 | 
				
			||||||
 | 
					        self.font = pygame.font.SysFont('Comic Sans MS', 30)
 | 
				
			||||||
 | 
					        self.load_sprites()
 | 
				
			||||||
 | 
					        self.load_collisions()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def load_sprites(self):
 | 
				
			||||||
 | 
					        self.perso_sprite = pygame.image.load("assets/perso_sprite.png")
 | 
				
			||||||
 | 
					        self.map_sprite = pygame.image.load("assets/map3.png")
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def load_collisions(self):
 | 
				
			||||||
 | 
					        self.collisions = []
 | 
				
			||||||
 | 
					        with open('assets/collisions.csv', 'r', newline='') as file:
 | 
				
			||||||
 | 
					            reader = csv.DictReader(file)
 | 
				
			||||||
 | 
					            for row in reader:
 | 
				
			||||||
 | 
					                self.collisions.append(pygame.Rect(float(row["starting_point_x"]), float(row["starting_point_y"]), float(row["len_x"]), float(row["len_y"])))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_collision(self, objet: pygame.Rect, l_collisions) -> bool:
 | 
				
			||||||
 | 
					        for col in l_collisions:
 | 
				
			||||||
 | 
					            if objet.colliderect(col):
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def display_debug_text(self):
 | 
				
			||||||
 | 
					        angle_surface = self.font.render("angle: "+str(player.angle), False, (0, 0, 0))
 | 
				
			||||||
 | 
					        x_surface = self.font.render("x: "+str(player.x), False, (0, 0, 0))
 | 
				
			||||||
 | 
					        y_surface = self.font.render("y: "+str(player.y), False, (0, 0, 0))
 | 
				
			||||||
 | 
					        screen.blit(angle_surface, (0,0))
 | 
				
			||||||
 | 
					        screen.blit(x_surface, (0,30))
 | 
				
			||||||
 | 
					        screen.blit(y_surface, (0,60))
 | 
				
			||||||
 | 
					        #pygame.draw.rect(screen, "blue",pygame.Rect(player.x-50, player.y-50, 100, 100))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def check_input(self):
 | 
				
			||||||
 | 
					        keys = pygame.key.get_pressed()
 | 
				
			||||||
 | 
					        if keys[pygame.K_z]:
 | 
				
			||||||
 | 
					            _ = player.move(1)
 | 
				
			||||||
 | 
					        if keys[pygame.K_s]:
 | 
				
			||||||
 | 
					            _ = player.move(-1)
 | 
				
			||||||
 | 
					        if keys[pygame.K_q]:
 | 
				
			||||||
 | 
					            player.rotate(-1)
 | 
				
			||||||
 | 
					        if keys[pygame.K_d]:
 | 
				
			||||||
 | 
					            player.rotate(1)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def draw_player(self):
 | 
				
			||||||
 | 
					        #pygame.draw.rect(screen, "red", pygame.Rect(player.x, player.y, 50, 50))
 | 
				
			||||||
 | 
					        img = pygame.transform.rotozoom(self.perso_sprite, -player.angle-90, 0.2)
 | 
				
			||||||
 | 
					        screen.blit(img, (540-img.get_rect().centerx, 360-img.get_rect().centery))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def display_all(self):
 | 
				
			||||||
 | 
					        # fill the screen with a color to wipe away anything from last frame
 | 
				
			||||||
 | 
					        screen.fill("purple")
 | 
				
			||||||
 | 
					        screen.blit(self.map_sprite, (540-player.x, 360-player.y))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.draw_player()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # We display it at the end so it's on top of all
 | 
				
			||||||
 | 
					        self.display_debug_text()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # flip() the display to put your work on screen
 | 
				
			||||||
 | 
					        pygame.display.flip()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					player = Player()
 | 
				
			||||||
 | 
					game = Game()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while running:
 | 
				
			||||||
 | 
					    # poll for events
 | 
				
			||||||
 | 
					    # pygame.QUIT event means the user clicked X to close your window
 | 
				
			||||||
 | 
					    for event in pygame.event.get():
 | 
				
			||||||
 | 
					        if event.type == pygame.QUIT:
 | 
				
			||||||
 | 
					            running = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    game.check_input()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    game.display_all()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # limits FPS to 60
 | 
				
			||||||
 | 
					    # dt is delta time in seconds since last frame, used for framerate-
 | 
				
			||||||
 | 
					    # independent physics.
 | 
				
			||||||
 | 
					    dt = clock.tick(60) / 1000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pygame.quit()
 | 
				
			||||||