37
@app.route('/get_knowledge_topic', methods=['POST'])
def get_knowledge_topic():
# make sure knowlwdge_topic is a global variable
global knowledge_topic
# take the data received and create a dict named data to access json file
data = request.get_json()
# returns the message received
topic = data.get('topic')
#check if topic exists in available topics
if topic in topics:
knowledge_topic = topic
print("Received knowledge topic:", knowledge_topic)
return jsonify({'message': f'Knowledge topic updated to {knowledge_topic}'})
else:
return jsonify({'error': 'Invalid topic provided'})
Συνομιλία (Chat) στο παιχνίδι
Η συνομιλία (chat) εμφανίζεται σε μια ειδική επιφάνεια (surface) μέσα στο παράθυρο
του παιχνιδιού. Αυτή η επιφάνεια ενεργοποιείται και απενεργοποιείται κάνοντας κλικ πάνω σε
κάποιον NPC.
chat_surface = pygame.Surface((400, 600))
# set the transparency so the game screen can be semi-visible behind chat_surface
chat_surface.set_alpha(200)
Μόλις ο χρήστης πατήσει το κουμπί του ποντικιού, το πρόγραμμα ανιχνεύει το συμβάν
MOUSEBUTTONDOWN και αποθηκεύει τις συντεταγμένες του σημείου όπου έγινε το κλικ.
Στη συνέχεια, γίνεται προσπέλαση σε όλους τους NPCs που υπάρχουν στο παιχνίδι και οι
συντεταγμένες τους στο παιχνίδι (global coordinates) μετατρέπονται σε συντεταγμένες οθόνης
(screen coordinates), λαμβάνοντας υπόψη τη θέση του παίκτη και το οπτικό του πεδίο (field of
view). Το tile_size αντιπροσωπεύει το μέγεθος ενός τετραγώνου στο grid του παιχνιδιού, και
μέσω αυτού ελέγχεται αν το κλικ έγινε μέσα στα όρια του πλακιδίου όπου βρίσκεται ο NPC.
Αν το chat ήταν ανενεργό, ενεργοποιείται, ενώ αν ήταν ήδη ενεργό, απενεργοποιείται.
Παράλληλα, αποθηκεύονται τα δεδομένα του NPC, όπως το όνομά του και το θέμα γνώσης
που θα συζητηθεί, ενώ η set_knowledge_topic (knowledge_topic) καλείται για να ενημερώσει
τη θεματική του διαλόγου. Τέλος, αν ο χρήστης έκανε κλικ και απενεργοποίησε το chat,
καλείται η restart_chat() ώστε να γίνει επανεκκίνηση της συνομιλίας εφόσον αυτή
ενεργοποιηθεί ξανά.