61
Αφού τοποθετηθούν όλοι οι NPCs, εντοπίζονται οι τομείς που παραμένουν κενoί, δηλαδή
εκείνοι που δεν έχουν καταληφθεί από κάποιον χαρακτήρα. Από αυτούς, επιλέγεται ο πρώτος
διαθέσιμος τομέας για την τοποθέτηση του παίκτη. Στη συνέχεια, υπολογίζεται η ακριβής θέση
του μέσα στον τομέα, διασφαλίζοντας ότι βρίσκεται στο κέντρο του. Η θέση του αποθηκεύεται
ως Vector2, διευκολύνοντας τη διαχείριση των συντεταγμένων του μέσα στο παιχνίδι. Έπειτα,
όπως και στους NPCs, έτσι και στον τομέα του παίκτη προστίθενται εμπόδια μέσω της
συνάρτησης set_obs(), διαμορφώνοντας το περιβάλλον. Αφού ολοκληρωθεί η διαδικασία
τοποθέτησης όλων των χαρακτήρων και των εμποδίων, η σύνδεση με τη βάση δεδομένων
κλείνει. Τέλος, η συνάρτηση επιστρέφει τα δεδομένα των NPCs, τη θέση του παίκτη και τη
λίστα με όλα τα εμπόδια που έχουν δημιουργηθεί στον χάρτη.
# after all the npcs are placed, the player is placed in the center of the empty sector
empty_sectors = [sector for sector in available_sectors if sector not in occupied_sectors]
# select the first available empty sector
if empty_sectors:
empty_sector = empty_sectors[0]
# find the center of the empty sector
sector_x = outer_gap + empty_sector[1] * (sector_width +
sector_gap)
sector_y = outer_gap + empty_sector[0] * (sector_height +
sector_gap)
player_x=sector_x+sector_width//2-tile_size//2-sector_gap
player_y=sector_y+sector_height//2-tile_size//2-sector_gap
# position the player in the center of the empty sector
player_pos = pygame.Vector2(player_x, player_y)
set_obs(topic,sector_x,sector_y,sector_width,
sector_height,tile_size,npc_x,npc_y,obstacles)
conn.close()
return npcs, player_pos, obstacles
Τοποθέτηση εμποδίων στο χάρτη
Η τοποθέτηση εμποδίων είναι επίσης ένα σημαντικό στοιχείο του χάρτη, καθώς προσφέρει
ποικιλία στο περιβάλλον και επηρεάζει την κίνηση του παίκτη. Η συνάρτηση set_obs τοποθετεί
έναν τυχαίο αριθμό εμποδίων μέσα σε έναν συγκεκριμένο τομέα του χάρτη, επιλέγοντας από
30 έως 40 εμπόδια ανά τομέα. Για κάθε εμπόδιο, επιλέγεται τυχαία μία εικόνα από το
αντίστοιχο θέμα. Στη συνέχεια, λαμβάνονται οι διαστάσεις της εικόνας και καλείται η
random_obs_pos για να βρεθεί μια θέση, εξασφαλίζοντας ότι το εμπόδιο δεν τοποθετείται πολύ
κοντά στον NPC (τουλάχιστον 5 tiles μακρυά) και ότι υπάρχει αρκετός χώρος μεταξύ των
εμποδίων (τουλάχιστον 10 tiles). Τέλος, το νέο εμπόδιο προστίθεται στη λίστα obstacles,
αποθηκεύοντας ένα rect που ορίζει τη θέση και το μέγεθός του, καθώς και την εικόνα του,
προσαρμοσμένη στις διαστάσεις του.