Mastermind game σε C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Mastermind game σε C

Δημοσίευσηαπό Ilias95 » 01 Μαρ 2013, 19:49

Έγραψα μια υλοποίηση του γνωστού παιχνιδιού Mastermind σε C99.

Για όσους δεν το ξέρουν το mastermind είναι ένα απλό σχετικά παιχνίδι λογικής. Ένας απ' τους δύο παίκτες (ο υπολογιστής σε αυτήν την περίπτωση) διαλέγει έναν κωδικό αποτελούμενο από 4 «κουκκίδες» με διαφορετικό χρώμα η κάθε μία και τον κρατάει κρυφό από τον αντίπαλο. Ο αντίπαλος έχει 10 προσπάθειες να βρει τον κωδικό του πρώτου παίκτη/υπολογιστή. Σε κάθε προσπάθεια διαλέγει έναν κωδικό που νομίζει ότι είναι ο σωστός και ο υπολογιστής τον συγκρίνει με τον κρυφό κωδικό και του δίνει κάποιες πληροφορίες. Για κάθε χρώμα στον κωδικό του παίκτη που υπάρχει και στον κρυφό κωδικό και βρίσκεται ακριβώς στην ίδια θέση τοποθετείται ένα κόκκινο «καρφάκι» δίπλα στον συγκεκριμένο κωδικό, ενώ για κάθε χρώμα στον κωδικό του παίκτη που υπάρχει και στον κρυφό κωδικό αλλά βρίσκεται σε διαφορετική θέση τοποθετείται ένα κίτρινο «καρφάκι».

Ανέβασα ένα git repo με τον κώδικα στο github για όσους ενδιαφέρονται: https://github.com/Ilias95/mastermind
Για την μεταγλώττιση αρκεί μια make.

Για την χρωματισμένη έξοδο χρησιμοποίησα μια παραλλαγή του con_color.h του migf1 κρατώντας μόνο τα απαραίτητα για το πρόγραμμα μου οπότε λογικά πρέπει να τρέχει και σε Windows επίσης.

Στο "Info about playing" του menu θα βρείτε οδηγίες για το πως να το παίξετε.

Κι ένα screenshot:
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό migf1 » 11 Ιούλ 2014, 23:11

Ωραίος Ηλία!

Σόρι για το +1 χρόνο καθυστέρησης, αλλά τώρα το είδα!

ΥΓ. Στην stripped παραλλαγή του con_color.h έχεις ξεχάσει να κλείσεις ένα do{ με το αντίστοιχο }while(0) στη γραμμή 93, οπότε δεν κάνει compile (τίποτα το σοβαρό, μικρή αβλεψία)!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό Ilias95 » 11 Ιούλ 2014, 23:48

Χαχαχα, σ' ευχαριστώ τι μου θύμισες... :P

Επειδή θυμάμαι ότι είχα ζητήσει από άλλα άτομα να μου επιβεβαιώσουν ότι τρέχει σωστά και σε windows χωρίς επιτυχία και επειδή είδα ότι τώρα μαθαίνεις git αν μπορείς και θες κάνε ένα pull request με τις μικρο διορθώσεις που χρειάζονται για να τρέχει σωστά και με χρώματα και στα win. Έχω την εντύπωση ότι πρέπει να θέλει και κάτι ακόμα εκτός απ' το συντακτικό που επισήμανες. Προφανώς θα το έκανα εγώ, αλλά δεν έχω win. :P

Έτσι όπως είναι τώρα πάντως γίνεται κανονικά compile σε linux με gcc και τρέχει as expected.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό migf1 » 12 Ιούλ 2014, 00:44

Θα το κάνω, εννοείται! Μέσα στο Σ/Κ!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό migf1 » 12 Ιούλ 2014, 22:28

Σου έστειλα Ηλία (έβαλα κι ένα windows executable μέσα σε ένα φάκελο bin/).

Αν έχω όρεξη κάποια στιγμή, θέλεις να δοκιμάσω να αλλάξω τον τρόπο εισαγωγής του παιχνιδιού; Αντί δηλαδή να γράφει ο παίκτης:
Κώδικας: Επιλογή όλων
1 white, 2 black, 3 yellow, 4 red
check

να γράφει ας πούμε:
Κώδικας: Επιλογή όλων
wbyr

και να μη χρειάζεται να γράψει καθόλου "check";
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό Ilias95 » 13 Ιούλ 2014, 00:43

Σ' ευχαριστώ!

Τελικά δεν ήθελε κάτι επιπλέον ε; Ήταν μόνο το μικρό συντακτικό; Δηλαδή τώρα τρέχει κανονικά με χρώματα και σε win;

Αυτό με το binary δεν είμαι σίγουρος αν είναι πρακτικό. Πχ. αφού έκανα merge το pull request σου, παρατήρησα ένα bug (αν έδινες μόνο έναν αριθμό έπαιρνες segfault) και το διόρθωσα. Όμως προφανώς πρέπει να ανέβει νέο binary που να συμπεριλαμβάνει την αλλαγή. Γι' αυτό δεν ξέρω αν έχει τόσο νόημα αφού σε κάθε commit θα χρειάζεται νέο executable αν πρόκειται να είναι up-to-date.

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

Φυσικά αν σου φαίνεται καλύτερος εσένα αυτός ο τρόπος μπορείς να τον υλοποιήσεις στο fork σου να δούμε πως θα είναι. Όρεξη και χρόνο να χουμε. :P

Μια άλλη ιδέα για να εισάγονται πιο γρήγορα τα δεδομένα είναι να μπορεί ο χρήστης να βάλει πολλά χρώμματα με μία εντολή. Δηλαδή:
Κώδικας: Επιλογή όλων
3 red 1 white 4 blue

Αντί για:
Κώδικας: Επιλογή όλων
3 red [enter]
1 white [enter]
4 blue [enter]
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό migf1 » 13 Ιούλ 2014, 06:15

Καλημέρα :)

Δεν είδα να χρειάζεται κάτι έξτρα για τα Windows. Μια χαρά δείχνει, όπως το ss που έχεις παραθέσει από Ubuntu. Παραθέτω κι ένα από Windows (με Lucida Console font).



Για το binary έχεις δίκιο, είναι πρόβλημα από την στιγμή που δεν έχεις πρόσβαση σε Windows... οπότε σβήστο τελείως (το wine δεν σε βολεύει για τέτοιες περιπτώσεις; ).

Για το interface, θα μπορούσε να δίνει ο χρήστης π.χ. "wlbg" (white, blue, black, green) και κατόπιν check... ή ακόμα καλύτερα "wlbg-c" για να κάνει και check, αλλιώς αν είναι χωρίς το "-c" στο τέλος να μην κάνει check κι απλώς να τοποθετεί τα χρώματα στο ταμπλό για οπτικό review. Αντί για το τωρινό 'null' θα μπορούσε να χρησιμοποιεί κενά spaces μέσα στο command string.

Όταν βρω ευκαιρία, θα του κάνω μια δοκιμή έτσι και θα ειδοποιήσω εδώ :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό Ilias95 » 13 Ιούλ 2014, 15:05

:thumbup:
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό migf1 » 15 Ιούλ 2014, 01:37

Ηλία, μου εξηγείς λίγο ποιος ακριβώς είναι ο ρόλος του null? Γιατί υπάρχει; Κανονικά η μαντεψιά δεν πρέπει να έχει κανένα κενό, έτσι δεν είναι;

ΥΓ. Επίσης, γιατί δεν επιτρέπεις διπλά χρώματα; Νομίζω το mastermind επιτρέπει.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Mastermind game σε C

Δημοσίευσηαπό Ilias95 » 15 Ιούλ 2014, 02:12

Ναι όλα συμπληρωμένα πρέπει να είναι.

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

migf1 έγραψε:ΥΓ. Επίσης, γιατί δεν επιτρέπεις διπλά χρώματα; Νομίζω το mastermind επιτρέπει.

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

Μια σκέψη θα ήταν να ρωτάει στην αρχή του παιχνιδιού τον χρήστη αν θέλει να επιτρέπονται τα duplicates.

PS. Δεν θυμάμαι Χριστό από C. :P
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron