background image

 

 

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)