diff --git a/maps/rooms.svg b/maps/rooms.svg new file mode 100644 index 0000000..84effbb --- /dev/null +++ b/maps/rooms.svg @@ -0,0 +1,3000 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TR + + + + + + + + + + + + + + + + + + + + + + + + + + + TRDL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RDL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r + d + l + + + + + + + + + + + + diff --git a/maps/rooms/d-1.png b/maps/rooms/d-1.png new file mode 100644 index 0000000..a1b2563 Binary files /dev/null and b/maps/rooms/d-1.png differ diff --git a/maps/rooms/l-1.png b/maps/rooms/l-1.png new file mode 100644 index 0000000..214c818 Binary files /dev/null and b/maps/rooms/l-1.png differ diff --git a/maps/rooms/r-1.png b/maps/rooms/r-1.png new file mode 100644 index 0000000..84a9153 Binary files /dev/null and b/maps/rooms/r-1.png differ diff --git a/maps/rooms/t-1.png b/maps/rooms/t-1.png new file mode 100644 index 0000000..f7a27dd Binary files /dev/null and b/maps/rooms/t-1.png differ diff --git a/models.py b/models.py index b2f36e3..40546ac 100644 --- a/models.py +++ b/models.py @@ -73,9 +73,6 @@ class Carte(): def __init__(self,n): self.carte, self.player_start_pos, self.back = map_generator(n) - for room in self.carte: - print(room[2]) - def draw(self,surface,camera): offsetx,offsety = camera.get_offset() for room in self.carte: @@ -83,9 +80,11 @@ class Carte(): surface.blit(room[0],(room[2][0]-offsetx,room[2][1]-offsety)) def collision(self,thing): + #print(f"player in position {thing.posx,thing.posy}") for room in self.carte: if room[1].overlap(thing.mask, (thing.posx-thing.rect.center[0]-room[2][0],thing.posy-thing.rect.center[1]-room[2][1])): return True + return False @@ -151,6 +150,7 @@ class Player(): if keystate[self.key_left]: self.speed[0] -= acceleration if self.speed[0] < -cap_speed: self.speed[0] = -cap_speed + print("PLOP") if keystate[self.key_right]: self.speed[0] += acceleration diff --git a/utils.py b/utils.py index 6a243ee..a1bb975 100644 --- a/utils.py +++ b/utils.py @@ -12,16 +12,18 @@ def fetch_rooms(path): Return a dictionary """ - wildcard = '*-*.png' - filenames = glob(path+wildcard) - print(f"Found {len(filenames)} rooms") + common_wildcard = '[A-Z]*-*.png' + unique_wildcard = '?-*.png' + common_filenames = glob(path+common_wildcard) + unique_filenames = glob(path+unique_wildcard) + #print(f"Found {len(common_filenames)} common rooms and {len(unique_filenames)} uniques rooms.") assembly = {'T':[], 'R':[], 'D':[], 'L':[],} - for filename in filenames: + for filename in common_filenames: label = filename.split("/")[-1].split('-')[0] if 'T' in label: assembly['D'].append((label,filename)) @@ -34,7 +36,7 @@ def fetch_rooms(path): background = glob(path+'*back*')[0] - return assembly,background + return unique_filenames,assembly,background def check_map(carte): """Function to check if a map is valid i.e. if no two rooms are at the same location @@ -51,33 +53,33 @@ def map_generator(n): """Map generator generate a map with a main path of n rooms """ - start_poss = {'T':(500,50),'R':(950,500),'D':(500,950),'L':(50,500)} - room_side = 1000 - assembly,back_path = fetch_rooms('./maps/rooms/') + unique_filenames,assembly,back_path = fetch_rooms('./maps/rooms/') #assembly = {'T/R/D/L':[(label1,path1),(label2,path2),...]} - start_key = random.choice(list(assembly.keys())) - start_label,start_room = random.choice(assembly[start_key]) + + unique_rooms = {filename.split("/")[-1][0].upper():pygame.image.load(filename).convert_alpha() for filename in unique_filenames} + + current_label= random.choice(list(unique_rooms.keys())) + start_room = unique_rooms[current_label] # Place the first room in the list positions = [] position = [0,0] - asset = pygame.image.load(start_room).convert_alpha() - mask = pygame.mask.from_surface(asset) - carte = [(asset,mask,position)] + mask = pygame.mask.from_surface(start_room) + carte = [(start_room,mask,position)] - # Select an arbitrary first direction of arrival - dir_from = random.choice(start_label) - start_pos = start_poss[dir_from] - current_label = start_label counter = 0 while counter < n: # select the next direction, can't be the direction of arrival - dir_next = random.choice(current_label.replace(dir_from,'')) + if len(current_label) > 1: + dir_next = random.choice(current_label.replace(dir_from,'')) + else: + dir_next = current_label + # Select the next room next_label,next_room = random.choice(assembly[dir_next]) @@ -116,11 +118,14 @@ def map_generator(n): background = pygame.image.load(back_path).convert() if not check_map(carte): - print("Invalid Map.") + raise ValueError("Invalid Map.") else: print("Map checked and valid!") - return(carte,start_pos,background) + for room in carte: + print(room) + + return(carte,(int(room_side/2),int(room_side/2)),background)