ΕΡΓΑΣΙΑ 2 - Παίζοντας Blackjack Ημερομηνία Ανάθεσης: 2/0/207 Ημερομηνία Παράδοσης: 30/0/207 (8 ημέρες) Τελευταία Ώρα Παράδοσης: 9:00 π.μ. Στόχος Σκοπός της παρούσας άσκησης είναι η εξάσκηση σε πίνακες και μεθόδους. Διαβάστε προσεχτικά το πρόβλημα και κατανοήστε τι πρέπει να γίνει. Όταν καταλάβετε πως λειτουργεί, τότε ξεκινάτε την υλοποίηση του στον υπολογιστή εφαρμόζοντας τη σύνταξη και σημασιολογία της γλώσσας προγραμματισμού Java. Η άσκηση πρέπει υποχρεωτικά να υλοποιηθεί στη βάση μεθόδων. Μπορείτε να χρησιμοποιήσετε όσες μεθόδους κρίνετε ότι χρειάζονται, έτσι ώστε το πρόγραμμα να έχει μια λογική αρθρωτή δομή. Εισαγωγή Το blackjack είναι ένα από τα δημοφιλέστερα παιχνίδια τράπουλας γνωστό επίσης με το όνομα "Εικοσιένα" ή "2". Οι βασικοί κανόνες του είναι αρκετά απλοί για να τους κατανοήσει οποιοσδήποτε παίκτης και μέσα σε λίγα λεπτά μπορεί να παίξει άνετα έχοντας πάρα πολύ καλές πιθανότητες να κερδίσει. Υπάρχουν πάρα πολλές παραλλαγές οι οποίες διαφοροποιούν τους κανόνες. Για την άσκηση αυτή, ισχύουν οι κανόνες που περιγράφονται πιο κάτω. Οι παίκτες του blackjack ανταγωνίζονται ενάντια στον κρουπιέρη (dealer) και όχι ενάντια σε άλλους παίκτες. Ο σκοπός του παιχνιδιού είναι να πάρει ο παίκτης ένα χέρι από φύλλα που έχουν μεγαλύτερη βαθμολογική αξία από το χέρι του κρουπιέρη, αλλά που να μην υπερβαίνει το συνολικό ποσό του 2. Αν o παίχτης ξεπεράσει το 2 τότε "καίγεται" και χάνει την παρτίδα, ανεξάρτητα από το χέρι του κρουπιέρη. Στο τραπέζι κάθονται μέχρι 6 παίκτες και οι τράπουλες που χρησιμοποιούνται είναι από έως 8. Στην άσκηση αυτή έχουμε μόνο παίχτη να παίζει απέναντι από τον κρουπιέρη και χρησιμοποιείται μόνο τράπουλα. Η αξία του χεριού στο blackjack καθορίζεται από το άθροισμα της αξίας του κάθε φύλλου των χαρτιών που μοιράζονται. Όλες οι κάρτες φέρουν την αριθμητική (αναγραφόμενή) τους αξία εκτός από τις φιγούρες (βαλές J, ντάμα Q, ρήγας K) που φέρουν την αξία του 0 και οι άσσοι οι οποίοι μετράνε για ή, ανάλογα με το ποια είναι τα οφέλη του χεριού του παίκτη ή του κρουπιέρη. Το καλύτερο χέρι στο blackjack είναι ένα χέρι 2 φύλλων που αποτελείται από έναν άσσο και μία άλλη κάρτα αξίας των 0 πόντων. Ένα τέτοιο χέρι θα μετρηθεί ως 2, και καλείται ως ένα φυσικό blackjack. Διαδικασία Παιχνιδιού Όταν το παιχνίδι ξεκινάει, ο κρουπιέρης ανακατεύει την τράπουλα. Δίνεται στο τέλος της εκφώνησης η συνάρτηση createshuffledeck() η οποία κτίζει και ανακατεύει μια πλήρη τράπουλα. ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου
Μπορείτε προαιρετικά να τη χρησιμοποιήσετε αυτούσια μέσα στο πρόγραμμά σας ή να την τροποποιήσετε κατά το δοκούν. Στη συνέχεια ο παίκτης προσδιορίζει το στοίχημά του (ποντάρισμα), και ο κρουπιέρης του δίνει δύο ανοιχτά φύλλα και ο ίδιος παίρνει επίσης δύο φύλλα, ένα ανοιχτό κι ένα κλειστό. Οπότε, είναι κατανοητό ότι ο κρουπιέρης γνωρίζει μόνο τα δύο πρώτα φύλλα του παίκτη, και ο παίκτης αρχικά γνωρίζει μόνο το ένα φύλλο του κρουπιέρη. Όταν ο κρουπιέρης εμφανίζει έναν άσσο, ο παίκτης έχει την επιλογή λήψης μέτρων έναντι του ενδεχόμενου ο κρουπιέρης να έχει ένα φυσικό blackjack, μειώνοντας το στοίχημά του μέχρι το μισό ποσό του αρχικού στοιχήματος, προστατεύοντας έτσι τον εαυτό του από το να χάσει ολόκληρο το στοίχημα, εάν και εφόσον προκύψει ένα φυσικό blackjack από μέρους του κρουπιέρη. Εάν ο παίκτης έχει φυσικό blackjack, τότε κερδίζει αυτόματα παίρνοντας πίσω το.5 της αξίας του στοιχήματός του. Εάν όμως έχει ο κρουπιέρης φυσικό blackjack (μπορεί να το ελέγξει βλέποντας και το κρυφό του χαρτί χωρίς να το δει ο παίχτης) το παιχνίδι τερματίζεται και ο παίχτης χάνει το στοίχημα που πόνταρε. Διαφορετικά εάν κανένας δεν έχει φυσικό blackjack, το παιχνίδι συνεχίζεται όπου ο παίκτης έχει τέσσερις βασικές κινήσεις που μπορεί να κάνει: Hit: να λάβει ένα συμπληρωματικό, κλειστό, χαρτί από τον κρουπιέρη. Ο παίκτης μπορεί να τραβήξει όσα φύλλα επιθυμεί μέχρι να τύχει 2 ή να χάσει, δηλαδή να ξεπεράσει το 2 και να καεί. Stand: να μην πάρει άλλα φύλλα και να παραμείνει με την αξία των χαρτιών που έχει (πάσο). Double Down: ο παίκτης θα έχει την ευκαιρία να αυξήσει το αρχικό του στοίχημα 00% (διπλασιασμός πονταρίσματος) για το δικαίωμα να λάβει ένα μόνο φύλλο και μετά να πάει πάσο. Surrender: μετά το αρχικό στοίχημα και μόλις ο κρουπιέρης ελέγξει ότι δεν έχει προκύψει ένα φυσικό blackjack, ο παίκτης που διαισθάνεται ότι το χέρι του δεν είναι αρκετά καλό για να συνεχίσει να παίζει, μπορεί να επιλέξει να παρατήσει το χέρι του και να του επιστραφεί μισό από το αρχικό του στοίχημα. Συνεπώς αυτή η κίνηση είναι διαθέσιμη μόνο μια φορά, στην αρχή των κινήσεων του παίκτη. Μετά τον παίκτη, συνέχεια έχει ο κρουπιέρης, ο οποίος πρέπει να αποφασίσει αν θα τραβήξει νέο φύλλο (hit) ή θα σταματήσει σ αυτά που έχει. Σημαντική λεπτομέρεια είναι ότι ο κρουπιέρης δεν έχει δικαίωμα να σταματήσει αν έχει άθροισμα μικρότερο ή ίσο με το 7, όπου πρέπει απαραίτητα να τραβήξει νέο φύλλο. Όταν ο κρουπιέρης σταματήσει σε συγκεκριμένα φύλλα τότε συγκρίνονται τα φύλλα του παίκτη και του κρουπιέρη, και αυτός που έχει καλύτερο άθροισμα κερδίζει το χέρι. Σε περίπτωση ισοπαλίας το ποντάρισμα επιστρέφεται στον παίκτη. ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 2
Μέθοδος createshuffledeck() ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ public static String[] createshuffledeck() { } String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" }; String[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "0", "Jack", "Queen", "King", "Ace"}; int SUITS = suit.length; int RANKS = rank.length; int N = SUITS * RANKS; String[] deck = new String[N]; for (int i = 0; i < RANKS; i++) for (int j = 0; j < SUITS; j++) deck[suits*i + j] = rank[i] + " of " + suit[j]; for (int i = 0; i <= 00000; i++){ int c = (int) (Math.random() * N); int c2 = (int) (Math.random() * N); String t = deck[c]; deck[c] = deck[c2]; deck[c2] = t; } return deck; Παραδείγματα Εκτέλεσης Για την εργασία σας χρειάζεται να σχεδιάσετε, αξιοποιώντας τις διάφορες αλγοριθμικές δομές, και να υλοποιήσετε ένα πρόγραμμα όπου ο υπολογιστής σε ρόλο κρουπιέρη παίζει blackjack με το χρήστη, στο ρόλο του παίκτη. Στο ίδιο session, o χρήστης μπορεί να παίξει όσα παιχνίδια επιθυμεί, και στο τέλος του ανακοινώνεται το συνολικό ποσό που κέρδισε ή έχασε. Το πρόγραμμα επιδεικνύεται στα πιο κάτω παραδείγματα χρήσης του (με κόκκινο έντονο χρώμα φαίνονται οι αριθμοί που εισάγει ο χρήστης καθώς τρέχει το πρόγραμμα). $ java Blackjack ******* WELCOME TO BLACKJACK ******** >>>> We are about to start Game number <<<< ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 3
Enter your stake in Euro: 0 2 of Spades 6 of Spades ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ The first of my initial two cards is 0 of Spades Your next card is 6 of Diamonds Your next card is 7 of Hearts Blackjack for you!!! You have just won 0.0 Euro 2 You have won 0.0 Euro. Lucky you!! ******** GOODBYE - COME AGAIN ********** $ java Blackjack ******* WELCOME TO BLACKJACK ******** >>>> We are about to start Game number <<<< Enter your stake in Euro: 0 5 of Diamonds ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 4
Queen of Spades ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ The first of my initial two cards is 4 of Hearts Your next card is 4 of Diamonds Enter chosen action: 2 My turn to play... My second initial card is Queen of Hearts My next card is 0 of Diamonds I am stopping... I have burned myself and you win 0.0 Euro >>>> We are about to start Game number 2 <<<< Enter your stake in Euro: 8 King of Hearts 6 of Clubs The first of my initial two cards is 2 of Diamonds ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 5
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Your next card is 4 of Diamonds Enter chosen action: 2 My turn to play... My second initial card is 9 of Clubs My next card is 0 of Clubs I am stopping... Blackjack for me!!! You have just lost 8.0 Euro >>>> We are about to start Game number 3 <<<< Enter your stake in Euro: 9 8 of Clubs 7 of Hearts The first of my initial two cards is 6 of Diamonds Your next card is 2 of Spades ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 6
Enter chosen action: 3 Your final card is 6 of Hearts You have been burned and have lost 8.0 Euro >>>> We are about to start Game number 4 <<<< Enter your stake in Euro: 5 0 of Diamonds 7 of Diamonds The first of my initial two cards is Queen of Diamonds Your next card is 9 of Clubs You have been burned and have lost 5.0 Euro >>>> We are about to start Game number 5 <<<< ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 7
Enter your stake in Euro: 6 7 of Clubs King of Hearts The first of my initial two cards is 6 of Diamonds Your next card is 9 of Spades You have been burned and have lost 6.0 Euro >>>> We are about to start Game number 6 <<<< Enter your stake in Euro: 0 5 of Spades Queen of Hearts The first of my initial two cards is 6 of Diamonds Your next card is Ace of Diamonds ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 8
Enter chosen action: 3 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Your final card is 5 of Clubs Blackjack for you!!! You have just won 20.0 Euro >>>> We are about to start Game number 7 <<<< Enter your stake in Euro: 0 5 of Clubs 4 of Diamonds The first of my initial two cards is 2 of Hearts Your next card is 3 of Hearts Your next card is 8 of Diamonds Enter chosen action: 3 Your final card is 4 of Clubs ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 9
You have been burned and have lost 20.0 Euro >>>> We are about to start Game number 8 <<<< Enter your stake in Euro: 20 6 of Hearts Jack of Clubs The first of my initial two cards is 2 of Diamonds Your next card is 9 of Hearts You have been burned and have lost 20.0 Euro >>>> We are about to start Game number 9 <<<< Enter your stake in Euro: 0 3 of Spades Jack of Hearts The first of my initial two cards is Queen of Hearts ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 0
Your next card is 2 of Spades Your next card is 0 of Diamonds You have been burned and have lost 0.0 Euro 2 You have lost 57.0 Euro. Next time luckier. ******** GOODBYE - COME AGAIN ********** $ java Blackjack ******* WELCOME TO BLACKJACK ******** >>>> We are about to start Game number <<<< Enter your stake in Euro: 0 8 of Diamonds 5 of Diamonds The first of my initial two cards is 0 of Clubs ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Your next card is 6 of Clubs Enter chosen action: 2 My turn to play... My second initial card is Queen of Diamonds I am stopping... You have lost 0.0 Euro >>>> We are about to start Game number 2 <<<< Enter your stake in Euro: 0 0 of Spades 4 of Diamonds The first of my initial two cards is 9 of Spades Your next card is 6 of Diamonds ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 2
Enter chosen action: 2 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ My turn to play... My second initial card is 5 of Clubs My next card is 5 of Spades I am stopping... You have won 0.0 Euro >>>> We are about to start Game number 3 <<<< Enter your stake in Euro: 20 Jack of Hearts 0 of Hearts The first of my initial two cards is King of Hearts Enter chosen action: 2 My turn to play... My second initial card is 2 of Clubs My next card is 9 of Spades I am stopping... Blackjack for me!!! You have just lost 20.0 Euro ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 3
>>>> We are about to start Game number 4 <<<< Enter your stake in Euro: 0 King of Hearts 8 of Spades The first of my initial two cards is King of Clubs Enter chosen action: 2 My turn to play... My second initial card is Queen of Hearts I am stopping... You have lost 0.0 Euro >>>> We are about to start Game number 5 <<<< Enter your stake in Euro: 0 8 of Spades ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 4
9 of Spades The first of my initial two cards is Jack of Clubs Enter chosen action: 4 By surrendering you only lose 5.0 Euro >>>> We are about to start Game number 6 <<<< Enter your stake in Euro: 0 5 of Diamonds Jack of Clubs The first of my initial two cards is 0 of Diamonds My second card is Ace of Spades As you see I have a natural blackjack, so you lose your stake 2 You have lost 45.0 Euro. Next time luckier. ******** GOODBYE - COME AGAIN ********** Παράδοση. Όταν τελειώσετε τον πηγαίο κώδικα, μεταγλωττίστε τον και βεβαιωθείτε ότι τρέχει σωστά. ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 5
2. Παραδώστε τον πηγαίο κώδικα (userid_erg2.java) ηλεκτρονικά μέσω του submit assignment (κάτω από το Ασκήσεις Εργασία 2 στην ιστοσελίδα του μαθήματος μέχρι τις 30/0/207 και ώρα 09:00 π.μ. 3. Μαζί με το πηγαίο κώδικα, παραδώστε και την λίστα δοκιμής, (userid _erg2.txt) που να περιλαμβάνει 3 sessions από το πολύ 3 παιχνίδια το καθένα και να επιδεικνύονται όλες οι διαθέσιμες επιλογές του χρήστη (Hit, Stand, Double Down, Surrender). 4. Προσοχή: Το σύστημα ελέγχει το χρόνο παράδοσης εργασιών γι αυτό μην περιμένετε την τελευταία στιγμή να κάνετε submit την εργασία σας. a. Όπου userid βάλτε το username που σας δόθηκε από το τμήμα. b. η λίστα δοκιμής μπορεί να δημιουργηθεί αν τρέξετε το πρόγραμμά σας από την γραμμή εντολών (terminal) και χρησιμοποιώντας την εντολή script που περιγράφεται στο πρώτο εργαστήριο (φυλλάδιο Unix) ή μπορείτε να πιάσετε τα αποτελέσματα εξόδου από το Console του Eclipse. Βαθμολογία: Σημαντικό μέρος της αξιολόγησης θα αποτελέσει η ταχύτητα εκτέλεσης του προγράμματος. Επίσης, ένα πρόγραμμα για να πάρει όλες τις μονάδες είναι απαραίτητο να:. χρησιμοποιεί σχόλια 2. ευθυγραμμισμένος κώδικας 3. αυτό-επεξηγηματικά ονόματα για τις μεταβλητές 4. εκτυπώνει με την ίδια μορφή που φαίνεται στα παραδείγματα εκτέλεσης. Για όλα τα παραπάνω ακολουθήστε τις οδηγίες που περιγράφονται εδώ: http://introcs.cs.princeton.edu/java/style/ Το αρχείο με το πηγαίο κώδικα πρέπει οπωσδήποτε να περιέχει μια συμπληρωμένη κατάλληλα επικεφαλίδα από σχόλια στην αρχή του αρχείου όπως: /** * Author: Γράψτε εδώ το όνομα σας * Written:../../207 * Last updated:../../207 * * Compilation: javac userid_erg2.java * Execution: java userid_erg2 * * Γράψτε εδώ πληροφορίες σχετικά με το τι κάνει * το πρόγραμμα * */ Η εργασία είναι ατομική. Μπορείτε να συζητήσετε για αυτήν με τους συμφοιτητές σας, ωστόσο ποτέ δεν είναι αποδεκτό για σας να δείτε τον κώδικα κάποιου άλλου. Φυσικά, αν έχετε οποιεσδήποτε ερωτήσεις σχετικά με την εργασία, είμαστε πάντα στη διάθεσή σας για βοήθεια. Κώδικας που δε μεταγλωττίζει ή δεν τρέχει (crashes) παίρνει αυτόματα βαθμολογία 0. ΕΠΛ3 Εργασία 2. Υπεύθυνος Εργασίας: Παύλος Αντωνίου 6