59
('Marie Curie', 'sprites/npcs/Curie.png'),
('Dmitri Mendeleev', 'sprites/npcs/Mendeleev.png')])
history_npc = random.choice([
('Herodotus', 'sprites/npcs/Herodotus.png'),
('Thucydides', 'sprites/npcs/Thucydides.png')])
art_npc = random.choice([
('Leonardo da Vinci', 'sprites/npcs/Leonardo.png'),
('Frida Kahlo', 'sprites/npcs/Frida.png')])
environmental_npc = random.choice([
('Rachel Carson', 'sprites/npcs/Carson.png'),
('John Muir', 'sprites/npcs/Muir.png')])
biology_npc = random.choice([
('Charles Darwin', 'sprites/npcs/Darwin.png'),
('Alexander Fleming', 'sprites/npcs/Fleming.png')])
Διαμόρφωση Χάρτη και Τοποθέτηση NPCs
Ο χάρτης του παιχνιδιού χωρίστηκε σε δώδεκα τμήματα, ένα για κάθε NPC και ένα για
να τοποθετηθεί ο παίκτης. Η τοποθέτηση των χαρακτήρων πραγματοποιείται τυχαία κάθε φορά
που τρέχει το παιχνίδι.
Η set_npcs() είναι υπεύθυνη για την αρχικοποίηση των NPCs στο παιχνίδι και την
τοποθέτησή τους στον χάρτη.
Η συνάρτηση συνδέεται στη βάση δεδομένων topics.db,
δημιουργεί έναν cursor για την εκτέλεση SQL ερωτημάτων και ανακτά τα topic_name,
npc_name και npc_image όλων των NPCs. Ο χάρτης χωρίζεται σε 12 τομείς (3 σειρές × 4
στήλες), με ένα κενό 2000 pixels ανάμεσα στους τομείς και στα εξωτερικά όρια. Τα πραγματικά
μεγέθη των τομέων υπολογίζονται λαμβάνοντας υπόψη αυτά τα κενά μεταξύ των τομέων
(sector_gap) και τα κενά από τα όρια του χάρτη (outer_gap). Για την τοποθέτηση των NPCs,
δημιουργούνται δύο λίστες: η available_sectors, που περιέχει όλους τους διαθέσιμους τομείς,
και η occupied_sectors, όπου καταγράφονται οι τομείς που καταλαμβάνονται από NPCs.
def set_npcs():
conn = sqlite3.connect('topics.db')
cursor = conn.cursor()
cursor.execute("SELECT topic_name, npc_name, npc_image FROM topics")
npcs = {}
tile_size = 40
map_size = 1000 * tile_size
sector_gap = 2000
outer_gap = 2000
sector_rows = 3
sector_cols = 4
total_width_gap = (sector_cols - 1) * sector_gap
total_height_gap = (sector_rows - 1) * sector_gap
sector_width = (map_size - total_width_gap - (2 * outer_gap)) // sector_cols
sector_height = (map_size - total_height_gap - (2 * outer_gap)) // sector_rows
available_sectors = [(i, j) for i in range(sector_rows) for j in range(sector_cols)]
occupied_sectors = []
npc_tilesets = {}
obstacles = []