background image

 

 

38 

 

        elif event.type == pygame.MOUSEBUTTONDOWN: 
            #get the mouse clicking coordinates 

            mouse_x, mouse_y = event.pos 
            #check if clicking is on the same position as the npc 
            for npc_key, npc in npcs.items(): 

                npc_screen_x = (npc["pos"][0] - (player_pos[0] -                 
                field_of_view_x // 2)) * tile_size 
                npc_screen_y = (npc["pos"][1] - (player_pos[1] –  
                field_of_view_y // 2)) * tile_size 

                if (npc_screen_x <= mouse_x <= npc_screen_x +  
                tile_size) and (npc_screen_y <= mouse_y <=   
                 npc_screen_y + tile_size): 
                    #activate and deactivate chat on npc clicking 

                    chat_active = not chat_active 
                    #set the current npcs information 
                    current_npc_name = npc["name"] 
                    knowledge_topic = npc["topic"] 

                    set_knowledge_topic(knowledge_topic) 
                    print("The knowledge topic:", knowledge_topic) 
                    if not chat_active: 

                        restart_chat() 

 

Μόλις ενεργοποιηθεί αυτή η επιφάνεια το level.py λαμβάνει όλα τα δεδομένα από το 

chat.py.  Έτσι ο παίκτης  έχει πλέον τη δυνατότητα να αλληλεπιδράσει  με τους NPCs και να 

συνομιλήσει μαζί του σχετικά με τα αντικείμενα γνώσης τους. 

 

    if chat_active: 
        active = True 
        chat_surface.fill((0, 0, 0, 0)) 

        input_text, 

active, 

run_chat.scroll_messages, 

run_chat.scroll_input, 

done 

run_chat(chat_surface, events, input_text, active, done, current_npc_name, knowledge_topic) 
        screen.blit(chat_surface, (screen_width - 400, screen_height - 600)) 

        # print("Received knowledge topic:", knowledge_topic) 
    else: 
        restart_chat() 

 

Κίνηση Παίκτη  

Ο  παίκτης  μπορεί  να  κινείται  ελεύθερα  μέσα  στα  όρια  του  επιπέδου,  εκτός  αν  η 

συνομιλία είναι ενεργή. Όταν η συνομιλία είναι ενεργοποιημένη, η κίνηση του παίκτη παγώνει, 

ώστε να διατηρηθεί η στην αλληλεπίδραση. 

    if not chat_active: 

        if keys[pygame.K_UP] and player_pos[1] > 0: 
            player_pos[1] -= 1 
        if keys[pygame.K_DOWN] and player_pos[1] < map_size - 1: 
            player_pos[1] += 1 

        if keys[pygame.K_LEFT] and player_pos[0] > 0: 
            player_pos[0] -= 1 
        if keys[pygame.K_RIGHT] and player_pos[0] < map_size - 1: 

            player_pos[0] += 1