Δημιουργία ενός παιχνιδιού Tic-Tac-Toe σε C++

Demiourgia Enos Paichnidiou Tic Tac Toe Se C



Το Tic-tac-toe είναι ένα ενδιαφέρον, παλιό και κλασικό παιχνίδι που έχει διασκεδάσει τις γενιές. Στο tic-tac-toe, δύο παίκτες ανταγωνίζονται σε ένα πλέγμα 9 τετραγώνων που επισημαίνεται με ένα μοτίβο κατακερματισμού. Κάθε παίκτης παίρνει τη σειρά του και τοποθετεί το σύμβολο (O ή X) σε ένα από τα κενά τετράγωνα. Σε αυτό το άρθρο, θα διερευνήσουμε πώς να δημιουργήσετε ένα παιχνίδι tic-tac-toe στη γλώσσα προγραμματισμού C++. Το παρακάτω παράδειγμα θα σας καθοδηγήσει στη δημιουργία ενός απλού αλλά συναρπαστικού παιχνιδιού tic-tac-toe, καλύπτοντας τις βασικές έννοιες, τις αναλύσεις κώδικα και τις σκέψεις για τη δημιουργία μιας διαδραστικής εμπειρίας παιχνιδιού.

Δημιουργήστε ένα παιχνίδι Tic-Tac-Toe σε C++

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

Παράδειγμα: Βασική κονσόλα Tic-Tac-Toe χωρίς χρήση της διάταξης 2D

Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε έναν πίνακα 2D, συναρτήσεις και εάν-αλλιώς συνθήκες για να φτιάξουμε το παιχνίδι tic-tac-toe στη C++. Σε αυτό το παιχνίδι, δύο παίκτες επιτρέπεται να εναλλάσσονται για να εισάγουν τις κινήσεις τους και καθορίζει την κατάσταση του παιχνιδιού ελέγχοντας για νικητή ή ισοπαλία. Δείτε τον παρακάτω κώδικα:







#include

χρησιμοποιώντας το namespace std ;

κενός συρταρωτός πίνακας ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) ;

bool isMoveValid ( απανθρακώνω σανίδα [ 3 ] [ 3 ] , ενθ σειρά , ενθ διάσελο ) ;

bool isBoardFull ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) ;

απανθρακώνω επιταγή Νικητής ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) ;

ενθ κύριος ( ) {

απανθρακώνω σανίδα [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

ενθ σειρά , διάσελο ;

απανθρακώνω τρέχονΠαίκτη = 'Χ' ;

ενώ ( αληθής ) {

συρταρωτός πίνακας ( σανίδα ) ;

cout << 'Παίκτης' << τρέχονΠαίκτη << 'Σειρά του. Εισαγάγετε τη σειρά (1-3) και τη στήλη (1-3): ' ;

τρώει >> σειρά >> διάσελο ;

σειρά --;

διάσελο --;

αν ( isMoveValid ( σανίδα , σειρά , διάσελο ) ) {

σανίδα [ σειρά ] [ διάσελο ] = τρέχονΠαίκτη ;

απανθρακώνω νικητής = επιταγή Νικητής ( σανίδα ) ;

αν ( νικητής != '' ) {

συρταρωτός πίνακας ( σανίδα ) ;

cout << 'Παίκτης' << νικητής << «είναι νικητής! \n ' ;

Διακοπή ;

}

αν ( isBoardFull ( σανίδα ) ) {

συρταρωτός πίνακας ( σανίδα ) ;

cout << 'Είναι ισοπαλία! \n ' ;

Διακοπή ;

}

τρέχονΠαίκτη = ( τρέχονΠαίκτη == 'Χ' ) ? 'Ο' : 'Χ' ;

} αλλού {

cout << 'Μη έγκυρη μετακίνηση. Επιλέξτε άλλο κελί. \n ' ;

} }

ΕΠΙΣΤΡΟΦΗ 0 ;

}

κενός συρταρωτός πίνακας ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) {

cout << 'β| \ t 1 \ t | \ t 2 \ t | \ t 3 \ t | \n ' ;

cout << '_____________________ \n ' ;

Για ( ενθ Μ = 0 ; Μ < 3 ; Μ ++ ) {

cout << Μ + 1 << '|' ;

Για ( ενθ t = 0 ; t < 3 ; t ++ ) {

cout << '' << σανίδα [ Μ ] [ t ] ;

αν ( t < 2 ) cout << ' \ t | \ t ' ;

}

cout << ' \ t | \n ' ;

αν ( Μ < 2 ) cout << '_____________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( απανθρακώνω σανίδα [ 3 ] [ 3 ] , ενθ σειρά , ενθ διάσελο ) {

ΕΠΙΣΤΡΟΦΗ ( σειρά >= 0 && σειρά < 3 && διάσελο >= 0 && διάσελο < 3 && σανίδα [ σειρά ] [ διάσελο ] == '' ) ;

}

bool isBoardFull ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) {

Για ( ενθ Μ = 0 ; Μ < 3 ; Μ ++ ) {

Για ( ενθ t = 0 ; t < 3 ; t ++ ) {

αν ( σανίδα [ Μ ] [ t ] == '' ) {

ΕΠΙΣΤΡΟΦΗ ψευδής ;

} } }

ΕΠΙΣΤΡΟΦΗ αληθής ; }

απανθρακώνω επιταγή Νικητής ( απανθρακώνω σανίδα [ 3 ] [ 3 ] ) {

Για ( ενθ Μ = 0 ; Μ < 3 ; Μ ++ ) {

αν ( σανίδα [ Μ ] [ 0 ] == σανίδα [ Μ ] [ 1 ] && σανίδα [ Μ ] [ 1 ] == σανίδα [ Μ ] [ 2 ] && σανίδα [ Μ ] [ 0 ] != '' ) {

ΕΠΙΣΤΡΟΦΗ σανίδα [ Μ ] [ 0 ] ;

}

αν ( σανίδα [ 0 ] [ Μ ] == σανίδα [ 1 ] [ Μ ] && σανίδα [ 1 ] [ Μ ] == σανίδα [ 2 ] [ Μ ] && σανίδα [ 0 ] [ Μ ] != '' ) {

ΕΠΙΣΤΡΟΦΗ σανίδα [ 0 ] [ Μ ] ;

} }

αν ( σανίδα [ 0 ] [ 0 ] == σανίδα [ 1 ] [ 1 ] && σανίδα [ 1 ] [ 1 ] == σανίδα [ 2 ] [ 2 ] && σανίδα [ 0 ] [ 0 ] != '' ) {

ΕΠΙΣΤΡΟΦΗ σανίδα [ 0 ] [ 0 ] ;

}

αν ( σανίδα [ 0 ] [ 2 ] == σανίδα [ 1 ] [ 1 ] && σανίδα [ 1 ] [ 1 ] == σανίδα [ 2 ] [ 0 ] && σανίδα [ 0 ] [ 2 ] != '' ) {

ΕΠΙΣΤΡΟΦΗ σανίδα [ 0 ] [ 2 ] ;

}

ΕΠΙΣΤΡΟΦΗ '' ;

}

Ακολουθεί μια ανάλυση της λειτουργικότητάς του:



Το '#include ' είναι μια οδηγία προεπεξεργαστή που περιλαμβάνει τη βιβλιοθήκη ροής I/O για λειτουργίες εισόδου/εξόδου. Η χρήση του 'namespace std' επιτρέπει την άμεση χρήση των συναρτήσεων cout, cin κ.λπ. σε ένα πρόγραμμα C++, χωρίς να απαιτείται το πρόθεμα 'std::'.



Υπάρχουν τέσσερα πρωτότυπα συναρτήσεων σε αυτό το πρόγραμμα – είναι τα drawBoard(), isMoveValid(), isBoardFull() και checkWinner(). Η δήλωση συνάρτησης είναι γνωστή ως πρωτότυπο συνάρτησης. Αν και έρχεται μετά την κύρια λειτουργία στο πρόγραμμα, θα χρησιμοποιηθεί. Η κύρια λειτουργία περιέχει τον βρόχο παιχνιδιού και τη λογική για τη διαχείριση των στροφών και των κινήσεων των παικτών. Μέσα στην κύρια συνάρτηση, ο πίνακας του παιχνιδιού προετοιμάζεται με κενά.





απανθρακώνω σανίδα [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

Μετά από αυτό, ορίζονται δύο μεταβλητές γραμμής και στήλης για την αποθήκευση της εισόδου κίνησης του παίκτη. Το 'char currentPlayer = 'X';' ορίζει ότι ο παίκτης «Χ» πηγαίνει πρώτος.

Τώρα, ο βρόχος του παιχνιδιού while (αληθινός) ξεκινά και τρέχει μέχρι να υπάρξει νικητής ή ισοπαλία. Αυτός ο βρόχος 'while' καλεί το 'drawBoard();' για να εμφανίσετε τον πίνακα. Μετά την εμφάνιση της πλακέτας στην κονσόλα, ο χρήστης καλείται να επιλέξει ένα κελί για να επισημάνει στην ακόλουθη δήλωση κώδικα:



cout << 'Παίκτης' << τρέχονΠαίκτη << 'Σειρά του. Εισαγάγετε σειρά και στήλη (1-3): ' ;

Ο παίκτης εισάγει την κίνησή του σε 'cin >> row >> col;'.

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

σανίδα [ σειρά ] [ διάσελο ] = τρέχονΠαίκτη ;

Αυτή η δήλωση τοποθετεί το σημάδι του παίκτη στον πίνακα.

απανθρακώνω νικητής = επιταγή Νικητής ( σανίδα ) ;

αν ( νικητής != '' ) {

συρταρωτός πίνακας ( σανίδα ) ;

cout << 'Παίκτης' << νικητής << 'κερδίζει! \n ' ;

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

αν ( isBoardFull ( σανίδα ) ) {

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

τρέχονΠαίκτη = ( τρέχονΠαίκτη == 'Χ' ) ? 'Ο' : 'Χ' ;

Αυτή η δήλωση αλλάζει τους παίκτες για να δώσει σε κάθε παίκτη την ευκαιρία να παίξει τη σειρά του.

cout << 'Μη έγκυρη μετακίνηση. Επιλέξτε άλλο κελί. \n ' ;

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

Μετά την 'κύρια' συνάρτηση, θα ξεκινήσουν οι ορισμοί συναρτήσεων για τα πρωτότυπα συναρτήσεων που έχουν δηλωθεί προηγουμένως. Η πρώτη συνάρτηση που ορίζεται εδώ είναι το drawBoard() που χρησιμοποιείται για να σχεδιάσει τον πίνακα tic-tac-toe στην κονσόλα. Η συνάρτηση drawBoard() εκτυπώνει την τρέχουσα κατάσταση του πίνακα, συμπεριλαμβανομένων των γραμμών πλέγματος.

Η επόμενη συνάρτηση που ορίζεται εδώ είναι η MoveValid(). Αυτή η συνάρτηση χρησιμοποιείται για να προσδιορίσει εάν επιτρέπεται μια κίνηση τόσο εντός του πίνακα όσο και σε ένα κενό κελί. Η συνάρτηση isBoardFull() χρησιμοποιείται για να ελέγξει αν ο πίνακας είναι ακόμη γεμάτος. Αυτή είναι προϋπόθεση για ισοπαλία όταν δεν υπάρχει νικητής. Το isBoardFull() ελέγχει εάν έχουν καλυφθεί όλες οι θέσεις στον πίνακα, κάτι που υποδεικνύει ισοπαλία εάν δεν υπάρχει νικητής. Εάν υπάρχει νικητής, μπορεί να εξακριβωθεί χρησιμοποιώντας τη συνάρτηση checkWinner(). Το checkWinner() ελέγχει όλες τις πιθανές νικητήριες γραμμές για το σημάδι του ίδιου παίκτη ('X' ή 'O') και επιστρέφει το σημάδι του νικητή εάν βρεθεί ή έναν χαρακτήρα διαστήματος ' ' εάν δεν υπάρχει ακόμη νικητής. Ακολουθεί η έξοδος του προγράμματος. Δείχνει κάθε στροφή από κάθε παίκτη.

Πρώτον, ο πίνακας είναι ξεκάθαρος. Ζητείται από τον παίκτη 'Χ' να επιλέξει το κελί που θα επισημανθεί. Εδώ, ο παίκτης 'Χ' εισάγει 2 και 2. Τα κελιά της σειράς 2 και της στήλης 2 επισημαίνονται. Ανατρέξτε στον σημειωμένο πίνακα στα ακόλουθα:

Τώρα, είναι η σειρά του παίκτη Ο. Ζητείται από τη συσκευή αναπαραγωγής να επιλέξει ένα κελί που θα επισημανθεί. Ο παίκτης 'Ο' επιλέγει 1 για τη σειρά και 1 για τη στήλη. Το επιλεγμένο κελί επισημαίνεται για το πρόγραμμα αναπαραγωγής 'O' όπως φαίνεται στο ακόλουθο απόσπασμα εξόδου:

Όλες οι στροφές για κάθε παίκτη θα ακολουθούν το ίδιο μοτίβο. Είναι η σειρά του παίκτη Χ και ο παίκτης επιλέγει 1 για τη σειρά και 2 για τη στήλη. Ανατρέξτε στα ακόλουθα στιγμιότυπα εξόδου:

Τώρα, η σειρά είναι για τον παίκτη «Ο». Ο παίκτης επιλέγει 1 για τη σειρά και 3 για τη στήλη.

Η επόμενη στροφή είναι και πάλι στον παίκτη «Χ». Ο παίκτης επιλέγει 3 για τη σειρά και 1 για τη στήλη.

Ο παίκτης 'Ο' επιλέγει 3 για τη σειρά και 2 για τη στήλη.

Ο παίκτης 'Χ' επιλέγει τη δεύτερη σειρά και την τρίτη στήλη.

Ο παίκτης 'O' επιλέγει τώρα τη δεύτερη σειρά και την πρώτη στήλη.

Ο παίκτης 'Χ' επιλέγει την τρίτη σειρά και την τρίτη στήλη αυτή τη φορά.

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

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

συμπέρασμα

Η ανάπτυξη ενός παιχνιδιού tic-tac-toe χρησιμοποιώντας C++ είναι μια εξαιρετική πρακτική άσκηση για να ενισχύσετε τις προγραμματιστικές σας δεξιότητες. Το άρθρο εξηγεί με ακρίβεια πώς να δημιουργήσετε tic-tac-toe σε C++. Η αναλυτική καθοδήγηση που παρέχεται σε αυτό το άρθρο περιελάμβανε έναν πίνακα 2D, λειτουργίες και εάν-αλλιώς συνθήκες για να κατανοήσουν οι αναγνώστες τη μηχανική του παιχνιδιού, τις αλληλεπιδράσεις των χρηστών και την αποτελεσματική δόμηση κώδικα. Η λεπτομερής περιγραφή του κώδικα και η επεξήγηση των λειτουργιών που είναι ζωτικής σημασίας για τον πυρήνα του παιχνιδιού εξοπλίζουν τους αναγνώστες με ανεκτίμητες γνώσεις τόσο για τις πρακτικές προγραμματισμού C++ όσο και για τις περιπλοκές μιας απλής ανάπτυξης παιχνιδιού.