init commit

This commit is contained in:
ayabusa 2024-10-22 16:15:06 +02:00
commit 5175cfe3f1
10 changed files with 1687 additions and 0 deletions

13
assets/collisions.csv Normal file
View 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
1 starting_point_x starting_point_y len_x len_y
2 0 0 620 3020
3 0 0 3120 670
4 0 2550 3120 470
5 2550 0 570 3020
6 970 1070 440 310
7 970 1500 220 270
8 1190 1600 280 170
9 980 1900 500 200
10 1640 1035 490 345
11 2130 1175 265 210
12 1795 1780 355 315
13 2150 1900 245 195

BIN
assets/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

1556
assets/map.tmx Normal file

File diff suppressed because it is too large Load Diff

BIN
assets/map2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 KiB

BIN
assets/map3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

BIN
assets/map3col.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

BIN
assets/mapBAK.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

BIN
assets/map_col.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

BIN
assets/perso_sprite.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

118
game.py Normal file
View 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()