background image

 

 

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  που ορίζει τη θέση και το μέγεθός του,  καθώς και την εικόνα του, 

προσαρμοσμένη στις διαστάσεις του.