Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπον καταρχην ειμαι πρωταρης στον προγραμματισμο στην C και δυσκολευομαι καπως με την ιδεα της αναδρομης . Εχω λοιπον να κανω μια εργασια για την σχολη η οποια ειναι το παιχνιδι της τριλιζας οπου ο χρηστης καλειται να παιξει με τν υπολογιστη. Ο καθηγητης μας ειπε οτι η υλοποιηση πρεπει να γινει με μια αναδρομικη συναρτηση tictactoe(char a[3][3],char player) η οποία δέχεται ένα πίνακα 3 3 που περιγράφει μια τρίλιζα, ένα χαρακτήρα που περιγράφει τον επόμενο παίκτη (’X’ ή ’O’) και επιστρέφει ένα χαρακτήρα που είναι ο παίκτης που κερδίζει, ή ’\0’ αν δεν κερδίζει σίγουρα κάποιος παίκτης. Ο πίνακας a θα πρέπει να περιέχει την προτιμότερη κίνηση του παίκτη, ή κάποια από τις προτιμότερες. Αν η τρίλιζα που δίνεται έχει ήδη νικητή, η συνάρτηση θα τον επιστρέφει και δεν θα αλλάζει την τρίλιζα. Η συνάρτηση θα

πρέπει να δοκιμάζει μία-μία τις κινήσεις του παίκτη σε κάθε κενή θέση της τρίλιζας, να υπο-

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

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

Δημοσ.

Ριξε μια ματια εδω (http://erwnerve.tripod.com/prog/recursion/tictctoe.htm ) πιστευω να σε βοηθησει!

Για περισσοτερα δες εδω ( https://www.google.com/search?q=tictactoe+recursive&oq=tictactoe+recursive&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8 )

 

Αν και για πρωτο εξαμηνο πολυ αναδρομη πεφτει :fear:

 

 

TIP: Εχει υποθει πολλες φορες αλλα καλο ειναι να μαθεις το google αρκετα καλα ωστε να μπορεις να ψαχνεις αυτο που θες... Ειδικα στο CSD

 

Δημοσ.

Τις σελιδες που με εδωσες τις εχω δει αλλα εξακολουθω να μην καταλαβαινω ( και για το google εχω ψαξει αρκετα αλλα τζιφος ) . Επισης μας ειπε οτι δεν πρεπει να χρησιμοποιησουμε την min max και απ οτι ειδα η λογικη του δευτερου link ειναι αυτη , βεβαια μπορει και να κανω λαθος γιατι οπως προειπα εχω αρκετες δυσκολιες στην κατανοηση της αναδρομης .

Δημοσ.

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

 

Edit: Αν βρεις κάποια πολύ καλή λύση στο bot αλγόριθμο μπες και στο https://www.hackerrank.com/level/1

Δημοσ.

Σας παραθετω ολη την εκφωνηση :

 

 

2.1 Δεδομένα

Χρησιμοποιήστε ένα πίνακα 3 3 για να αναπαραστήσετε την κατάσταση μιας τρίλιζας:

char a[3][3];

όπου ένα τετράγωνο θα περιέχει το χαρακτήρα ’\0’ αν η θέση είναι κενή, το χαρακτήρα ’X’

αν έχει παίξει ο παίκτης Χ στη θέση, ή το χαρακτήρα ’O’ αν έχει παίξει ο παίκτης Ο στη θέση.

2.2 Αναδρομή

Το πρόγραμμα πρέπει να υλοποιεί την αναδρομική συνάρτηση:

int tictactoe(char a[3][3], char player);

η οποία δέχεται ένα πίνακα 3 3 που περιγράφει μια τρίλιζα, ένα χαρακτήρα που περιγράφει

τον επόμενο παίκτη (’X’ ή ’O’) και επιστρέφει ένα χαρακτήρα που είναι ο παίκτης που κερδί-

ζει, ή ’\0’ αν δεν κερδίζει σίγουρα κάποιος παίκτης. Ο πίνακας a θα πρέπει να περιέχει την

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

ήδη νικητή, η συνάρτηση θα τον επιστρέφει και δεν θα αλλάζει την τρίλιζα. Η συνάρτηση θα

πρέπει να δοκιμάζει μία-μία τις κινήσεις του παίκτη σε κάθε κενή θέση της τρίλιζας, να υπο-

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

την κίνηση με το καλύτερο αποτέλεσμα.

2.3 Χρήση σε παιχνίδι

Χρησιμοποιήστε την αναδρομική συνάρτηση για να φτιάξετε ένα παιχνίδι τρίλιζας. Το παι-

χνίδι θα πρέπει να ζητά από τον χρήστη τις κινήσεις του παίκτη X και να χρησιμοποιεί την

παραπάνω συνάρτηση για να βρίσκει την καλύτερη κίνηση του παίκτη ’O’, συνεχίζοντας μέχρι

να νικήσει κάποιος ή να γεμίσει η τρίλιζα.

2.4 Βοηθητικές συναρτήσεις

Μπορεί να σας φανεί χρήσιμο να κατασκευάσετε τις παρακάτω βοηθητικές συναρτήσεις.

Οι συναρτήσεις αυτές ίσως σας διευκολύνουν αλλά δεν είναι απαραίτητες για τη λύση της

άσκησης, και δεν βαθμολογούνται χωριστά.

• Μια συνάρτηση που τυπώνει την κατάσταση της τρίλιζας στην οθόνη (βλ. 3η σειρά ασκή-

σεων).

void print_tictactoe(char a[3][3]);

• Μια συνάρτηση που ελέγχει αν μια τρίλιζα έχει κενό και επιστρέφει 1 αν έχει, ή 0 αν όχι.

int hasempty(char a[3][3]);• Μια συνάρτηση που ελέγχει αν υπάρχει νικητής και τον επιστρέφει, ή ’\0’ αν δεν υπάρχει.

char check(char a[3][3]);

• Μια συνάρτηση που αντιγράφει ένα 3 3 πίνακα χαρακτήρων σε ένα άλλο 3 3 πίνακα

χαρακτήρων.

void copy(char new[3][3], char orig[3][3]);

Δημοσ.

 

 

Έχει φτιαξει ο migf1 μια τριλιζα σε C ... αλλα αν πας τετοια στον καθηγητη σου

παιζει να σε παρει χαλαρα χαμπαρι. :P

 

Thanks για την αναφορά, όμως η δικιά μου δεν πληροί τις προδιαγραφές αυτής της άσκησης (δεν έχει αναδρομή, χρησιμοποιεί minmax, είναι μη βέλτιστη -έως και κακογραμμένη- σε κάποια σημεία που ελέγχει για opponent forks, κλπ

 

Βασικά εγώ την είχα φτιάξει περισσότερο ως ολοκληρωμένο παράδειγμα χρήσης του GTK+2 ως GUI για την πλατφόρμα των Windows.

 

 

Δημοσ.
ναι θελω τν κωδικα αλλα μονο της αναδρομικης συναρτησης

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

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

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...