60
Για κάθε εγγραφή NPC που ανακτάται από τη βάση, αποθηκεύονται τα topic_name, npc_name
και npc_image. Στη συνέχεια, επιλέγεται τυχαία ένας διαθέσιμος τομέας για την τοποθέτησή
του, ο οποίος αφαιρείται από τη λίστα available_sectors και προστίθεται στη λίστα
occupied_sectors. Υπολογίζεται η ακριβής θέση του τομέα στον χάρτη, ενώ ο NPC
τοποθετείται στο κέντρο του, προσαρμόζοντας τη θέση του με βάση τις διαστάσεις του τομέα
και τα προκαθορισμένα κενά. Τέλος, φορτώνονται οι εικόνες που αφορούν τα πλακίδια (tiles)
του εκάστοτε NPC, και προσαρμόζονται στο καθορισμένο tile_size.
for row in cursor.fetchall():
topic, npc_name, npc_image = row
sector = random.choice(available_sectors)
available_sectors.remove(sector)
occupied_sectors.append(sector)
# find the top left position of the sector including gaps
sector_x = outer_gap +sector[1]*(sector_width + sector_gap)
sector_y = outer_gap+sector[0]*(sector_height + sector_gap)
npc_x=sector_x+sector_width//2- tile_size //2-sector_gap
npc_y =sector_y+sector_height//2-tile_size//2-sector_gap
# set specific tiles for each npc (images for NPCs)
npc_tileset=[pygame.image.load(resource_path(f'sprites/npc_tiles/{topic}/tile{idx}.png')).conv
ert()
for idx in range(1, 5)]
npc_tilesets[npc_name]=[pygame.transform.scale(tile, (tile_size, tile_size)) for tile
in npc_tileset]
Οι ιδιότητες του NPC αποθηκεύονται σε μια δομή δεδομένων, περιλαμβάνοντας το όνομά του,
τη θέση του στον χάρτη, τις εικόνες του και το αντικείμενο γνώσης του. Παράλληλα,
δημιουργείται ένα ορθογώνιο (sector_rect) που αντιπροσωπεύει τον τομέα στον οποίο ανήκει.
Αφού ολοκληρωθεί η τοποθέτησή του, καλείται η συνάρτηση set_obs(), η οποία προσθέτει
εμπόδια στον τομέα, διασφαλίζοντας ότι ο χάρτης αποκτά ποικιλία και επηρεάζοντας τις
κινήσεις του παίκτη.
# enter the NPC data using image paths
npcs[npc_name.lower()] = {
"npc_name": npc_name,
"pos": pygame.Vector2(npc_x, npc_y),
"topic": topic,
"npc_image": resource_path(npc_image),
"collectable_image": resource_path(f"sprites/collectables/{topic}.png"),
"collectable_item_collected": False,
"clicked": False,
"sector_rect":pygame.Rect(sector_x,sector_y, sector_width, sector_height),
"tileset": npc_tilesets[npc_name],}
set_obs(topic,sector_x,sector_y,sector_width,sector_height,
tile_size,npc_x,npc_y,obstacles)