Εκτός αν το παιχνίδι σας είναι πολύ σύντομο, βοηθάει να μπορείτε να αποθηκεύσετε την πρόοδο. Ακόμη και τα σύντομα παιχνίδια μπορούν να επωφεληθούν από την αποθήκευση υψηλών βαθμολογιών.

Η προσθήκη ενός συστήματος αποθήκευσης και φόρτωσης στο παιχνίδι σας μπορεί να βελτιώσει σημαντικά την εμπειρία του παίκτη. Επιτρέπει στους παίκτες να συνεχίσουν την πρόοδό τους, να συνεχίσουν τις συνεδρίες παιχνιδιού και να πειραματιστούν με διαφορετικές στρατηγικές χωρίς να χάσουν επιτεύγματα που κερδίζουν με κόπο.

Θα εκπλαγείτε ευχάριστα από το πόσο απλό είναι να προσθέσετε αυτήν τη δυνατότητα στο παιχνίδι σας χρησιμοποιώντας τη βιβλιοθήκη Arcade της Python.

Δημιουργήστε ένα απλό παιχνίδι

Ξεκινήστε δημιουργώντας ένα απλό παιχνίδι όπου ο παίκτης μπορεί να κινηθεί αριστερά και δεξιά.

Ο κώδικας που χρησιμοποιείται σε αυτό το άρθρο είναι διαθέσιμος σε αυτό Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.

Δημιουργήστε ένα νέο αρχείο με όνομα simple-game.py και προσθέστε τον παρακάτω κώδικα:

εισαγωγή
instagram viewer
στοά

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
μπλε = στοά.χρώμα. ΜΠΛΕ

τάξηΠαράθυρο παιχνιδιού(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
self.player_x = πλάτος // 2

defon_draw(εαυτός):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, μπλε)

defεκσυγχρονίζω(self, delta_time):
πέρασμα

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΑΡΙΣΤΕΡΑ:
self.player_x -= PLAYER_SPEED
ελιφ κλειδί == arcade.key. ΣΩΣΤΑ:
self.player_x += PLAYER_SPEED

defκύριος():
παράθυρο = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

αν __όνομα__ == '__κύριος__':
κύριος()

Ο κώδικας δημιουργεί ένα παράθυρο με ένα μπλε ορθογώνιο που αντιπροσωπεύει τη συσκευή αναπαραγωγής. Ο παίκτης μπορεί να μετακινηθεί αριστερά και δεξιά χρησιμοποιώντας τα πλήκτρα αριστερού και δεξιού βέλους.

Διαχείριση Πολιτειών Παιχνιδιού

Για να εφαρμόσετε ένα σύστημα αποθήκευσης και φόρτωσης, πρέπει να διαχειριστείτε διαφορετικές καταστάσεις παιχνιδιού. Μια κατάσταση παιχνιδιού αντιπροσωπεύει την τρέχουσα κατάσταση του παιχνιδιού, συμπεριλαμβανομένων των θέσεων των αντικειμένων, των βαθμολογιών και άλλων σχετικών δεδομένων. Για αυτό το παράδειγμα, εστιάστε μόνο στη συντεταγμένη x του παίκτη.

Για να διαχειριστείτε καταστάσεις παιχνιδιού, εισαγάγετε α GameState κλάση που ενσωματώνει τα δεδομένα του παιχνιδιού και παρέχει μεθόδους αποθήκευσης και φόρτωσής του. Εδώ είναι ο κωδικός:

τάξηGameState:
def__μέσα σε αυτό__(εαυτός):
self.player_x = 0

Αποθήκευση των δεδομένων του παιχνιδιού

Για να αποθηκεύσετε τα δεδομένα του παιχνιδιού, επεκτείνετε το Παράθυρο παιχνιδιού τάξη και προσθέστε μια μέθοδο για να αποθηκεύσετε την κατάσταση του παιχνιδιού όποτε είναι απαραίτητο. Χρησιμοποιήστε τη μορφή JSON για απλότητα. Εδώ είναι ο κωδικός:

Στο αποθήκευση παιχνιδιού μέθοδος, δημιουργήστε ένα λεξικό Python που περιέχει τα σχετικά δεδομένα παιχνιδιού. Στη συνέχεια, σειριοποιήστε το σε ένα αρχείο JSON που ονομάζεται αποθήκευση.json.

εισαγωγή json

τάξηΠαράθυρο παιχνιδιού(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
self.game_state = GameState()

defαποθήκευση παιχνιδιού(εαυτός):
δεδομένα = {
'player_x': self.game_state.player_x
}
με Άνοιξε('save.json', 'w') όπως και αρχείο:
json.dump (δεδομένα, αρχείο)
εκτύπωση (δεδομένα)

defon_draw(εαυτός):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, μπλε)

defεκσυγχρονίζω(self, delta_time):
πέρασμα

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΑΡΙΣΤΕΡΑ:
self.game_state.player_x -= PLAYER_SPEED
ελιφ κλειδί == arcade.key. ΣΩΣΤΑ:
self.game_state.player_x += PLAYER_SPEED
ελιφ κλειδί == arcade.key. ΜΙΚΡΟ:
self.save_game()

Φόρτωση των δεδομένων παιχνιδιού

Για να φορτώσετε τα δεδομένα του παιχνιδιού, επεκτείνετε το Παράθυρο παιχνιδιού τάξη περαιτέρω και προσθέστε μια μέθοδο για να φορτώσετε την κατάσταση του παιχνιδιού. Δημιουργήστε ένα νέο αρχείο με όνομα load-game.py και προσθέστε τον κωδικό με τις παρακάτω ενημερώσεις:

τάξηΠαράθυρο παιχνιδιού(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
self.game_state = GameState()
self.load_game()

defφόρτωσε το παιχνίδι(εαυτός):
δοκιμάστε:
με Άνοιξε('save.json', 'ρ') όπως και αρχείο:
data = json.load (αρχείο)
self.game_state.player_x = δεδομένα['player_x']
εκτός FileNotFoundError:
πέρασμα

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΜΕΓΑΛΟ:
self.load_game()

ο φόρτωσε το παιχνίδι μέθοδος επιχειρεί να ανοίξει το αποθήκευση.json αρχείο και ανάκτηση των δεδομένων του παιχνιδιού. Στη συνέχεια ενημερώνει την κατάσταση του παιχνιδιού με τα φορτωμένα δεδομένα. Εάν το αρχείο δεν υπάρχει, μπορείτε απλώς να αγνοήσετε την εξαίρεση, αφήνοντας την προεπιλεγμένη κατάσταση του παιχνιδιού.

Συμπεριλαμβανομένων πρόσθετων χαρακτηριστικών

Μπορείτε να προσθέσετε περισσότερες δυνατότητες για να βελτιώσετε το σύστημα αποθήκευσης και φόρτωσης του παιχνιδιού.

Αποθήκευση υψηλών βαθμολογιών

Η αποθήκευση υψηλών βαθμολογιών παράλληλα με την κατάσταση του παιχνιδιού είναι ένα κοινό χαρακτηριστικό σε πολλά παιχνίδια. Μπορείς διαχείριση των βαθμολογιών και αποθηκεύστε την υψηλή βαθμολογία χρησιμοποιώντας αυτό το σύστημα. Δημιουργήστε ένα νέο αρχείο με όνομα high-score.py και προσθέστε τον κωδικό με τις παρακάτω ενημερώσεις:

τάξηΠαράθυρο παιχνιδιού(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
εαυτός.υψηλός_βαθμός = 0

defφόρτωσε το παιχνίδι(εαυτός):
δοκιμάστε:
με Άνοιξε('save.json', 'ρ') όπως και αρχείο:
data = json.load (αρχείο)
εκτύπωση (δεδομένα)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('υψηλή βαθμολογία', self.high_score)
εκτός FileNotFoundError:
πέρασμα

defαποθήκευση παιχνιδιού(εαυτός):
δεδομένα = {
'player_x': self.player_x,
'υψηλή βαθμολογία': self.high_score
}
με Άνοιξε('save.json', 'w') όπως και αρχείο:
json.dump (δεδομένα, αρχείο)
εκτύπωση (δεδομένα)

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΑΡΙΣΤΕΡΑ:
self.player_x -= PLAYER_SPEED
ελιφ κλειδί == arcade.key. ΣΩΣΤΑ:
self.player_x += PLAYER_SPEED
self.high_score += 1

Λειτουργία αυτόματης αποθήκευσης

Για να παρέχετε στους παίκτες ηρεμία και να αποτρέψετε την απώλεια προόδου, μπορείτε να αποθηκεύετε αυτόματα την κατάσταση του παιχνιδιού σε τακτά χρονικά διαστήματα. Δημιουργήστε ένα νέο αρχείο με όνομα auto-save.py και προσθέστε τον κωδικό με τις παρακάτω ενημερώσεις:

εισαγωγή χρόνος

τάξηΠαράθυρο παιχνιδιού(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
self.game_state = GameState()

# Αποθήκευση κάθε 6 δευτερόλεπτα
self.autosave_interval = 6
self.last_save_time = time.time()

defεκσυγχρονίζω(self, delta_time):
τρέχον_χρόνος = χρόνος.χρόνος()
time_diff = τρέχον_χρόνος - self.last_save_time

αν time_diff >= self.autosave_interval:
self.save_game()
Τυπώνω("Αποθηκεύτηκε")
self.last_save_time = τρέχον_ώρα

Σε αυτό το απόσπασμα κώδικα, το εκσυγχρονίζω Η μέθοδος ελέγχει εάν το καθορισμένο χρονικό διάστημα έχει περάσει από την τελευταία αποθήκευση. Αν ναι, ενεργοποιεί το αποθήκευση παιχνιδιού μέθοδος του Παράθυρο παιχνιδιού κλάση για αυτόματη αποθήκευση της κατάστασης του παιχνιδιού. Ρυθμίστε το autosave_interval αξία σύμφωνα με τις απαιτήσεις του παιχνιδιού σας.

Επικύρωση δεδομένων παιχνιδιού

Η επικύρωση των φορτωμένων δεδομένων παιχνιδιού είναι απαραίτητη για τη διασφάλιση της ακεραιότητας και της συνέπειάς τους. Μπορείτε εύκολα να ενσωματώσετε την επικύρωση δεδομένων στο σύστημα αποθήκευσης και φόρτωσης:

τάξηGameState:
def__μέσα σε αυτό__(εαυτός):
self.player_x = 0

defsave_state(εαυτός):
αν self.is_valid_state():
δεδομένα = {
'player_x': self.player_x
}

με Άνοιξε('save.json', 'w') όπως και αρχείο:
json.dump (δεδομένα, αρχείο)

defload_state(εαυτός):
με Άνοιξε('save.json', 'ρ') όπως και αρχείο:
data = json.load (αρχείο)

αν self.validate_loaded_data (δεδομένα):
self.player_x = δεδομένα['player_x']
αλλού:
Τυπώνω("Λάθος!")

defis_valid_state(εαυτός):
# Εκτελέστε τη λογική επικύρωσης εδώ
# Επιστρέψτε True εάν η κατάσταση είναι έγκυρη, False διαφορετικά
πέρασμα

defvalidate_loaded_data(εαυτός, δεδομένα):
# Εκτελέστε επικύρωση στα φορτωμένα δεδομένα
# Επιστρέψτε True εάν τα δεδομένα είναι έγκυρα, False διαφορετικά
πέρασμα

Ενσωματώνοντας αυτές τις πρόσθετες λειτουργίες στο σύστημα αποθήκευσης και φόρτωσης, μπορείτε να δημιουργήσετε ένα πιο ευέλικτο και ισχυρό παιχνίδι εμπειρία, προσφέροντας στους παίκτες τη δυνατότητα να αποθηκεύουν πολλές καταστάσεις παιχνιδιού, να παρακολουθούν υψηλές βαθμολογίες, να ενεργοποιούν την αυτόματη αποθήκευση και να διασφαλίζουν δεδομένα ακεραιότητα.

Βέλτιστες πρακτικές για το σύστημα αποθήκευσης και φόρτωσης

Η εφαρμογή ενός συστήματος αποθήκευσης και φόρτωσης είναι μια σημαντική πτυχή της ανάπτυξης παιχνιδιών. Για να διασφαλιστεί ένα στιβαρό και αξιόπιστο σύστημα, είναι απαραίτητο να ακολουθείτε τις βέλτιστες πρακτικές. Ακολουθούν ορισμένες βασικές πρακτικές που πρέπει να λάβετε υπόψη:

Κρυπτογράφηση ευαίσθητων δεδομένων

Εάν το παιχνίδι σας περιλαμβάνει ευαίσθητες πληροφορίες, όπως κωδικούς πρόσβασης, προσωπικά δεδομένα ή αγορές εντός εφαρμογής, είναι σημαντικό να κρυπτογραφήσετε την κατάσταση του αποθηκευμένου παιχνιδιού. Η κρυπτογράφηση προσθέτει ένα επιπλέον επίπεδο ασφάλειας, προστατεύοντας το απόρρητο του παίκτη και αποτρέποντας τη μη εξουσιοδοτημένη πρόσβαση στα δεδομένα του. Χρησιμοποιήστε αλγόριθμους κρυπτογράφησης και βιβλιοθήκες για την προστασία ευαίσθητων πληροφοριών.

Επικύρωση φορτωμένων δεδομένων

Πριν φορτώσετε τα δεδομένα του παιχνιδιού, είναι απαραίτητο να τα επικυρώσετε για να διασφαλίσετε την ακεραιότητα και τη συνέπειά τους. Βεβαιωθείτε ότι τα φορτωμένα δεδομένα συμμορφώνονται με την αναμενόμενη μορφή, τη δομή και τους περιορισμούς του παιχνιδιού σας.

Πραγματοποιήστε ελέγχους επικύρωσης σε κρίσιμα πεδία δεδομένων για να αποφύγετε σφάλματα ή εξαπάτηση. Εφαρμόστε ισχυρούς μηχανισμούς επικύρωσης δεδομένων για τη διαχείριση πιθανών σφαλμάτων ή απροσδόκητων δεδομένων.

Χειριστείτε τα λάθη με χάρη

Όταν ασχολείστε με λειτουργίες εισόδου/εξόδου αρχείων, μπορεί να προκύψουν σφάλματα. Είναι σημαντικό να χειρίζεστε αυτά τα σφάλματα με χάρη και να παρέχετε ενημερωτικά μηνύματα σφάλματος στον παίκτη. Πιάστε και χειριστείτε εξαιρέσεις, όπως π.χ FileNotFoundError ή Σφάλμα άδειας, κατά τις λειτουργίες αποθήκευσης και φόρτωσης.

Εμφανίστε φιλικά προς το χρήστη μηνύματα σφάλματος για να καθοδηγήσετε τους παίκτες και να αποτρέψετε την απογοήτευση. Επιπλέον, εξετάστε το ενδεχόμενο εφαρμογής καταγραφής σφαλμάτων για να βοηθήσετε στη διάγνωση και τη διόρθωση προβλημάτων.

Δοκιμάστε τη λειτουργικότητα αποθήκευσης και φόρτωσης

Δοκιμάστε διεξοδικά τη λειτουργικότητα αποθήκευσης και φόρτωσης του παιχνιδιού σας για να διασφαλίσετε την αξιοπιστία και την ορθότητά του. Δημιουργήστε δοκιμαστικές περιπτώσεις που καλύπτουν διάφορα σενάρια, όπως αποθήκευση σε διαφορετικές καταστάσεις παιχνιδιού, φόρτωση από έγκυρα και μη έγκυρα αρχεία αποθήκευσης και δοκιμαστικές περιπτώσεις.

Επιβεβαιώστε ότι η κατάσταση του παιχνιδιού έχει αποθηκευτεί και φορτωθεί σωστά και ότι εμφανίζεται η αναμενόμενη συμπεριφορά. Τα αυτοματοποιημένα πλαίσια δοκιμών μπορούν να βοηθήσουν στη δημιουργία ολοκληρωμένων σειρών δοκιμών.

Κάντε τα παιχνίδια πιο διασκεδαστικά με το σύστημα αποθήκευσης και φόρτωσης

Η προσθήκη ενός συστήματος αποθήκευσης και φόρτωσης μπορεί να κάνει τα παιχνίδια πιο ελκυστικά παρέχοντας στους παίκτες μια αίσθηση συνέχειας και προόδου. Οι παίκτες μπορούν να πειραματιστούν ελεύθερα, να δοκιμάσουν διαφορετικές προσεγγίσεις και να επιστρέψουν στο παιχνίδι αργότερα χωρίς να χάσουν τα επιτεύγματά τους.

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