background image

 

 

46 

 

Πίνακας user_questions: Εξασφαλίζει ότι δεν θα επαναλαμβάνονται οι ερωτήσεις για το ίδιο 

θέμα σε έναν χρήστη, αποθηκεύοντας ποια ερωτήματα έχουν ήδη απαντηθεί. Αυτός ο πίνακας 

είναι  κρίσιμος  για  την  αποφυγή  επαναλήψεων  και  την  ενίσχυση  της  δυναμικότητας  του 

παιχνιδιού. 

 

    cursor.execute(''' 
        CREATE TABLE IF NOT EXISTS user_questions ( 

            user_id INTEGER, 
            topic TEXT, 
            question_id INTEGER, 
            PRIMARY KEY (user_id, topic, question_id), 

            FOREIGN KEY (user_id) REFERENCES users(id), 
            FOREIGN KEY (topic) REFERENCES topics(topic_name), 
            FOREIGN KEY (question_id) REFERENCES questions(id) 

        ) 
    ''')   
    conn.commit() 
    conn.close() 

init_db() 

 

Ανάκτηση Δεδομένων από τη Βάση Δεδομένων  

Οι  περισσότερες  λειτουργίες  του  παιχνιδιού  (θέματα,  δεδομένα,  ερωτήσεις,  αποτελέσματα) 

ελέγχονται  από  τη  βάση  δεδομένων  για  καλύτερη  διαχείριση  και  συγχρονισμό.  Έτσι 

δημιουργήθηκε το αρχείο db_utils.py, το οποίο περιλαμβάνει όλες τις απαραίτητες λειτουργίες, 

ώστε να διαμοιράζονται τα δεδομένα μεταξύ του παιχνιδιού και της βάσης δεδομένων. 

Δημιουργήθηκε μία συνάρτηση, με την οποία μπορεί το παιχνίδι να αντλήσει τις πληροφορίες 

που αφορούν την κάθε θεματική και το όνομα του NPC της από τον πίνακα topics. 

 

Αρχικά,  πραγματοποιείται  σύνδεση  με  τη  βάση  δεδομένων  topics.db  με  την  εντολή 

sqlite3.connect('topics.db'), χρησιμοποιώντας το with, ώστε να εξασφαλιστεί, ότι η σύνδεση θα 

κλείσει αυτόματα όταν παύσει να χρησιμοποιείται. 

Έπειτα,  δημιουργήθηκε  ένα  αντικείμενο  cursor,  το  οποίο  επιτρέπει  την  εκτέλεση 

εντολών μέσω sql αλλά και την ανάκτηση δεδομένων από τη db. 

Στη συνέχεια, με την εντολή cursor.execute ζητούνται τα δεδομένα του πίνακα topics, 

τα οποία περιλαμβάνονται στις στήλες topic_name και npc_name. 

Τα δεδομένα που λαμβάνονται από τη βάση αποθηκεύονται στη μεταβλητή topics, με 

τη χρήση λεξικού. Δημιουργείται ένα ζεύγος key: value. Το key (κλειδί) είναι μια μοναδική 

τιμή που χρησιμοποιείται για την αναφορά σε μια άλλη τιμή (value) μέσα σε ένα λεξικό. Το 

key  είναι  το  row[0],  όπου  αποθηκεύεται  το  topic_name,  και  value  είναι  το  row[1],  όπου 

αποθηκεύεται το npc_name. Στο τέλος επιστρέφεται το λεξικό topics με τα παραπάνω keys και 

values.