ANSI C: Το παιχνίδι της Ξερής (σε γραμμή εντολών)

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

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

ANSI C: Το παιχνίδι της Ξερής (σε γραμμή εντολών)

Δημοσίευσηαπό migf1 » 18 Ιουν 2011, 02:53

Αυτό το πρόγραμμα το είχα γράψει πριν 2-3 μήνες σε Windows για να θυμηθώ λίγο τα παλιά. Είναι το γνωστό παιχνίδι της ξερής. με χαρτιά, αλλά σε γραμμή εντολών. Επισυνάπτω τον κώδικα ζιπαρισμένο (jerh.zip) ώστε να μπορείτε να τον ξε-ζιπάρετε είτε σε Ubuntu είτε σε Windows.

Ο κώδικας είναι σε στάνταρ ANSI C99 (οπότε λογικά γίνεται compile παντού) αποτελείται από 5 αρχεία (τρία .c και δυο .h) και για να τον κάνετε compile θα πρέπει να πληκτρολογήσετε:
Κώδικας: Επιλογή όλων
make

ή
Κώδικας: Επιλογή όλων
make makefile

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


Κατέβασμα (33.3 Kb)
Τελευταία επεξεργασία από migf1 και 25 Ιουν 2011, 17:13, έχει επεξεργασθεί 4 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Το παιχνίδι της Ξερής σε C

Δημοσίευσηαπό roman » 18 Ιουν 2011, 07:01

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

Έχω 2 παρατηρήσεις.
1ον Δεν φαίνονται τα πρώτα 3 χαρτιά που πέφτουν, μόνο το 4ο αναγράφει. Κανονικά πρέπει να λέει ποια είναι έτσι ώστε να σε βοηθάει στην ξερή να επιλέξεις ένα που με μικρότερη πιθανότητα να στο πιάσει ο αντίπαλος.
2ον Χαρτιά από γραμμή εντολών είναι κάπως. Όταν το κατέβαζα φανταζόμουν ότι θα ήταν με gui αλλά και πάλι είναι πολύ καλή δουλειά!
No LSB modules are available.
roman
punkTUX
punkTUX
 
Δημοσιεύσεις: 178
Εγγραφή: 11 Φεβ 2009, 15:09
Τοποθεσία: Θεσσαλονίκη
IRC: rwmanos
Εκτύπωση

Re: Το παιχνίδι της Ξερής σε C

Δημοσίευσηαπό migf1 » 18 Ιουν 2011, 12:59

Ευχαριστώ για τα καλά λόγια!

Για την 1η παρατήρηση έχεις δίκιο, ήρθα κι εγώ σε αυτό το δίλημμα. Διότι αν τα δείξω μένουν ανοιχτά για όση ώρα επιθυμεί ο χρήστης, συν ότι θα φαίνονται στην κορυφή της οθόνης και στα επόμενα παιξίματα. Στην πραγματικότητα τα βλέπουμε μια μόνο φορά καθώς μοιράζονται στο τραπέζι και για πολύ λίγη ώρα, κι από εκεί και πέρα υποτίθεται πως πρέπει να τα θυμόμαστε. Σκέφτηκα λοιπόν να μη τα δείχνω καθόλου (γίνεται και κάπως πιο δίκαιο, αφού ο χρήστης ξέρει ήδη τον τρόπο παιξίματος του υπολογιστή, διαβάζοντας το README_EL.txt, οπότε έτσι ισορροπείται κάπως το unfair του πράγματος).

Πάντως είναι πολύ εύκολο να το κάνει κανείς να δείχνει και τα υπόλοιπα φύλλα την 1η φορά. Ενεργοποιεί την συνάρτηση:
Κώδικας: Επιλογή όλων
void stack_print( CardStack *stack )
στο αρχείο: stack.c...
και τη χρησιμοποιεί κατόπιν είτε μέσα είτε μετά από τη συνάρτηση:
Κώδικας: Επιλογή όλων
DeckIndex game_dealtable( CardStack **table, Card *deck, int ncards)
στο αρχείο: main.c

Θα χρειαστεί να προσαρμόσει λιγάκι το τύπωμα των φύλλων αυτών στις ανάγκες του (βασικά μπορεί να το κάνει όσο advanced θέλει, π.χ. να τα δείχνει ας πούμε από 1 sec το καθένα και να τα κλείνει μετά).

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

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

ΣΗΜΕΙΩΣΗ: Το zip στην 1η δημοσίευση ενημερώθηκε με κύρια αλλαγή την προσθήκη του αρχείου: disabled.c (που είχα ξεχάσει να το συμπεριλάβω, παρόλο που το αναφέρω στο Readme) καθώς επίσης και την προσαρμογή του κώδικα σε tab space = 8 (προηγουμένως είχα προσαρμόσει σε tabspace 8 μόνο τον κώδικα του main.c).

roman έγραψε:Πολύ καλό μπράβο. Φαίνεται πολύ καλή προσπάθεια. Άμα κάποτε θελήσω να υλοποιήσω ένα παιχνίδι βίδας που σκεφτόμουνα θα το συμβουλευτώ.

Έχω 2 παρατηρήσεις.
1ον Δεν φαίνονται τα πρώτα 3 χαρτιά που πέφτουν, μόνο το 4ο αναγράφει. Κανονικά πρέπει να λέει ποια είναι έτσι ώστε να σε βοηθάει στην ξερή να επιλέξεις ένα που με μικρότερη πιθανότητα να στο πιάσει ο αντίπαλος.
2ον Χαρτιά από γραμμή εντολών είναι κάπως. Όταν το κατέβαζα φανταζόμουν ότι θα ήταν με gui αλλά και πάλι είναι πολύ καλή δουλειά!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Το παιχνίδι της Ξερής σε C

Δημοσίευσηαπό migf1 » 18 Ιουν 2011, 15:25

Sorry για την ταλαιπωρία, αλλά η συνάρτηση: s_reverse() στο αρχείο: s.c είχε ένα bug και παρόλο που η συγκεκριμένη συνάρτηση δεν χρησιμοποιείται στην Ξερή, αν θέλετε να έχετε τον κώδικα με σωστή την s_reverse() θα πρέπει να ξανακατεβάσετε το zip από την 1η δημοσίευση.

Και πάλι sorry :(

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


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

cron