Πώς να προγραμματίσετε παιχνίδια στον υπολογιστή (με εικόνες)

Πίνακας περιεχομένων:

Πώς να προγραμματίσετε παιχνίδια στον υπολογιστή (με εικόνες)
Πώς να προγραμματίσετε παιχνίδια στον υπολογιστή (με εικόνες)
Anonim

Έχετε ιδέα για ένα παιχνίδι υπολογιστή και θέλετε να το κάνετε πραγματικότητα; Or έχετε αναρωτηθεί ποτέ πώς γράφονται τα παιχνίδια στον υπολογιστή; Αυτό το wikiHow σας διδάσκει πώς να γράψετε τρία βασικά παιχνίδια στον υπολογιστή σε Python. Θα χρειαστείτε μια βασική κατανόηση της Python και γενικών εννοιών προγραμματισμού για να αναπτύξετε το πρώτο σας παιχνίδι.

Βήματα

Μέρος 1 από 3: Δημιουργία παιχνιδιού με κείμενο

5692759 1
5692759 1

Βήμα 1. Επιλέξτε μια γλώσσα προγραμματισμού

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

  • Σε τι χρησιμοποιείται κυρίως η γλώσσα;

    Ορισμένες γλώσσες προγραμματισμού, όπως η JavaScript, έχουν σχεδιαστεί για χρήση στον ιστό, ενώ άλλες, όπως Python, C ή C ++, έχουν σχεδιαστεί για την εκτέλεση προγραμμάτων υπολογιστή. Για το παιχνίδι σας, στοχεύστε σε μια γλώσσα με ευρύτερο φάσμα χρήσης, όπως Python, C, C ++ ή JavaScript.

  • Πόσο δύσκολο είναι να μάθεις;

    Παρόλο που η συγγραφή ενός προγράμματος θα πρέπει να είναι αρκετά εύκολη μετά από κάποια πρακτική σε οποιαδήποτε κανονική γλώσσα προγραμματισμού (δηλαδή, όχι ειδικά σχεδιασμένη να προκαλεί σύγχυση όπως το Malbolge), μερικά είναι πιο φιλικά για αρχάριους από άλλα. Οι Java και C, για παράδειγμα, θα απαιτήσουν από εσάς να κατανοήσετε βαθύτερες έννοιες προγραμματισμού από κάτι όπως η Python, η οποία είναι γνωστή για την πιο προσιτή και απλή σύνταξη.

  • Πού μπορώ να το χρησιμοποιήσω;

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

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

5692759 2
5692759 2

Βήμα 2. Ετοιμάστε τον υπολογιστή σας

Τα δύο κύρια στοιχεία που θα χρειαστείτε είναι ένας επεξεργαστής κειμένου, στον οποίο θα γράψετε τον κώδικά σας και ένας μεταγλωττιστής, τον οποίο θα χρησιμοποιήσετε για να τον μετατρέψετε σε παιχνίδι. Εάν θέλετε να ακολουθήσετε το παράδειγμα σε αυτό το άρθρο, θα πρέπει να εγκαταστήσετε την Python και να μάθετε πώς να εκτελείτε προγράμματα. Εάν θέλετε, μπορείτε να δημιουργήσετε ένα IDE (Integraded Desktop Environment), το οποίο συνδυάζει την επεξεργασία, τη μεταγλώττιση και τον εντοπισμό σφαλμάτων σε ένα μόνο πρόγραμμα. Το IDE της Python ονομάζεται IDLE. Αλλά μπορείτε επίσης να χρησιμοποιήσετε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου που υποστηρίζει απλό κείμενο, όπως Σημειωματάριο για Windows, TextEdit για macOS ή Vim για Linux.

5692759 3
5692759 3

Βήμα 3. Γράψτε έναν κωδικό για να χαιρετήσετε τον παίκτη

Ο παίκτης θα θέλει να μάθει τι συμβαίνει και τι πρέπει να κάνει, οπότε θα πρέπει να εκτυπώσετε κάποιο κείμενο γι 'αυτόν.

  • Αυτό γίνεται με τη συνάρτηση print () στην Python. Για να το δοκιμάσετε, ανοίξτε ένα νέο αρχείο με την επέκταση.py, εισαγάγετε τον ακόλουθο κώδικα σε αυτό, αποθηκεύστε και εκτελέστε το:

    εκτύπωση ("Καλώς ορίσατε στο παιχνίδι εικασίας αριθμών!") εκτύπωση ("Εισαγάγετε έναν ακέραιο αριθμό μεταξύ 1 και 1000:")

5692759 4
5692759 4

Βήμα 4. Δημιουργήστε έναν τυχαίο αριθμό

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

  • Η Python δεν έχει ενσωματωμένη συνάρτηση τυχαίου αριθμού, αλλά έχει μια τυπική βιβλιοθήκη (αυτό σημαίνει ότι ο χρήστης δεν θα χρειαστεί να εγκαταστήσει τίποτα επιπλέον). Πηγαίνετε λοιπόν στην αρχή του κωδικού σας (πριν από τις λειτουργίες εκτύπωσης ()) και πληκτρολογήστε την τυχαία εισαγωγή γραμμής.
  • Χρησιμοποιήστε την τυχαία συνάρτηση. Ονομάζεται randint (), βρίσκεται στην τυχαία βιβλιοθήκη που μόλις εισαγάγατε και παίρνει την ελάχιστη και μέγιστη τιμή που μπορεί να έχει ο αριθμός ως όρισμα. Επιστρέψτε λοιπόν στο τέλος του κωδικού σας και εισαγάγετε την ακόλουθη γραμμή:

    rightNum = random.randint (0, 1000)

5692759 5
5692759 5

Βήμα 5. Λάβετε πληροφορίες από τη συσκευή αναπαραγωγής

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

  • Δεδομένου ότι ο κωδικός που εισαγάγατε εκτυπώνει την εντολή εισαγωγής ενός αριθμού στη συσκευή αναπαραγωγής, θα πρέπει επίσης να διαβάζει τον αριθμό που εισάγουν. Αυτό γίνεται με την είσοδο () στην Python 3 και την raw_input () στην Python 2. Θα πρέπει να γράψετε στην Python 3, καθώς η Python 2 σύντομα θα ξεπεραστεί. Προσθέστε την ακόλουθη γραμμή στον κωδικό σας για να αποθηκεύσετε την είσοδο της συσκευής αναπαραγωγής σε μια μεταβλητή που ονομάζεται αριθμός:

    userNum = είσοδος ()

5692759 6
5692759 6

Βήμα 6. Μετατρέψτε την είσοδο της συσκευής αναπαραγωγής σε έναν τύπο δεδομένων που μπορεί να χρησιμοποιηθεί

Ο παίκτης έχει εισαγάγει έναν αριθμό-τώρα τι;

  • Κάντε την είσοδο του παίκτη έναν αριθμό. Τώρα, αυτό μπορεί να ακούγεται μπερδεμένο επειδή μόλις εισήγαγαν έναν αριθμό. Υπάρχει όμως ένας καλός λόγος: η Python υποθέτει ότι όλη η εισαγωγή είναι κείμενο ή "συμβολοσειρά", όπως ονομάζεται στον προγραμματισμό. Αυτό το κείμενο περιέχει τον αριθμό που θέλετε να λάβετε. Η Python έχει μια συνάρτηση που μετατρέπει μια συμβολοσειρά που περιέχει μόνο έναν αριθμό στον αριθμό μέσα. Τύπος:

    userNum = int (userNum)

5692759 7
5692759 7

Βήμα 7. Συγκρίνετε τον αριθμό του παίκτη με τον σωστό αριθμό

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

ενώ userNum! = rightNum: userNum = int (είσοδος ())

5692759 8
5692759 8

Βήμα 8. Δώστε ανατροφοδότηση στον παίκτη

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

  • Σίγουρα, θα μπορούσατε απλά να πείτε στον παίκτη αν ο αριθμός τους είναι σωστός ή λάθος. Αλλά με αυτήν την προσέγγιση, ο παίκτης μπορεί να χρειαστεί να μαντέψει 1000 φορές στη χειρότερη περίπτωση, κάτι που θα ήταν πολύ βαρετό.
  • Πείτε λοιπόν στον παίκτη αν ο αριθμός τους είναι πολύ μικρός ή πολύ μεγάλος. Αυτό θα μειώσει σημαντικά τον αριθμό των εικασιών τους. Εάν, για παράδειγμα, ο παίκτης μαντέψει πρώτα 500 και το παιχνίδι απαντήσει "Πολύ μεγάλο. Δοκιμάστε ξανά", θα υπάρχουν μόνο 500 δυνατοί αριθμοί αντί για 1000. Αυτό γίνεται με κατασκευές if, οπότε αντικαταστήστε την εκτύπωση ("Λάθος Δοκιμάστε ξανά. ") Με ένα.
  • Λάβετε υπόψη ότι ο έλεγχος αν δύο αριθμοί είναι ίδιοι γίνεται με == και όχι με =. = εκχωρεί την τιμή δεξιά της στη μεταβλητή αριστερά της!
  • if userNum <rightNum: print ("Too small. Try again:") if userNum> rightNum: print ("Too large. Try again:")

5692759 9
5692759 9

Βήμα 9. Δοκιμάστε τον κωδικό σας

Ως προγραμματιστής, θα πρέπει να είστε σίγουροι ότι ο κώδικάς σας λειτουργεί πριν τον θεωρήσετε τελειωμένο.

  • Κατά τον προγραμματισμό σε python, βεβαιωθείτε ότι έχετε λάβει σωστά τις εσοχές. Ο κωδικός σας πρέπει να μοιάζει με αυτόν:

    εισαγωγή τυχαίας εκτύπωσης ("Καλώς ορίσατε στο παιχνίδι εικασίας αριθμών!") εκτύπωση ("Εισαγάγετε έναν ακέραιο αριθμό μεταξύ 1 και 1000:") rightNum = random.randint (0, 1000) userNum = input () userNum = int (userNum) ενώ userNum! = rightNum: if userNum <rightNum: print ("Too small. Try again:") if userNum> rightNum: print ("Too large. Try again:") userNum = int (input ()) print ("You guessed σωστά.")

5692759 10
5692759 10

Βήμα 10. Επικυρώστε την είσοδο

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

  • Ανοίξτε ξανά το παιχνίδι και δοκιμάστε να εισαγάγετε οτιδήποτε δεν είναι αριθμός. Το παιχνίδι θα βγει με ValueError. Για να αποφευχθεί αυτό, μπορείτε να εφαρμόσετε έναν τρόπο για να ελέγξετε εάν η είσοδος ήταν αριθμός.
  • Ορίστε μια συνάρτηση. Δεδομένου ότι η επικύρωση της εισόδου είναι αρκετά μεγάλη και πρέπει να το κάνετε πολλές φορές, θα πρέπει να ορίσετε μια συνάρτηση. Δεν θα χρειαστεί κανένα επιχείρημα και θα επιστρέψει έναν αριθμό. Αρχικά, γράψτε def numInput (): στο επάνω μέρος του κωδικού σας, ακριβώς κάτω από την τυχαία εισαγωγή.
  • Λάβετε μία φορά την είσοδο του παίκτη. Χρησιμοποιήστε τη συνάρτηση εισόδου () και αντιστοιχίστε το αποτέλεσμα στη μεταβλητή εισόδου.
  • Όταν η είσοδος του παίκτη δεν είναι αριθμός, ζητήστε του να εισαγάγει έναν αριθμό. Για να ελέγξετε αν μια συμβολοσειρά είναι ένας αριθμός, χρησιμοποιήστε τις συναρτήσεις isdigit (), οι οποίες επιτρέπουν μόνο έναν ακέραιο αριθμό, οπότε δεν θα χρειαστεί να το ελέγξετε ξεχωριστά.
  • Εάν η είσοδος είναι αριθμός, μετατρέψτε τον από συμβολοσειρά σε αριθμό και επιστρέψτε το αποτέλεσμα. Χρησιμοποιήστε τη συνάρτηση int () για τη μετατροπή της συμβολοσειράς σε ακέραιο. Αυτό θα κάνει τη μετατροπή στον κύριο κώδικα περιττή και θα πρέπει να την αφαιρέσετε από εκεί.
  • Αντικαταστήστε όλες τις κλήσεις για είσοδο () στον κύριο κωδικό με κλήσεις προς numInput ().
  • Ο κωδικός της συνάρτησης numInput () θα μοιάζει με αυτόν:
  • def numInput (): inp = input () while not inp.isdigit (): print ("Σας είπαν να εισαγάγετε έναν ακέραιο αριθμό! Εισαγάγετε έναν ακέραιο αριθμό:") inp = input () return int (inp)

5692759 11
5692759 11

Βήμα 11. Δοκιμάστε ξανά το παιχνίδι

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

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

5692759 12
5692759 12

Βήμα 12. Προτείνετε επανεκκίνηση του παιχνιδιού όταν τελειώσει

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

  • Τοποθετήστε όλο τον κώδικα εκτός από την εισαγωγή και τον ορισμό της συνάρτησης σε έναν βρόχο while. Ορίστε True ως προϋπόθεση: αυτό θα είναι πάντα αλήθεια, οπότε ο βρόχος θα συνεχίσει για πάντα.
  • Ρωτήστε τον παίκτη εάν θέλει να παίξει ξανά αφού μαντέψει σωστά τον αριθμό. Χρησιμοποιήστε τη λειτουργία εκτύπωσης ().
  • Εάν απαντήσουν "Όχι", ξεφύγετε από το βλέμμα. Αν απαντήσουν σε οτιδήποτε άλλο, συνεχίστε. Η έξοδος από έναν βρόχο γίνεται με τη δήλωση διακοπής.
  • Μετακινήστε το "Καλώς ορίσατε στο παιχνίδι εικασίας αριθμών" έξω από τον βρόχο while. Ο παίκτης πιθανότατα δεν θέλει να καλωσορίζεται κάθε φορά που παίζει το παιχνίδι. Μετακινήστε την εκτύπωση οδηγιών ("Καλώς ορίσατε στο παιχνίδι εικασίας αριθμών!" Πάνω από το while True:, έτσι θα εκτυπωθεί μόνο μία φορά, όταν ο χρήστης ξεκινήσει το πρώτο παιχνίδι.
5692759 13
5692759 13

Βήμα 13. Δοκιμάστε το παιχνίδι

Θα πρέπει να δοκιμάζετε το παιχνίδι σας κάθε φορά που εφαρμόζετε μια νέα λειτουργία.

  • Βεβαιωθείτε ότι έχετε απαντήσει τουλάχιστον "Ναι" και "Όχι" τουλάχιστον μία φορά για να βεβαιωθείτε ότι και οι δύο επιλογές λειτουργούν. Δείτε πώς πρέπει να μοιάζει ο κωδικός σας:

    εισαγωγή τυχαίου def numInput (): inp = input () ενώ δεν είναι inp.isdigit (): print ("Σας είπαν να εισάγετε έναν ακέραιο αριθμό! Εισαγάγετε έναν ακέραιο αριθμό:") inp = input () return int (inp) print ("Καλώς ορίσατε στο παιχνίδι εικασίας αριθμών!") Ενώ True: print ("Εισαγάγετε έναν ακέραιο αριθμό μεταξύ 1 και 1000:") rightNum = random.randint (0, 1000) userNum = numInput () ενώ userNum! = RightNum: αν userNum <rightNum: print ("Too small. Try again:") if userNum> rightNum: print ("Too large. Try again:") userNum = numInput () print ("We guessed σωστά.") print ("Do you Θέλετε να παίξετε ξανά; Εισαγάγετε Όχι για διακοπή. ") if input () ==" No ": break

5692759 14
5692759 14

Βήμα 14. Γράψτε άλλα παιχνίδια βασισμένα σε κείμενο

Τι λέτε για να γράψετε μια περιπέτεια κειμένου στη συνέχεια; Or παιχνίδι κουίζ; Να είσαι δημιουργικός.

Υπόδειξη: Μερικές φορές είναι χρήσιμο να αναζητήσετε την τεκμηρίωση εάν δεν είστε σίγουροι πώς γίνεται κάτι ή πώς χρησιμοποιείται μια συνάρτηση. Η τεκμηρίωση Python 3 βρίσκεται στη διεύθυνση https://docs.python.org/3/. Μερικές φορές η αναζήτηση για ό, τι θέλετε να κάνετε στο διαδίκτυο δίνει επίσης καλά αποτελέσματα.

Μέρος 2 από 3: Δημιουργία παιχνιδιού με γραφικά 2D

5692759 15
5692759 15

Βήμα 1. Επιλέξτε μια βιβλιοθήκη γραφικών

Η δημιουργία γραφικών είναι πολύ περίπλοκη και οι περισσότερες γλώσσες προγραμματισμού (συμπεριλαμβανομένων των Python, C ++, C, JavaScript) παρέχουν ελάχιστη ή και καθόλου υποστήριξη για γραφικά στον πυρήνα ή τις τυπικές βιβλιοθήκες. Έτσι, θα πρέπει να χρησιμοποιήσετε μια εξωτερική βιβλιοθήκη για να μπορέσετε να δημιουργήσετε γραφικά, για παράδειγμα Pygame για Python.

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

Αυτό το άρθρο θα χρησιμοποιήσει την Python με το Cocos2D για να δείξει πώς να φτιάξετε ένα απλό 2D platformer. Ορισμένες από τις αναφερόμενες έννοιες μπορεί να μην υπάρχουν σε άλλες μηχανές παιχνιδιών. Ανατρέξτε στην τεκμηρίωσή τους για περισσότερες πληροφορίες.

5692759 16
5692759 16

Βήμα 2. Εγκαταστήστε τη βιβλιοθήκη γραφικών που επιλέξατε

Το Cocos2D για Python είναι εύκολο στην εγκατάσταση. Μπορείτε να το αποκτήσετε από τη διεύθυνση https://python.cocos2d.org/index.html, ή εκτελώντας sudo pip3 install cocos2d εάν χρησιμοποιείτε Linux.

5692759 17
5692759 17

Βήμα 3. Δημιουργήστε έναν νέο κατάλογο για το παιχνίδι και τα μέσα σας

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

5692759 18
5692759 18

Βήμα 4. Δημιουργήστε ένα νέο αρχείο κώδικα στο νέο κατάλογο

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

Σε αυτό το παράδειγμα, θα δημιουργήσουμε ένα αρχείο που ονομάζεται main.py και θα περιέχει όλο τον κώδικά μας

5692759 19
5692759 19

Βήμα 5. Δημιουργήστε το παράθυρο του παιχνιδιού

Αυτή είναι η βασική προϋπόθεση για ένα παιχνίδι με γραφικά.

  • Εισαγάγετε τις απαραίτητες υποενότητες cocos2d: cocos.director, cocos.scene και cocos.layer. Αυτό γίνεται με την εισαγωγή subModuleName *, όπου το όνομα υποενότητας είναι η υποενότητα που θέλετε να εισαγάγετε. Η διαφορά μεταξύ… εισαγωγής * και εισαγωγής… είναι ότι δεν χρειάζεται να βάλετε το όνομα της μονάδας μπροστά από ό, τι χρησιμοποιείτε από αυτήν την ενότητα με την πρώτη.
  • Ορίστε μια υποκατηγορία MainMenuBgr του ColorLayer. Αυτό ουσιαστικά σημαίνει ότι κάθε φόντο κύριου μενού που δημιουργείτε θα συμπεριφέρεται σαν ένα στρώμα χρώματος με κάποιες αλλαγές που κάνετε.
  • Ξεκινήστε τον διευθυντή cocos. Αυτό θα σας δώσει ένα νέο παράθυρο. Εάν δεν ορίσετε λεζάντα, το παράθυρο θα έχει την ίδια λεζάντα με το όνομα αρχείου (main.py), το οποίο δεν θα φαίνεται επαγγελματικό. Επιτρέψτε την αλλαγή του μεγέθους του παραθύρου με τη ρύθμιση αλλαγής μεγέθους σε True.
  • Ορισμός συνάρτησης showMainMenu. Θα πρέπει να βάλετε τον κωδικό για την εμφάνιση του κύριου μενού σε μια συνάρτηση γιατί αυτό θα σας επιτρέψει να επιστρέψετε εύκολα στο κύριο μενού καλώντας ξανά τη συνάρτηση.
  • Δημιουργήστε μια σκηνή. Η σκηνή αποτελείται από ένα επίπεδο προς το παρόν, το οποίο είναι ένα αντικείμενο της κλάσης MainMenuBgr που ορίσατε.
  • Εκτελέστε αυτήν τη σκηνή στο παράθυρο.
  • από cocos.director import * από cocos.scene import * από cocos.layer import * class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenu, self)._ init _ (0, 200, 255, 255) def showMainMenu (): menuSc = Σκηνή (MainMenuBgr ()) Director.run (menuSc) Director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()

5692759 20
5692759 20

Βήμα 6. Προσθέστε ένα κύριο μενού στο παράθυρο

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

  • Εισαγάγετε το μενού cocos.men (ξανά με τις οδηγίες από) και pyglet.app (αυτή τη φορά με εισαγωγή).
  • Ορίστε το MainMenu ως υποκατηγορία του Μενού.
  • Ρυθμίστε την ευθυγράμμιση του κύριου μενού. Πρέπει να ορίσετε ξεχωριστά την κατακόρυφη και την οριζόντια ευθυγράμμιση.
  • Δημιουργήστε μια λίστα με στοιχεία μενού και προσθέστε τα στο μενού. Θα πρέπει να έχετε τουλάχιστον τα στοιχεία μενού "Έναρξη παιχνιδιού" και "Κλείσιμο". Κάθε στοιχείο μενού πρέπει να τοποθετείται μέσα σε αγκύλες. Κάθε στοιχείο πρέπει να έχει μια ετικέτα και μια λειτουργία επανάκλησης που καθορίζει τι συμβαίνει όταν το κάνει κλικ ο παίκτης. Για το στοιχείο "Έναρξη παιχνιδιού", χρησιμοποιήστε τη λειτουργία startGame (θα το γράψετε σύντομα), για το στοιχείο "Έξοδος", χρησιμοποιήστε το "pyglet.app.exit" (υπάρχει ήδη). Δημιουργήστε το πραγματικό μενού καλώντας το self.create_menu (menuItems).
  • Ορισμός startGame (). Απλώς δώστε τον ορισμό προς το παρόν, θα το αντικαταστήσετε όταν γράφετε το πραγματικό παιχνίδι.
  • Μεταβείτε στο μέρος του κώδικα όπου δημιουργήσατε τη σκηνή menuSc και προσθέστε ένα αντικείμενο MainMenu σε αυτό.
  • Ολόκληρος ο κωδικός σας πρέπει τώρα να έχει την ακόλουθη μορφή:

    από cocos.director import * από cocos.menu import * από cocos.scene import * από cocos.layer import * import pyglet.app class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, self)._ init _ (0, 200, 255, 255) class MainMenu (Menu): def _init _ (self): super (MainMenu, self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Έναρξη παιχνιδιού ", startGame)), (MenuItem (" Quit ", pyglet.app.exit))] self.create_menu (menuItems) def startGame (): pass def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) Director.init (caption = "IcyPlat - a simple platformer", resizable = True) showMainMenu ()

5692759 21
5692759 21

Βήμα 7. Δοκιμάστε τον κωδικό σας

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

Ο κώδικας από τις οδηγίες θα πρέπει να ανοίξει ένα παράθυρο με τίτλο "IcyPlat - ένα απλό platformer." Το φόντο είναι γαλάζιο και μπορείτε να αλλάξετε το μέγεθος του παραθύρου. Όταν κάνετε κλικ στο "Έναρξη παιχνιδιού" στο μενού, τίποτα δεν πρέπει να συμβεί (ακόμα). Όταν κάνετε κλικ στην επιλογή "Έξοδος", το παράθυρο θα κλείσει

5692759 22
5692759 22

Βήμα 8. Δημιουργήστε ένα sprite

Το Sprite είναι ένα "αντικείμενο παιχνιδιού" ή μια εικόνα δύο διαστάσεων. Τα Sprites μπορούν να είναι αντικείμενα, εικονίδια, διακοσμήσεις φόντου, χαρακτήρες και οτιδήποτε άλλο μπορείτε να αναπαραστήσετε με μια εικόνα στο παιχνίδι. Θα ξεκινήσουμε δημιουργώντας ένα sprite για έναν χαρακτήρα με τον οποίο ο παίκτης μπορεί να αλληλεπιδράσει.

  • Εισαγάγετε το υπομονάδα cocos.sprite με την έκφραση "από-εισαγωγή".
  • Βρείτε μια εικόνα που αντιπροσωπεύει το sprite. Δεν μπορείτε να εμφανίσετε ένα Sprite εάν δεν έχετε εικόνα για αυτό. Μπορείτε να σχεδιάσετε ένα ή να το πάρετε από το Διαδίκτυο (προσέξτε τις άδειες, ωστόσο, εάν σκοπεύετε να δημοσιεύσετε το παιχνίδι σας). Για αυτό το παράδειγμα, κατευθυνθείτε στη διεύθυνση https://opengameart.org/content/tux-classic-hero-style και αποθηκεύστε την εικόνα-p.webp" />
  • Δημιουργήστε ένα επίπεδο ως νέο αντικείμενο της κλάσης ScrollableLayer. Στη συνέχεια, δημιουργήστε το Sprite ως αντικείμενο Sprite και ορίστε τη θέση του σε (8, 250). Για αναφορά, το σημείο (0, 0) βρίσκεται στην κάτω αριστερή γωνία. Αυτό είναι αρκετά υψηλό, αλλά θα διασφαλίσει ότι ο πιγκουίνος δεν θα κολλήσει στον πάγο.
  • Προσθέστε το sprite στο στρώμα του sprite.
  • Δημιουργήστε μια νέα σκηνή από το στρώμα του Sprite και τρέξτε την.
  • def startGame (): figLayer = ScrollableLayer () fig = Sprite ('pingu.png') fig.position = (75, 100) figLayer.add (fig) # gameSc = Scene (figLayer) Director.run (gameSc)

  • Εκτελέστε τον κώδικα. Θα πρέπει να δείτε μια μικρή φιγούρα πιγκουίνου (ή ό, τι σχεδιάσατε) σε μαύρο φόντο αφού κάνετε κλικ Ξεκίνα το παιχνίδι.
5692759 23
5692759 23

Βήμα 9. Ονειρευτείτε το τοπίο σας

Στα περισσότερα παιχνίδια, τα sprites σας δεν πρέπει να επιπλέουν μόνο στο κενό. Στην πραγματικότητα θα πρέπει να στέκονται σε κάποια επιφάνεια, με κάτι γύρω τους. Σε παιχνίδια 2D, αυτό γίνεται συχνά με ένα σετ πλακιδίων και έναν χάρτη πλακιδίων. Το σετ πλακιδίων λέει βασικά τι είδους τετράγωνα επιφάνειας και τετράγωνα φόντου υπάρχουν και πώς μοιάζουν.

  • Δημιουργήστε ένα σύνολο πλακιδίων. Το σετ πλακιδίων για αυτό το παιχνίδι θα είναι πολύ βασικό: ένα κεραμίδι για πάγο και ένα κεραμίδι για ουρανό. Το κεραμίδι πάγου που χρησιμοποιείται σε αυτό το παράδειγμα είναι από εδώ, σύμφωνα με το CC-BY-SA 3.0.
  • Δημιουργήστε μια εικόνα σετ πλακιδίων. Αυτή είναι μια εικόνα όλων των πλακιδίων, τα οποία πρέπει να έχουν το ίδιο μέγεθος (να τα επεξεργαστείτε αν δεν είναι) και να έχουν το μέγεθος που θέλετε να δείτε στο παιχνίδι, το ένα δίπλα στο άλλο. Αποθηκεύστε την εικόνα σας ως icyTiles.png.
  • Δημιουργήστε την περιγραφή του συνόλου πλακιδίων. Αυτό είναι ένα αρχείο XML. Το αρχείο XML περιέχει πληροφορίες σχετικά με το πόσο μεγάλα είναι τα πλακίδια στην εικόνα του κεραμιδιού, ποια εικόνα να χρησιμοποιήσετε και πού να βρείτε ποιο πλακίδιο εκεί. Δημιουργήστε ένα αρχείο XML με το όνομα icyTiles.xml με τον παρακάτω κώδικα:

         
    
5692759 24
5692759 24

Βήμα 10. Φτιάξτε έναν χάρτη πλακιδίων για το τοπίο σας

Ένας χάρτης πλακιδίων είναι ένας χάρτης που καθορίζει ποιο πλακίδιο βρίσκεται σε ποια θέση στο επίπεδό σας. Στο παράδειγμα, θα πρέπει να ορίσετε μια συνάρτηση για τη δημιουργία χαρτών πλακιδίων επειδή ο σχεδιασμός χαρτών πλακιδίων με το χέρι είναι πολύ κουραστικός. Ένα πιο προηγμένο παιχνίδι θα είχε συνήθως κάποιο είδος επεξεργαστή επιπέδου, αλλά για να εξοικειωθεί με την ανάπτυξη παιχνιδιών 2D, ένας αλγόριθμος μπορεί να παρέχει αρκετά καλά επίπεδα.

  • Μάθετε πόσες γραμμές και στήλες χρειάζονται. Για αυτό, διαιρέστε το μέγεθος της οθόνης με το μέγεθος πλακιδίων τόσο οριζόντια (στήλες) όσο και κάθετα (γραμμές). Στρογγυλοποιήστε τον αριθμό προς τα πάνω. χρειάζεστε μια συνάρτηση της μαθηματικής μονάδας για αυτό, οπότε προσθέστε το ανώτατο όριο εισαγωγής μαθηματικών στις εισαγωγές στο επάνω μέρος του κώδικα.
  • Ανοίξτε ένα αρχείο για εγγραφή. Αυτό θα διαγράψει όλο το προηγούμενο περιεχόμενο του αρχείου, οπότε επιλέξτε ένα όνομα που δεν έχει ακόμη κανένα αρχείο στον κατάλογο, όπως το levelMap.xml.
  • Γράψτε τις αρχικές ετικέτες στο αρχείο.
  • Δημιουργήστε έναν χάρτη πλακιδίων σύμφωνα με τον αλγόριθμο. Χρησιμοποιείτε αυτό στον παρακάτω κώδικα ή μπορείτε να το βρείτε μόνοι σας. Βεβαιωθείτε ότι έχετε εισαγάγει τη συνάρτηση randint από την ενότητα τυχαία: απαιτείται για να λειτουργήσει ο παρακάτω κώδικας και ό, τι και αν καταλήξετε πιθανότατα θα χρειαστεί επίσης τυχαίους ακέραιους αριθμούς. Επίσης, βεβαιωθείτε ότι έχετε τοποθετήσει πλακάκια ουρανού και κεραμίδια σε διαφορετικά στρώματα: ο πάγος είναι συμπαγής, ο ουρανός όχι.
  • Γράψτε τις ετικέτες κλεισίματος στο αρχείο και κλείστε το αρχείο.
  • def generateTilemap (): colAmount = ceil (800 /16) * 3 # (πλάτος οθόνης / μέγεθος κεραμιδιού) * 3 rowAmount = ceil (600 /16) # ύψος οθόνης / μέγεθος κεραμιδιώνFile = open ("levelMap.xml", " w ") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) for i in range (0, colAmount): tileFile.write ('') makeHole = False if randint (0, 50) == 10 και i! = 0: # δεν επιτρέπονται τρύπες στο σημείο αναπαραγωγής makeHole = True για j στην περιοχή (0, rowAmount): if makeHole: tileFile.write ('\ n') else: if j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight+5) αν iceHeight <0: # περιορίστε τα κεραμίδια από τον πολύ χαμηλό πάγοHeight = randint (1, 5) if iceHeight> rowAmount: # όριο πλακιδίων από πολύ υψηλό πάγοHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n') tileFile.write ('\ n / n') για i in range (0, colAmount): tileFile.write ('') για j σε εύρος (0, rowAmount): tileFile.write ('\ n') tileFile.write ('\ n ') tileFile.write (' / n / n ') tileFile.close ()

5692759 25
5692759 25

Βήμα 11. Εμφάνιση του χάρτη πλακιδίων

Εισαγάγετε τα πάντα από το cocos.tiles και, στη συνέχεια, μεταβείτε στη λειτουργία startGame για αυτό.

  • Στην αρχή της λειτουργίας startGame, δημιουργήστε έναν χάρτη πλακιδίων χρησιμοποιώντας τη συνάρτηση που ορίσατε για αυτό.
  • Δημιουργήστε έναν νέο διαχειριστή κύλισης. Κάντε το απευθείας κάτω από τη γραμμή όπου προσθέτετε το sprite στο στρώμα του.
  • Δημιουργήστε ένα νέο στρώμα που περιέχει τα πλακίδια, το οποίο θα φορτωθεί από τον χάρτη πλακιδίων levelMap.xml που δημιουργήθηκε από τη λειτουργία generateTilemap που δημιουργήσατε.
  • Προσθέστε το μη στερεό στρώμα, το στερεό στρώμα και το στρώμα sprite στον διαχειριστή κύλισης, ακριβώς με αυτή τη σειρά. Μπορείτε να προσθέσετε μια θέση z εάν θέλετε.
  • Αντί να δημιουργήσετε τη σκηνή από το σπρέιτ στρώμα, δημιουργήστε τη από το πρόγραμμα κύλισης.
  • Η λειτουργία startGame θα πρέπει τώρα να μοιάζει με αυτήν:

    def startGame (): generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 500) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Σκηνή (scrMang) Director.run (gameSc)

5692759 26
5692759 26

Βήμα 12. Δοκιμάστε τον κωδικό σας

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

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

5692759 27
5692759 27

Βήμα 13. Προσθέστε τα στοιχεία ελέγχου

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

  • Εισαγάγετε τα πάντα από το cocos.mapcolliders και από το cocos.actions. Επίσης εισαγάγετε κλειδί από το pyglet.window.
  • "Δήλωση" ορισμένων παγκόσμιων μεταβλητών. Οι συνολικές μεταβλητές μοιράζονται μεταξύ των συναρτήσεων. Δεν μπορείτε πραγματικά να δηλώσετε μεταβλητές στην Python, αλλά πρέπει να πείτε ότι υπάρχει μια καθολική μεταβλητή στον κύριο κώδικα πριν τη χρησιμοποιήσετε. Μπορείτε να αντιστοιχίσετε το 0 ως τιμή επειδή μια συνάρτηση θα φροντίσει να εκχωρήσει τη σωστή τιμή αργότερα. Προσθέστε λοιπόν κάτω από τις εκφράσεις εισαγωγής:

    # "δήλωση" καθολικών μεταβλητών πληκτρολόγιο = 0 scrMang = 0

  • Προσαρμόστε τη λειτουργία startGame:

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

    def startGame (): παγκόσμιο πληκτρολόγιο, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml ') solidTiles = tileLayer [' solid '] nsoliTiles = tileLayer [' not_solid '] # keyboard = key. KeyStateHandler () Director.window.push_handlers (πληκτρολόγιο) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (velocity_on = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add (nsoliTiles, z = -1) scrMang.add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc)

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

    • Ορίστε τον ελεγκτή platformer ως υποκατηγορία δράσης.
    • Ορίστε την ταχύτητα κίνησης, την ταχύτητα άλματος και τη βαρύτητα.
    • Ορίστε τη λειτουργία έναρξης. Αυτή η λειτουργία καλείται μία φορά, όταν ο ελεγκτής πλατφόρμας είναι συνδεδεμένος στο σχήμα. Θα πρέπει να θέσει την ταχύτητά του στο 0 τόσο στην x όσο και στην κατεύθυνση y.
    • Ορίστε τη συνάρτηση βήματος. Θα επαναληφθεί όσο τρέχει η σκηνή.
    • Πείτε στη συνάρτηση βήμα να χρησιμοποιεί τις καθολικές μεταβλητές πληκτρολόγιο και scrMang.
    • Πάρτε και αλλάξτε την ταχύτητα. Αποθηκεύστε το x και την ταχύτητα y σε ξεχωριστές μεταβλητές. Ρυθμίστε την ταχύτητα x είτε στο 1 είτε στο -1 (ανάλογα με το αν πατήθηκε το αριστερό ή το δεξί πλήκτρο) πολλαπλασιασμένο με την ταχύτητα κίνησης. Προσθέστε βαρύτητα στην ταχύτητα y. Πολλαπλασιάστε το με χρόνο διακοπής, ώστε να λειτουργεί με τον ίδιο τρόπο σε πιο αργές συσκευές. Εάν πατήσετε το πλήκτρο διαστήματος και το σχήμα στέκεται στο έδαφος, πηδήξτε αλλάζοντας την ταχύτητα y σε ταχύτητα άλματος.
    • Υπολογίστε πού πρέπει να μετακινηθεί το σχήμα. Στη συνέχεια, αφήστε τον χειριστή σύγκρουσης να ρυθμίσει αυτή τη θέση εάν βρίσκεται μέσα σε ένα συμπαγές κεραμίδι. Τέλος, μετακινήστε το σχήμα στη νέα προσαρμοσμένη θέση.
    • Ορίστε την εστίαση του διαχειριστή κύλισης στο σχήμα. Αυτό προκαλεί την κίνηση της κάμερας με λογικό τρόπο όταν το σχήμα κινείται.

    class PlatformerController (Action): παγκόσμιο πληκτρολόγιο, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def step (self, dt): global keyboard, scroller if dt> 0,1: # μην κάνετε τίποτα κατά τη διακοπή σε μεγάλη επιστροφή vx, vy = self.target.velocity vx = (πληκτρολόγιο [πλήκτρο. ΔΕΞΙΑ] - πληκτρολόγιο [key. LEFT]) * self. MOVE_SPEED vy + = self. GRAVITY * dt if self.on_ground και πληκτρολόγιο [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y += dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (*new.center)

5692759 28
5692759 28

Βήμα 14. Δοκιμάστε τον κωδικό σας

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

5692759 29
5692759 29

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

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

  • Μέσα στον ελεγκτή πλατφόρμας, μετά το σύνολο εστίασης, πάρτε τη θέση x και y του σχήματος. Εάν η θέση y είναι μικρότερη από 0, καλέστε τη συνάρτηση finishGame () (θα το γράψετε αργότερα) με το "Game Over" ως όρισμα. Εάν η θέση x είναι μεγαλύτερη από το μέγεθος της οθόνης πολλαπλασιασμένο με 3 (το είχατε ορίσει ως μέγεθος επιπέδου πριν).

    posX, posY = self.target.position if posY <0: finishGame ("Game Over") επιστροφή αν posX> 800*3: # επίπεδο επιπέδου finishGame ("Level Completed") επιστροφή

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

    class FinishMenu (Menu): def _init _ (self, text): super (FinishMenu, self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Try again", startGame)), (MenuItem ("Quit", pyglet.app.exit))] self.create_menu (menuItems)

  • Ορίστε τη συνάρτηση finishGame (). Θα πρέπει να λάβει το κείμενο ως επιχείρημα. Θα πρέπει να κάνει μια σκηνή από το υπόβαθρο του κύριου μενού, ένα FinishMenu με το όρισμα κειμένου να μεταφέρεται σε αυτό το μενού. Τότε θα πρέπει να τρέξει αυτή τη σκηνή.

    def finishGame (κείμενο): menuSc = Σκηνή (MainMenuBgr ()) menuSc.add (FinishMenu (κείμενο)) Director.run (menuSc)

5692759 30
5692759 30

Βήμα 16. Προσθέστε πιστώσεις

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

  • Δημιουργήστε ένα αρχείο ΠΙΣΤΩΣΕΙΣ και εισαγάγετε όλες τις πιστώσεις σας εκεί, όπως αυτό:

    Penguin: Kelvin Shadewing, under CC0 Ice block: Michał Banas digit1024 on opengameart.org under CC-BY-SA 3.0

  • Επιστρέψτε στον κώδικα Python και εισαγάγετε την ετικέτα από το cocos.text.
  • Ορίστε μια υποκατηγορία Credits of Layer. Στη συνάρτηση _init_, διαβάστε το αρχείο ΠΙΣΤΩΣΕΙΣ και δημιουργήστε μια ετικέτα κειμένου στη σωστή θέση από κάθε γραμμή σε αυτό.

    class Credits (Layer): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n ") για i στην περιοχή (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x =" left ", anchor_y =" top ") credLabel.position = 25, 500- (i +1)*40 self.add (credLabel)

  • Μεταβείτε στην κύρια κατηγορία μενού και προσθέστε ένα στοιχείο μενού με την ένδειξη "Credits" που καλεί τη λειτουργία showCredits όταν κάνετε κλικ.
  • Ορίστε μια υποκλάση BackToMainMenuButton του μενού. Κάντε αυτό ένα μενού με ένα στοιχείο, με την ένδειξη "Πίσω", το οποίο καλεί τη λειτουργία showMainMenu. Αυτό το "μενού", το οποίο μοιάζει περισσότερο με κουμπί, θα πρέπει να ευθυγραμμίζεται κάθετα προς τα κάτω και οριζόντια προς τα πάνω.

    class BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("self"), showMainM], showMainM] create_menu (menuItems)

  • Ορίστε τη συνάρτηση showCredits. Θα πρέπει να δημιουργήσει μια σκηνή από ένα επίπεδο MainMenuBgr και ένα επίπεδο Credits και να εκτελέσει αυτήν τη σκηνή.

    def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuButton ()) Director.run (credSc)

5692759 31
5692759 31

Βήμα 17. Ελέγξτε τον κωδικό σας

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

    από cocos.director import * από cocos.menu εισαγωγή * από cocos.scene εισαγωγή * από cocos.layer εισαγωγή * από cocos.sprite εισαγωγή * από cocos.tiles εισαγωγή * από cocos.mapcolliders εισαγωγή * από cocos.actions εισαγωγή * από cocos.text import Label import pyglet.app from pyglet.window key import from math import ceil from random random randint # "declaring" global variables keyboard = 0 scrMang = 0 class MainMenuBgr (ColorLayer): def _init _ (self): super (MainMenuBgr, self)._ init _ (0, 200, 255, 255) class MainMenu (Menu): def _init _ (self): super (MainMenu, self)._ init _ ("") self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Έναρξη Παιχνιδιού", startGame)), (MenuItem ("Credits", showCredits)), (MenuItem ("Quit", pyglet.app.exit))] self.create_menu (menuItems) credits class (Layer): def _init _ (self): super (Credits, self)._ init _ () credFile = open ("CREDITS", "r") creds = credFile.read () creds = creds.split ("\ n") για i στο εύρος (0, len (creds)): credLabel = Label (creds , font_size = 32, anchor_x = "left", anchor_y = "top") credLabel.position = 25, 500- (i+1)*40 self.add (credLabel) class BackToMainMenuButton (Menu): def _init _ (self): super (BackToMainMenuButton, self)._ init _ ("") self.menu_valign = BOTTOM self.menu_halign = LEFT menuItems = [(MenuItem ("Back", showMainMenu))] self.create_menu (menuItems) class FinishMen_ (Menu) self, κείμενο): super (FinishMenu, self)._ init _ (text) self.menu_valign = CENTER self.menu_halign = CENTER menuItems = [(MenuItem ("Try again", startGame)), (MenuItem ("Quit", pyglet app.exit))] self.create_menu (menuItems) class PlatformerController (Action): παγκόσμιο πληκτρολόγιο, scrMang on_ground = True MOVE_SPEED = 300 JUMP_SPEED = 500 GRAVITY = -1200 def start (self): self.target.velocity = (0, 0) def step (self, dt): καθολικό πληκτρολόγιο, scroller αν dt> 0,1: # μην κάνετε τίποτα ενώ ο χρόνος διακοπής είναι πολύ μεγάλος με επιστροφή vx, vy = self.target.velocity vx = (πληκτρολόγιο [key. RIGHT] - πληκτρολόγιο [key. LEFT]) * self. MOVE_SPEED vy += self. GRAVITY * dt αν self.on _ground και πληκτρολόγιο [key. SPACE]: vy = self. JUMP_SPEED dx = vx * dt dy = vy * dt last = self.target.get_rect () new = last.copy () new.x += dx new.y + = dy self.target.velocity = self.target.collision_handler (last, new, vx, vy) self.on_ground = (new.y == last.y) self.target.position = new.center scrMang.set_focus (* new.center) posX, posY = self.target.position if posY <0: finishGame ("Game Over") return if posX> 800*3: # level level finishGame ("Level Completed") return def finishGame (text): menuSc = Σκηνή (MainMenuBgr ()) menuSc.add (FinishMenu (κείμενο)) Director.run (menuSc) def showCredits (): credSc = Scene (MainMenuBgr ()) credSc.add (Credits ()) credSc.add (BackToMainMenuBenu)) Director.run (credSc) def generateTilemap (): colAmount = ceil (800 /16) * 3 # (πλάτος οθόνης / μέγεθος πλακιδίων) * 3 rowAmount = ceil (600 /16) # ύψος οθόνης / μέγεθος κεραμιδιώνFile = open ("levelMap.xml", "w") tileFile.write ('\ n / n / n') iceHeight = randint (1, 10) for i in range (0, colAmount): tileFile.write ('') makeHole = Λάθος αν ραντ int (0, 50) == 10 και i! = 0: # δεν επιτρέπονται τρύπες στο σημείο αναπαραγωγής makeHole = True για j στην περιοχή (0, rowAmount): if makeHole: tileFile.write ('\ n') else: εάν j <= iceHeight: tileFile.write ('\ n') else: tileFile.write ('\ n') iceHeight = randint (iceHeight-5, iceHeight+5) αν iceHeight <0: # περιορίστε τα κεραμίδια από το να πάτε επίσης low iceHeight = randint (1, 5) if iceHeight> rowAmount: # όριο πλακιδίων από πολύ υψηλό πάγοHeight = randint (int (rowAmount/2) -5, int (rowAmount/2) +5) tileFile.write ('\ n ') tileFile.write (' / n / n ') για i in range (0, colAmount): tileFile.write (' ') για j σε εύρος (0, rowAmount): tileFile.write (' / n ') tileFile.write ('\ n') tileFile.write ('\ n / n') tileFile.close () def startGame (): παγκόσμιο πληκτρολόγιο, scrMang generateTilemap () # fig = Sprite ('pingu.png') fig.position = (8, 250) figLayer = ScrollableLayer () figLayer.add (fig) # tileLayer = load ('levelMap.xml') solidTiles = tileLayer ['solid'] nsoliTiles = tileLayer ['not_solid'] # keyboard = key. KeyStateHandler () Director.window.push_handlers (πληκτρολόγιο ard) # fig.do (PlatformerController ()) mapcollider = RectMapCollider (velocity_on_bump = 'slide') fig.collision_handler = make_collision_handler (mapcollider, solidTiles) # scrMang = ScrollingManager () scrMang.add, add (solidTiles, z = 0) scrMang.add (figLayer, z = 1) # gameSc = Scene (scrMang) Director.run (gameSc) def showMainMenu (): menuSc = Scene (MainMenuBgr ()) menuSc.add (MainMenu ()) Director.run (menuSc) παράθυρο = Director.init (λεζάντα = "IcyPlat - ένας απλός πλατφόρμας", resizable = True) showMainMenu ()

  • Αυτές είναι 168 γραμμές συνολικά και 152 γραμμές αν μετράτε μόνο τον κωδικό. Αυτό μοιάζει πολύ, αλλά για ένα τόσο περίπλοκο παιχνίδι, αυτό είναι στην πραγματικότητα ένα μικρό ποσό.
5692759 32
5692759 32

Βήμα 18. Ολοκληρώθηκε

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

Μέρος 3 από 3: Δημοσίευση παιχνιδιού

5692759 52
5692759 52

Βήμα 1. Γράψτε τις εξαρτήσεις

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

5692759 53
5692759 53

Βήμα 2. Βεβαιωθείτε ότι έχετε άδεια χρήσης όλων των μέσων

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

  • Συχνά υπάρχουν ορισμένες προϋποθέσεις, όπως η πίστωση του συγγραφέα ή η κοινή χρήση τροποποιήσεων των μέσων με την ίδια άδεια. Μερικές φορές θα μπορείτε να χρησιμοποιείτε γραφικά χωρίς να αποδίδετε στους δημιουργούς αρκεί να μην χρεώνετε για το παιχνίδι. Εάν πρέπει να πιστώσετε τον συγγραφέα, κάντε το σε ένα καλά ορατό μέρος, όπως μια καρτέλα "Πιστώσεις" στο παιχνίδι σας.
  • Υπάρχουν επίσης μέσα με διεκδίκηση πνευματικών δικαιωμάτων και χωρίς καθορισμένη άδεια, μερικές φορές με κάποιο κείμενο όπως "Διατηρούνται όλα τα δικαιώματα". Εάν συμβαίνει αυτό, πρέπει να λάβετε ρητή άδεια από τον συγγραφέα πριν την συμπεριλάβετε στο παιχνίδι σας.
  • Οι βιβλιοθήκες συνήθως κυκλοφορούν με άδειες που επιτρέπουν τη χρήση τους ως βιβλιοθήκη. Μια αξιοσημείωτη εξαίρεση είναι η GPL χωρίς εξαίρεση σύνδεσης: Μια τέτοια άδεια επιτρέπει μόνο τη χρήση της σε πρόγραμμα με ορισμένες άδειες. Και θα πρέπει πάντα να διαβάζετε τουλάχιστον τα βασικά σημεία της άδειας για να βεβαιωθείτε ότι ό, τι κάνετε με τα μέσα ή τη βιβλιοθήκη επιτρέπεται.

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

5692759 54
5692759 54

Βήμα 3. Αποφασίστε για τις συνθήκες στις οποίες θέλετε να δημοσιεύσετε το παιχνίδι σας

Θα πουλήσετε το παιχνίδι σας; Θέλετε να επιτρέψετε σε άλλους να χρησιμοποιούν τις εικόνες και τις ιδέες σας; Ενώ πρέπει να είστε προσεκτικοί σχετικά με τα μέσα που χρησιμοποιείτε στο έργο σας, συνήθως μπορείτε να αποφασίσετε πώς θέλετε να επιτρέψετε σε άλλους να χρησιμοποιούν το παιχνίδι σας. Μπορείτε να χρησιμοποιήσετε μια άδεια Creative Commons CC0 για να κυκλοφορήσετε το παιχνίδι σας σε δημόσιο τομέα. Για να επιτρέψετε τη διανομή και την τροποποίηση υπό ορισμένες συνθήκες διατηρώντας ορισμένα δικαιώματα, δοκιμάστε την Gnu General Public License (GPL) ή την άδεια Berkeley Software Distribution (BSD). Or, θα μπορούσατε να κάνετε το λογισμικό σας ιδιόκτητο, πράγμα που σημαίνει ότι δεν επιτρέπεται σε κανέναν να το διανείμει ή να το τροποποιήσει χωρίς την άδειά σας.

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

5692759 55
5692759 55

Βήμα 4. Αποφασίστε πώς θέλετε να δημοσιεύσετε το παιχνίδι σας

Κάθε μέθοδος έχει ορισμένα πλεονεκτήματα και μειονεκτήματα, οπότε πρέπει να αποφασίσετε μόνοι σας.

  • Δημοσίευση σε ιστότοπο:

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

  • Δημιουργία πακέτου για διαχειριστή πακέτων:

    Υπάρχουν διαφορετικοί διαχειριστές πακέτων, όπως οι apt, Yum και Homebrew, που διευκολύνουν τους χρήστες να εγκαταστήσουν εφαρμογές σε περιβάλλοντα που βασίζονται σε Linux και Linux. Όλα έχουν διαφορετικές μορφές πακέτων. Το καλό με τα πακέτα είναι ότι εγκαθιστούν αυτόματα όλες τις εξαρτήσεις (αν τις διαμορφώσετε σωστά). Έτσι, ο παίκτης πρέπει μόνο να εγκαταστήσει το πακέτο σας και στη συνέχεια να παίξει το παιχνίδι. Το πρόβλημα είναι ότι υπάρχουν πολλοί διαφορετικοί διαχειριστές πακέτων σε διαφορετικές πλατφόρμες, οπότε θα πρέπει να εργαστείτε για την παροχή πακέτων για όλα τα πιο συνηθισμένα.

5692759 56
5692759 56

Βήμα 5. Άμεση προσοχή στο πρόγραμμά σας

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

Συμβουλές

  • Να είστε υπομονετικοί και πρόθυμοι να μάθετε. Ο προγραμματισμός μπορεί μερικές φορές να είναι απογοητευτικός!
  • Αν αναρωτιέστε πώς γίνεται κάτι σε άλλο παιχνίδι και το παιχνίδι είναι ανοιχτού κώδικα, μπορείτε να δείτε τον πηγαίο κώδικα του.
  • Όταν ψάχνετε για μέσα, προσπαθήστε να βρείτε περιεχόμενο δημόσιου τομέα. Αναζητήστε εικόνες και μουσική "Creative Commons" ή "Public Domain" και χρησιμοποιήστε ιστότοπους όπως https://opengameart.org ή
  • Μην αντιγράφετε μεγάλα κομμάτια κώδικα χωρίς να ελέγξετε την άδεια χρήσης. Συχνά απαγορεύεται, και αν όχι, συνήθως απαιτεί απόδοση.
  • Μην κάνετε ανεπιθύμητα μηνύματα ή μηνύματα σε ακατάλληλα μέρη κατά την προώθηση του παιχνιδιού σας. Αυτό είναι πιθανό να σας αποκλείσει από τη σελίδα, είναι απλά ενοχλητικό και θα βλάψει τη φήμη σας.

Συνιστάται: