background image

 

 

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 = []