Create basic rooms and map generator
BIN
maps/rooms/RDL-1.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
maps/rooms/RDL-2.png
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
maps/rooms/TD-1.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TD-2.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TL-1.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TL-2.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TR-1.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TR-2.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TRDL-1.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/TRDL-2.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
maps/rooms/back.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
97
utils.py
Normal file
|
@ -0,0 +1,97 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
|
||||
### Tangled Mind
|
||||
### Author: Arthur 'Grizzly' Grisel-Davy
|
||||
|
||||
from glob import glob
|
||||
import random
|
||||
|
||||
def fetch_rooms(path):
|
||||
"""Fetch all the basic tiles asset from the path.
|
||||
Return a dictionary
|
||||
"""
|
||||
|
||||
wildcard = '*-*.png'
|
||||
filenames = glob(path+wildcard)
|
||||
print(f"Found {len(filenames)} rooms")
|
||||
|
||||
assembly = {'T':[],
|
||||
'R':[],
|
||||
'D':[],
|
||||
'L':[],}
|
||||
|
||||
for filename in filenames:
|
||||
label = filename.split("/")[-1].split('-')[0]
|
||||
if 'T' in label:
|
||||
assembly['D'].append((label,filename))
|
||||
if 'R' in label:
|
||||
assembly['L'].append((label,filename))
|
||||
if 'D' in label:
|
||||
assembly['T'].append((label,filename))
|
||||
if 'L' in label:
|
||||
assembly['R'].append((label,filename))
|
||||
|
||||
return assembly
|
||||
|
||||
|
||||
|
||||
def map_generator(n):
|
||||
"""Map generator generate a map with a main path of n rooms
|
||||
"""
|
||||
|
||||
room_side = 1000
|
||||
|
||||
assembly = 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])
|
||||
|
||||
position = [0,0]
|
||||
carte = [(start_room,position)]
|
||||
|
||||
# Select an arbitrary first direction of arrival
|
||||
dir_from = random.choice(start_label)
|
||||
current_label = start_label
|
||||
|
||||
for i in range(n):
|
||||
# select the next direction, can't be the direction of arrival
|
||||
dir_next = random.choice(current_label.replace(dir_from,''))
|
||||
|
||||
# Select the next room
|
||||
next_label,next_room = random.choice(assembly[dir_next])
|
||||
|
||||
# Compute the position of the next tile
|
||||
if dir_next == 'T':
|
||||
next_position = [position[0],position[1]-room_side]
|
||||
dir_from = 'D'
|
||||
|
||||
if dir_next == 'R':
|
||||
next_position = [position[0]+room_side,position[1]]
|
||||
dir_from = 'L'
|
||||
|
||||
if dir_next == 'D':
|
||||
next_position = [position[0],position[1]+room_side]
|
||||
dir_from = 'T'
|
||||
|
||||
if dir_next == 'L':
|
||||
next_position = [position[0]-room_side,position[1]]
|
||||
dir_from = 'R'
|
||||
|
||||
# Build the map
|
||||
carte.append((next_room,next_position))
|
||||
|
||||
# Update the label for next turn
|
||||
current_label = next_label
|
||||
position = next_position
|
||||
|
||||
# Display the result:
|
||||
for room in carte:
|
||||
print(f"Room {room[0].split('/')[-1]} at position {room[1]}")
|
||||
|
||||
print('Done.')
|
||||
|
||||
|
||||
|
||||
|
||||
|