Δ Ι Π Λ Ω Μ Α Τ Ι Κ Η Ε Ρ Γ Α Σ Ι Α

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Δ Ι Π Λ Ω Μ Α Τ Ι Κ Η Ε Ρ Γ Α Σ Ι Α"

Transcript

1 ΑΝΑΠΤΥΞΗ ΑΛΓΟΡΙΘΜΩΝ ΓΙΑ ΠΑΙΧΝΙΔΙΑ ΣΤΡΑΤΗΓΙΚΗΣ ΜΕΡΙΚΗΣ ΠΛΗΡΟΦΟΡΗΣΗΣ (ΕΦΑΡΜΟΓΗ ΣΤΟ ΠΑΙΧΝΙΔΙ ΤΗΣ ΜΠΙΡΙΜΠΑΣ) Δ Ι Π Λ Ω Μ Α Τ Ι Κ Η Ε Ρ Γ Α Σ Ι Α ΚΟΝΤΟΧΡΙΣΤΟΠΟΥΛΟΥ Γ. ΙΩΑΝΝΗ ΕΠΙΒΛΕΠΩΝ: Κ. ΣΓΑΡΜΠΑΣ ΠΑΤΡΑ - ΟΚΤΩΒΡΙΟΣ

2 ΠΙΣΤΟΠΟΙΗΣΗ Πιστοποιείται ότι η διπλωματική εργασία με θέμα: ΑΝΑΠΤΥΞΗ ΑΛΓΟΡΙΘΜΩΝ ΓΙΑ ΠΑΙΧΝΙΔΙΑ ΣΤΡΑΤΗΓΙΚΗΣ ΜΕΡΙΚΗΣ ΠΛΗΡΟΦΟΡΗΣΗΣ (ΕΦΑΡΜΟΓΗ ΣΤΟ ΠΑΙΧΝΙΔΙ ΤΗΣ ΜΠΙΡΙΜΠΑΣ) Του φοιτητή του τμήματος Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών Κοντοχριστόπουλου Ιωάννη (Α.Μ. 5355) παρουσιάστηκε δημόσια και εξετάστηκε στο Τμήμα Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών στις.. Ο Επιβλέπων Ο Διευθυντής του Τομέα Κ. Σγάρμπας Ν. Φακωτάκης Επ.Καθηγητής Καθηγητής 2

3 ΤΙΤΛΟΣ: Ανάπτυξη αλγορίθμων για παιχνίδια στρατηγικής μερικής πληροφόρησης (εφαρμογή στο παιχνίδι της μπιρίμπας) ΣΥΓΓΡΑΦΕΑΣ: Ιωάννης Γ. Κοντοχριστόπουλος (Α.Μ. 5355) ΠΕΡΙΛΗΨΗ: Στην παρούσα διπλωματική εργασία αναπτύσσεται ένα πρόγραμμα τεχνητής νοημοσύνης ικανό να παίζει το παιχνίδι της μπιρίμπας ανταγωνιστικά προς τον άνθρωπο, καθώς και η εφαρμογή με την οποία ο άνθρωπος θα μπορεί να παίζει ενάντια στην τεχνητή νοημοσύνη. Συγκεκριμένα, για την ανάπτυξη της εφαρμογής χρησιμοποιήθηκε η γλώσσα προγραμματισμού python και το πακέτο εργαλείων αυτής με το όνομα pygame. Η τεχνητή νοημοσύνη υλοποιήθηκε με εύρεση του δέντρου του παιχνιδιού σε κάθε σημείο που χρειάζεται, βρίσκοντας έτσι τις διαθέσιμες κινήσεις που υπάρχουν για τον παίχτη. Στη συνέχεια αξιολογούνται οι κινήσεις αυτές, μέσω ορισμένων ευρετικών συναρτήσεων οι οποίες λειτουγούν παράλληλα και αποτελούν μέρος ενός συστήματος ασαφούς λογικής, το οποίο τελικά αναλαμβάνει να επιλέξει τη βέλτιστη κίνηση. Abstract: This diploma dissertation presents the development of an artificial intelligence program capable of playing competitively to man the game birimba, and the corresponding application with which you can play against the artificial intelligence. Specifically, for the development of the application was used the programming language python, and a python toolkit called pygame. The artificial intelligence works by finding the game tree whenever needed, thus finding the moves available to the player, and then by evaluating these moves through a number of heuristic functions working in parallel. These functions are a part of a fuzzy logic system which in turn is able to choose the best move. 3

4 Περιεχόμενα..4 Κεφάλαιο 1: Εισαγωγή Στόχος της εργασίας Χρησιμότητα της εργασίας Κανόνες Μπιρίμπας Βασική Στρατηγική των παιχτών στη Μπιρίμπα Δυσκολίες στην Υλοποίηση Κεφάλαιο 2: Γενικές Γνώσεις Παιχνίδια με Κάρτες Παιχνίδια Πλήρους Πληροφόρησης Αιτιοκρατικά Παιχνίδια Ατελούς Πληροφόρησης Αιτιοκρατικά Παιχνίδια Πλήρους Πληροφόρησης Τυχαία Παιχνίδια Ατελούς Πληροφόρησης Τυχαία Τεχνητή νοημοσύνη και παιχνίδια Απληροφόρητη Αναζήτηση Πληροφορημένη Αναζήτηση Συναρτήσεις Αξιολόγησης Άπληστη Αναζήτηση Αναζήτηση Α* Ευρετικές Συναρτήσεις Ασαφής Λογική (Fuzzy Logic).. 17 Κεφάλαιο 3: Εφαρμογή Εισαγωγή - Βασικές ιδέες για τον τρόπο αντιμετώπισης του πρoβλήματος Επεξηγήσεις πάνω στις αρχικές ιδέες Σχετικά με το μη-ai μέρος Σχετικά με την εύρεση των δυνατών συνδυασμών και του δέντρου του παιχνιδιού Σχετικά με τις ευρετικές συναρτήσεις και την αξιολόγηση των δεδομένων

5 3.3 Γραφικά Βασικές Ιδέες για τα Γραφικά Βασικές Ιδέες για το γραφικό περιβάλλον (GUI) και την υλοποίηση αυτού Ανάλυση της εφαρμογής Module Deck Κλάση Cards Α. Χαρακτηριστικά. 23 Β. Συναρτήσεις Κλάση Deck. 24 Α. Ρόλος και εκκίνηση. 24 Β. Συναρτήσεις Υποκλάση Hand. 26 Α. Ρόλος και εκκίνηση. 26 Β. Χαρακτηριστικά. 26 Γ. Συναρτήσεις της Hand Κλάση Table_Cards. 27 Α. Ρόλος και εκκίνηση. 27 Β. Συναρτήσεις Module Graphics Εκκίνηση του Module Κλάση Gfx.. 28 Α. Συναρτήσεις με τις οποίες εμφανίζονται γραφικά στην οθόνη. 28 Β. Συναρτήσεις οι οποίες χρειάζονται για την αλληλεπίδραση με τον παίχτη Module AI Κλάση Player.. 30 Α. Χαρακτηριστικά. 30 Β. Συναρτήσεις Module Game Κλάση Game.. 36 Α. Χαρακτηριστικά. 36 Β. Συναρτήσεις Module Music Κλάση Music

6 6. Module Pyconsole Κονσόλα Διαγράμματα Ροής των βασικότερων συναρτήσεων Συναρτήσεις πιστοποίησης εγκυρότητας Συναρτήσεις εύρεσης συνδυασμών Συνάρτηση εύρεσης του δέντρου του παιχνιδιού Συναρτήσεις αξιολόγησης των κινήσεων του παίχτη Συναρτήσεις αξιολόγησης των επιλογών του παίχτη κατά την πρώτη και τρίτη φάση Η κύρια συνάρτηση του παιχνιδιού. 62 Κεφάλαιο 4: Παραδείγματα Χρήσης Λειτουργία Προγράμματος Screenshots Δείγματα τρόπου λειτουργίας της ai από Screenshots Κεφάλαιο 5: Συμπεράσματα, Μελλοντικές Βελτιώσεις, Βιβλιογραφία Ικανότητα της Τεχνητής Νοημοσύνης Χρόνος Απόκρισης Προτεινόμενες Βελτιώσεις Βιβλιογραφία.. 74 Παράρτηματα Α. Ο κώδικας του προγράμματος i. Module Deck ii. Module Ai. 81 iii. Module Graphics iv. Module Game.. 99 v. Module Music vi. Module Pyconsole

7 ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ 1.1 Στόχος της εργασίας Στόχος αυτής της εργασίας είναι η ανάπτυξη ενός προγράμματος το οποίο θα κάνει χρήση μιας τεχνητής νοημοσύνης ικανής να πάρει τη θέση ενός έως και τεσσάρων παικτών στο παιχνίδι της μπιρίμπας, παίζοντας τόσο ικανοποιητικά ώστε να είναι ανταγωνιστική προς ανθρώπινους συμπαίχτες. Το παιχνίδι αυτό παρουσιάζει σημαντικές ομοιότητες με τα παιχνίδια Μπριτζ, Ραμί, Θανάσης, Κουμ-καν, και απαντάται με παραλλαγές σε πολλές χώρες του κόσμου. 1.2 Χρησιμότητα της εργασίας Μια από τις μεγαλύτερες προκλήσεις για μια τεχνητή νοημοσύνη, είναι τα παιχνίδια. Για να μπορέσει να ανταπεξέλθει ικανοποιητικά σε αυτά μια τεχνητή νοημοσύνη, της απαραίτητη η δυνατότητα για λογική σκέψη, αξιολόγηση των διαφόρων καταστάσεων και τέλος η λήψη αποφάσεων οι οποίες βελτιστοποιούν τη δυνατότητα για νίκη. Αυτός ο τρόπος σκέψης είναι αρκετά κοντά στον τρόπο που σκέφτεται ο άνθρωπος για να βρει λύση σε τυχόν προβλήματα που αντιμετωπίζει. Αν θέλουμε λοιπόν να αποκτήσουμε μια τεχνητή νοημοσύνη η οποία θα μπορεί να σκέφτεται και βρίσκει μόνη της το βέλτιστο τρόπο αντίδρασης σε διάφορες καταστάσεις, η έρευνα πάνω στα παιχνίδια έχει σημαντικά πλεονεκτήματα, αφού μας δίνει τη δυνατότητα μελέτης και βελτιστοποίησής της μέσα ένα πλήρως ελεγχόμενο περιβάλλον. Θα μπορούσε να ειπωθεί ότι τα παιχνίδια λειτουργούν σαν εξομοιωτές στους οποίους μπορούμε να δοκιμάσουμε τις τεχνητές νοημοσύνες όπως και όσο θέλουμε, αποκτώντας γνώσεις στον τομέα αυτό. 7

8 1.3 Κανόνες Μπιρίμπας Σε αυτή τη διπλωματική εργασία χρησιμοποιείται η εξής παραλλαγή της μπιρίμπας: 1. Παίζεται πάντα από 4 άτομα, χωρισμένα σε 2 ομάδες των Παίζεται με δύο τράπουλες, και 4 τζόκερ, οι οποίοι μπορούν να πάρουν τη θέση κάθε φύλλου. Υπάρχουν δύο στοίβες με φύλλα. Η μια έχει τα σκάρτα φύλλα, στην αρχή είναι κενή, και εκεί τα φύλλα είναι πάντα φανερά. Η άλλη έχει όλα τα υπόλοιπα φύλλα, και σε αυτή τα φύλλα είναι κρυφά. 3. Αρχικά μοιράζονται από 11 φύλλα σε κάθε παίχτη, καθώς 22 ακόμη σε δύο πακέτα των 11, τα οποία είναι τα δύο «μπιριμπάκια». Τα φύλλα τα παίρνουμε από τη στοίβα με τα κρυφά φύλλα. 4. Ο βασικός σκοπός του κάθε παίχτη είναι να ξεφορτωθεί τα φύλλα του κατεβάζοντάς τα σε συνδυασμούς. Έτσι μαζεύει πόντους. 5. Οι συνδυασμοί που επιτρέπονται υπόκεινται στους εξής κανόνες: Απαρτίζονται από φύλλα του ίδιου χρώματος, με αξίες συνεχόμενες. Πρέπει να είναι από τρία φύλλα και πάνω. Μπαλαντέρ είναι όλα τα 2αρια, καθώς και οι 2 τζόκερ, 12 συνολικά. 7 φύλλα ή περισσότερα, συνεχόμενα, είναι μια μπιρίμπα, η οποία θεωρείται «καθαρή» αν δεν υπάρχει κανένας μπαλαντέρ μέσα στα φύλλα που την απαρτίζουν (το 2 όταν είναι στη φυσική του θέση και χρώμα, δε θεωρείται μπαλαντέρ), ή «βρώμικη» αν υπάρχει έστω και ένας. Σε κάθε συνδυασμό επιτρέπεται το πολύ ένας μπαλαντέρ (το 2 όταν είναι στη φυσική του θέση και χρώμα, δε θεωρείται μπαλαντέρ) Ο άσσος μπορεί να μπει είτε πριν το δύο, είτε μετά τον Ρήγα. Μπορώ να έχω έως 13 φύλλα σε ένα συνδυασμό, συμπληρώνοντας την αλληλουχία 1 έως Ρήγας, ή 2 έως και Άσσος στο τέλος. (φυσικά ένα από αυτά τα φύλλα μπορεί να είναι μπαλαντέρ) Δε μπορώ να αφαιρέσω φύλλα από έναν κατεβασμένο συνδυασμό, αλλά τυχόν μπαλαντέρ μπορούν να αλλάξουν θέση μέσα στο συνδυασμό, αν αυτό μας βολεύει. Αυτό γίνεται αν το φύλλο του οποίου τη θέση καταλάμβανε ένας μπαλαντέρ προστεθεί. 6. Στο γύρο του κάθε παίχτης πρέπει να κάνει τα εξής: i. Είτε να πάρει ένα φύλλο από τη στοίβα με τα κρυφά χαρτιά, 8

9 είτε να πάρει όλα τα φύλλα από τη στοίβα με τα σκάρτα. (μπορεί να επιλέξει τι από τα δύο θα κάνει) ii. Να κατεβάσει τυχόν έτοιμους συνδυασμούς, ή να κολλήσει σε ήδη υπάρχοντες κατεβασμένους συνδυασμούς (που ανήκουν στην ομάδα του) μεμονωμένα φύλλα. Και στις δύο περιπτώσει μπορεί να χρησιμοποιήσει μόνο φύλλα που έχει στο χέρι του. Σε περίπτωση που κολλήσει φύλλο σε θέση που καταλάμβανε ένας μπαλαντέρ, ο μπαλαντέρ πρέπει να αλλάξει θέση. Αν δεν είναι δυνατόν αυτό (είτε γιατί ο συνδυασμός έχει ήδη 13 φύλλα, είτε γιατί αυτό οδηγεί σε μια κατάσταση στην οποία θα έχουμε δύο μπαλαντέρ ταυτόχρονα στον κατεβασμένο συνδυασμό), η κίνηση δεν επιτρέπεται. iii. Να πετάξει ένα από τα φύλλα του στη στοίβα με τα σκάρτα φύλλα. 7. Όταν σε έναν παίχτη τελειώσουν τα φύλλα, πετώντας το τελευταίο του στα σκάρτα, αυτός παίρνει το ένα μπιριμπάκι, ή αν αυτός ή ο συμπαίχτης του ήδη είχαν πάρει μπιριμπάκι, το παιχνίδι τελειώνει και μετράμε πόντους. Αν σε κάποιον τελειώσουν τα φύλλα πριν πετάξει φύλλο στα σκάρτα (δηλαδή στο δεύτερο μέρος του γύρου του, όπου κατεβάζει και κολλάει φύλλα), παίρνει το μπιριμπάκι και το χρησιμοποιεί αμέσως (δηλαδή ο γύρος του συνεχίζεται κανονικά). Σε περίπτωση που είχε ήδη πάρει μπιριμπάκι αυτός ή ο συμπαίχτης του, και πάλι το παιχνίδι τελειώνει, αφού όμως ολοκληρώσει το γύρο του. Το παιχνίδι θα τελειώσει επίσης αν τα η στοίβα με τα κρυφά φύλλα αδειάσει. Τότε ο παίχτης που πήρε το τελευταίο φύλλο, ολοκληρώνει το γύρο του και το παιχνίδι τελειώνει αμέσως μετά. 8. Η βαθμολόγηση γίνεται ως εξής: Δε βαθμολογούνται οι παίχτες, αλλά οι ομάδες. Το κάθε φύλλο έχει μια αξία ανάλογα με τον αριθμό του: 3 έως 7 αξίζουν 5 πόντους, 8 έως και Ρήγας, αλλά και το 2, αξίζουν 10 πόντους. Ο άσσος αξίζει 15 πόντους, ενώ ο τζόκερ αξίζει 20 πόντους. Η αξία κάθε φύλλου που έχει κατεβάσει μια ομάδα προστίθεται στο σκορ της, αλλά η αξία κάθε φύλλου που έχει ο κάθε παίχτης στα χέρια του αφαιρείται από το σκορ της ομάδας του. Η κάθε καθαρή μπιρίμπα αξίζει 200, η κάθε βρώμικη 100. Αν κάποια μπιρίμπα φτάσει τα 13 φύλλα (δηλαδή έχει όλα τα φύλλα στο χρώμα), αξίζει 1000 αν είναι καθαρή και 500 αν είναι βρώμικη. 9

10 Αν κάποια ομάδα δεν πήρε μπιριμπάκι, παίρνει -100 στο σκορ της. Η ομάδα που έκλεισε παίρνει +100 στο σκορ της Βασική Στρατηγική των παιχτών στη Μπιρίμπα Ο κάθε παίχτης μπορεί να επηρεάσει το παιχνίδι στο γύρο του, με τις πράξεις του. 1. Καταρχήν πρέπει να μπορεί να αποφασίσει αν τον συμφέρει να πάρει τις κάρτες από τη στοίβα των σκάρτων, ή μια κρυφή. Για να το κάνει αυτό, θα πρέπει να αντιληφθεί αν οι κάρτες από τα σκάρτα βοηθάνε την ομάδα του να κάνει συνδυασμούς, ή αν μπορεί να εμποδίσει παίρνοντάς τες την αντίπαλη ομάδα να κάνει συνδυασμούς. Θα πρέπει επίσης να θυμηθεί τι φύλλα έχουν οι αντίπαλοι, αν τους κάνουν τα φύλλα που υπάρχουν στα σκάρτα, και το ίδιο και για το συμπαίχτη του. Έτσι θα αποφασίσει αν θα πάρει κάρτα από τη στοίβα με τις κρυφές, ή όλες τις κάρτες των σκάρτων. 2. Στη συνέχεια θα πρέπει να βρει τι συνδυασμούς μπορεί να υλοποιήσει με τα φύλλα στη διάθεσή του, και να αποφασίσει τελικά ποιους από αυτούς τον συμφέρει να υλοποιήσει. Είναι πιθανό να έχει κάρτες οι οποίες ταιριάζουν σε πάνω από έναν συνδυασμό, σε αυτή την περίπτωση θα πρέπει να αποφασίσει ποιόν από θα επιλέξει. Επίσης, υλοποιώντας ένα συνδυασμό, οι αντίπαλοι (που θα δουν το συνδυασμό αυτό) μπορούν να τον εμποδίσουν στη συνέχεια να τον μεγαλώσει, μη πετώντας φύλλα στα σκάρτα που σε άλλη περίπτωση θα έριχναν (γιατί δεν τα χρειάζονται άμεσα). Από την άλλη, μπορεί ο συμπαίχτης να κολλήσει κάρτες σε ένα συνδυασμό που κατέβασε ο παίχτης, ή να μην πετάξει φύλλα στα σκάρτα τα οποία σε άλλη περίπτωση θα πέταγε, αν ο 10

11 παίχτης κατεβάσει τον κατάλληλο συνδυασμό, άρα κάποιες φορές συμφέρει να κατεβάσουμε ένα συνδυασμό από νωρίς. (Μπορεί ακόμα και να κλείσει ο συμπαίχτης αν τον βοηθήσουμε με κατάλληλο συνδυασμό.) Μπορεί επίσης να συμβεί ένας αντίπαλος να έχει πάνω του μόνο φύλλα που δεν τον συμφέρει να πετάξει. Σε αυτή την περίπτωση μια στρατηγική είναι να παίρνει ο παίχτης συνέχεια τα φύλλα από τα σκάρτα πριν το γύρο αυτού του αντιπάλου, ώστε ο αντίπαλος, όταν έρθει η σειρά του, και αν τραβήξει και πάλι χρήσιμο φύλλο, να αναγκαστεί να ξεσκαρτάρει κάποιο σημαντικό φύλλο, το οποίο θα πάρει στη συνέχεια ο συμπαίχτης. Γενικά, η επιλογή του πότε και ποιόν συνδυασμό θα κατεβάσει ο παίχτης, μπορεί να είναι μεγάλης σημασίας, και ο παίχτης πρέπει να λάβει υπόψη του πολλά και σε κάποιες περιπτώσεις αντικρουόμενα γεγονότα πριν αποφασίσει πως θα χρησιμοποιήσει τα φύλλα στο γύρο του. 3. Τέλος, ένας παίχτης θα πρέπει να πετάξει κάποιο φύλλο στα σκάρτα. Για να το κάνει αυτό θα πρέπει να προσπαθήσει, το φύλλο αυτό να μη χρησιμεύει στους αντιπάλους, (άρα πρέπει και να θυμάται τα φύλλα που πήραν), αλλά και αν πιστεύει ότι ο αντίπαλος δε θα πάρει κάποιο φύλλο (γιατί δεν του κάνει, ή γιατί δεν τον συμφέρει αυτή τη στιγμή), να προσπαθήσει να βοηθήσει το συμπαίχτη του, περνώντας φύλλα που μπορεί να χρειάζεται. Αυτό δε θα πρέπει να είναι εμφανές, γιατί ο αντίπαλος θα έχει τη δυνατότητα να πάρει τα φύλλα στη σειρά του, πριν έρθει η σειρά του συμπαίχτη. Αυτό σημαίνει ότι ο παίχτης πρέπει να θυμάται όσο το δυνατόν περισσότερα από τα φύλλα που έχει δει, και να αποφασίσει πως μπορεί να βοηθήσει καλύτερα την ομάδα του πετώντας ένα φύλλο. 4. Πέραν αυτών, ένας παίχτης πρέπει να μπορεί να κρίνει αν τον συμφέρει να κλείσει (δηλαδή να πετάξει όλα του τα φύλλα), ή να περιμένει λίγο (μήπως και κάνει μεγαλύτερο σκορ αυτός η ο συμπαίχτης), αλλά πρέπει να εμποδίσει τους αντιπάλους να κάνουν το ίδιο. Αυτό γίνεται κρίνοντας πόσα και ποια φύλλα έχουν οι συμπαίχτες και οι αντίπαλοι κατεβασμένα ή στο χέρι τους, αν υπάρχουν μπιριμπάκια στο παιχνίδι και ποιάς ομάδας είναι, και τα σκορ της κάθε ομάδας μέχρι τώρα. 11

12 1.5. Δυσκολίες στην Υλοποίηση Έχοντας υπόψη μας τους κανόνες της μπιρίμπας, καθώς και τις βασικές στρατηγικές που ακολουθούν οι ανθρώπινοι παίχτες, παρατηρούμε τα εξής: Στη μπιρίμπα, ο παίχτης δεν έχει τον απόλυτο έλεγχο στα φύλλα με τα οποία ξεκινάει, ή σε αυτά που τραβάει. (η μπιρίμπα είναι παιχνίδι τύχης κατά ένα μέρος) Στη μπιρίμπα ο παίχτης δε διαθέτει όλες τις απαραίτητες πληροφορίες για να αποφασίσει ποιά είναι η σωστότερη κίνηση σε κάθε περίπτωση. (η μπιρίμπα είναι επίσης παιχνίδι ατελούς πληροφόρησης) Στη μπιρίμπα είναι απαραίτητο ο παίχτης να θυμάται τα φύλλα που έχει δει, για να αποφασίσει ποιά είναι η σωστότερη κίνηση σε κάθε περίπτωση. (η μπιρίμπα είναι λοιπόν και παιχνίδι μνήμης) Αυτοί οι παράγοντες κάνουν δύσκολη την υλοποίηση μιας ανταγωνιστικής τεχνητής νοημοσύνης για την μπιρίμπα, γιατί βλέπουμε οτι συνήθως ο παίχτης δε θα ξέρει με βεβαιότητα ποιά επιλογή από όσες έχει είναι η βέλτιστη. Επίσης, επειδή το παιχνίδι παίζεται με πολλά φύλλα, κι επειδή αρκετά από αυτά είναι μπαλαντέρ, οι επιλογές που έχει ο κάθε παίχτης κατά τη διάρκεια του γύρου του μπορεί να γίνουν πάρα πολλές, τόσες που αν συνυπολογίσουμε το πόσες πολλές παράμετροι μπορούν να διαμορφώσουν την καταλληλότητα μιας κίνησης, ο υπολογισμός της βέλτιστης κίνησης είναι δυνατόν να έχει μεγάλες απαιτήσεις σε υπολογιστική ισχύ. 12

13 Κεφάλαιο 2: Γενικές Γνώσεις 2.1. Παιχνίδια με Κάρτες Τα παιχνίδια μπορούν να χωριστούν ανάλογα με το είδος της πληροφόρησης που έχει ο παίχτης σχετικά με την κατάσταση του παιχνιδιού, σε παιχνίδια τέλειας ή πλήρους πληροφόρησης και παιχνίδια ατελούς πληροφόρησης. Επίσης, χωρίζονται ανάλογα με το ρόλο που παίζει η τύχη στην πορεία του παιχνιδιού, σε αιτιοκρατικά και σε τυχαία Παιχνίδια Πλήρους Πληροφόρησης - Αιτιοκρατικά Σε αυτά τα παιχνίδια, οι παίχτες έχουν πλήρη γνώση της κατάστασης του παιχνιδιού κάθε φορά που πρέπει να παίξουν. Αυτό σημαίνει ότι γνωρίζουμε το δέντρο με όλες τις δυνατές καταστάσεις του παιχνιδιού. Παραδείγματα τέτοιων παιχνιδιών είναι το σκάκι και η ντάμα Παιχνίδια Ατελούς Πληροφόρησης - Αιτιοκρατικά Σε αυτά τα παιχνίδια οι παίχτες δε γνωρίζουν πλήρως την κατάσταση του παιχνιδιού, και πρέπει να παίρνουν αποφάσεις βασισμένοι σε ατελείς πληροφορίες. Αυτό σημαίνει οτι δε γνωρίζουμε πλήρως το δέντρο τις δυνατές καταστάσεις του παιχνιδιού. Παραδείγματα τέτοιων παιχνιδιών είναι η ναυμαχία και το Stratego Παιχνίδια Πλήρους Πληροφόρησης Τυχαία Σε αυτά τα παιχνίδια, οι παίχτες έχουν πλήρη γνώση της κατάστασης του παιχνιδιού κάθε φορά που πρέπει να παίξουν, αλλά δεν μπορούν να προβλέψουν τις μελλοντικές καταστάσεις γιατί αυτές επηρεάζονται από τυχαία γεγονότα. 13

14 Παραδείγματα τέτοιων παιχνιδιών είναι το τάβλι και το φιδάκι Παιχνίδια Ατελούς Πληροφόρησης Τυχαία Σε αυτά τα παιχνίδια οι παίχτες όχι μόνο δε γνωρίζουν πλήρως την κατάσταση του παιχνιδιού, αλλά και οι μελλοντικές καταστάσεις επηρεάζονται από τυχαία γεγονότα. Είναι προφανές ότι αύτη η κατηγορία παιχνιδιών είναι η δυσκολότερη για να αντιμετωπιστεί με μια τεχνητή νοημοσύνη. Συνήθως τα παιχνίδια με κάρτες ανήκουν σε αυτή την κατηγορία. Παραδείγματα τέτοιων παιχνιδιών είναι η μπιρίμπα, το πόκερ και η δηλωτή Τεχνητή νοημοσύνη και παιχνίδια Για να μπορέσει μια τεχνητή νοημοσύνη να «παίξει» ένα παιχνίδι, θα πρέπει ουσιαστικά να είναι ικανή να αποφασίζει πως θα παίξει κάθε φορά που έχει τη δυνατότητα να κάνει κάτι. Για να το καταφέρει αυτό όμως, θα πρέπει να γνωρίζει τι δυνατότητες κινήσεων έχει και, λαμβάνοντας υποψιών όλους τους παράγοντες που επηρεάζουν τη χρησιμότητα της κάθε κίνησης, να βρίσκει την καλύτερη για τη δεδομένη κατάσταση. Ουσιαστικά η τεχνητή νοημοσύνη θα πρέπει να βρει το δέντρο με τις καταστάσεις του παιχνιδιού, και να επιλέξει την κίνηση που οδηγεί στην κατάσταση που οδηγεί στη νίκη (άρα θα πρέπει να βρει το βέλτιστο δρόμο από το δέντρο) Παράδειγμα: Για το παιχνίδι της τρίλιζας. Έχουμε δύο παίχτες, τον Max που παίζει με χ, και τον Min που παίζει με ο. Οι παίχτες παίζουν εναλλάξ, ο καθένας στο γύρο του βάζει ένα σημάδι σε κάποιο κενό σημείο ενώ κερδίζει αυτός που έχει τρία δικά του σημάδια σε μία ευθεία. Μια κατάσταση παριστάνει τη θέση των σημαδιών των παιχτών. Ο χώρος καταστάσεων αποτελείται από όλες τις πιθανές επιτρεπτές καταστάσεις. Οι τελεστές μετάβασης είναι οι επιτρεπτές κινήσεις Οι τελικές καταστάσεις έχουν γνωστά χαρακτηριστικά. (τρία σημάδια σε μια ευθεία, ή να μη μπορεί κανείς να παίξει) Ο παίχτης στη σειρά του θα επιδιώξει να κάνει την καλύτερη κίνηση για αυτόν και ταυτόχρονα τη χειρότερη για τον αντίπαλο. Βρίσκουμε τον κάθε δυνατό συνδυασμό επιτρεπτών κινήσεων, 14

15 δημιουργώντας έτσι ένα «Δέντρο παιχνιδιού» Η τεχνητή νοημοσύνη αξιολογεί τα αποτελέσματα με βάση αυτό που οδηγεί σε νίκη, και θα επιλέξει να βρεθεί στις καταστάσεις που οδηγούν εκεί Απληροφόρητη Αναζήτηση (Τυφλή) Απληροφόρητη λέγεται η αναζήτηση κατά την οποία δεν έχουμε στοιχεία για το προς τα πού να ψάξουμε, οπότε θα πρέπει να βρούμε ολόκληρο το δέντρο καταστάσεων και στη συνέχεια να αξιολογήσουμε τις διαδρομές. Μπορεί να είναι είτε κατά βάθος (depth-first) είτε κατά πλάτος (breadth-first) (δηλαδή είτε πρώτα να εξετάσουμε κάθε διαδρομή καταστάσεων ως το τέλος της και μετά να περάσουμε στην επόμενη, είτε να βρούμε όλους τους κόμβους του ενός επιπέδου, και στη συνέχεια να περάσουμε στο επόμενο επίπεδο) Η αναζήτηση κατά βάθος δεν είναι ούτε βέλτιστη, ούτε πλήρης, και δεν εγγυάται ότι θα βρει τη λύση, έχει όμως τις μικρότερες απαιτήσεις από τις δύο σε μνήμη και υπολογισμούς. Αντίθετα η αναζήτηση κατά πλάτος, είναι πλήρης και βέλτιστη, αλλά απαιτεί περισσότερη μνήμη και υπολογιστική ισχύ. Και οι δύο αυτές μέθοδοι όμως μπορεί να είναι πολύ αργές και απαιτούν πάρα πολλή μνήμη για την επίλυση περίπλοκων προβλημάτων. Για παράδειγμα αν έχουμε 10 κόμβους ανά επίπεδο, και βάθος 6 επίπεδα, η width-first θα χρειαστεί ~20 λεπτά για τον υπολογισμό, και 10 Gb μνήμης για να αποθηκεύσει τα αποτελέσματα 1, απαιτήσεις απαγορευτικές αν θέλουμε να κάνουμε πολλαπλές αναζητήσεις σε αντίστοιχα δέντρα. 15

16 Παραλλαγές αυτών, είναι η αναζήτηση ομοιόμορφου κόστους και η αναζήτηση περιορισμένου βάθους. Από αυτές, η πρώτη είναι παραλλαγή της αναζήτησης κατά πλάτος, και ορίζει ότι θα επεκτείνεται πρώτα ο κόμβος με το μικρότερο κόστος διαδρομής, ενώ η δεύτερη είναι παραλλαγή της αναζήτησης κατά βάθος, και περιορίζει τα επίπεδα κατά βάθος στα οποία ψάχνουμε Πληροφορημένη Αναζήτηση Ως πληροφορημένη, ορίζουμε μια αναζήτηση στην οποία χρησιμοποιούμε τις γνώσεις που έχουμε για το πρόβλημα, ώστε να βρούμε τη λύση πολύ πιο αποδοτικά και γρήγορα από τις απληροφόρητες αναζητήσεις. Η λογική σε αυτή την αναζήτηση, είναι να χρησιμοποιήσουμε τις γνώσεις που έχουμε για το πρόβλημα ώστε να επεκτείνουμε κάθε φορά το δέντρο προς το σημείο που μας φαίνεται καλύτερο. Αυτή η μέθοδος ονομάζεται αναζήτηση πρώτα-στο-καλύτερο (best-first). Για να βρούμε αυτό το σημείο, χρησιμοποιούμε μια συνάρτηση αξιολόγησης f(n), η οποία συνήθως δίνει μικρότερες τιμές όσο πιο κοντά στο στόχο είναι το σημείο που αξιολογεί. Έτσι το πρόβλημα έγκειται κυρίως σε αυτή την συνάρτηση αξιολόγησης. Για να λειτουργήσει αυτή, θα βασιστεί αναγκαστικά σε κάποια ευρετική συνάρτηση (h(n)) Συναρτήσεις Αξιολόγησης 1. Άπληστη αναζήτηση: Προσπαθεί να επεκτείνει τον κόμβο που είναι πιο κοντινός στο στόχο, υποθέτοντας ότι αυτός είναι ο πιθανότερος να οδηγήσει σε γρήγορη λύση. Αξιολογεί του κόμβους χρησιμοποιώντας τη συνάρτηση f(n) = h(n) Η υπόθεση αυτή όμως, μπορεί να οδηγήσει σε λανθασμένες κινήσεις, αφού αξιολογεί τα βήματα προς το στόχο μόνο ανάλογα με την απόστασή τους από το τέρμα. Συμβαίνει συχνά όμως ο συντομότερος δρόμος να οδηγεί σε αδιέξοδο. Σε αυτή την περίπτωση ο αλγόριθμος θα πρέπει να γυρίσει πίσω, και, είναι πιθανό να μη βρει ποτέ λύση, αλλά να κινείται ατέρμονα μεταξύ δύο σημείων τα οποία έχουν, το καθένα ιδωμένο από το άλλο, τη μικρότερη φαινομενική απόσταση από το στόχο. Αυτή η αναζήτηση μοιάζει με την αναζήτηση πρώτα κατά βάθος, γιατί προτιμά να ακολουθεί μια διαδρομή κατά την πορεία προς το στόχο, και γυρίζει πίσω όταν φτάσει σε αδιέξοδο. Έχει όμως και τα ίδια ελαττώματα με αυτή την αναζήτηση, δηλαδή δεν εγγυάται ότι θα βρει λύση, ούτε ότι θα βρει τη βέλτιστη λύση. Έχει όμως καλή χρονική και χωρική πολυπλοκότητα. 2. Αναζήτηση Α* : Αξιολογεί τους κόμβους λαμβάνοντας υπόψη το κόστος μετάβασης στον κόμβο (συνάρτηση g(n)) καθώς και το κόστος μετάβασης από τον κόμβο στο στόχο (συνάρτηση h(n)). Δηλαδή f(n) = g(n)+h(n) Αυτή η αναζήτηση λοιπόν αποτελεί βελτίωση της άπληστης αναζήτησης και μας βρίσκει τη φθηνότερη (σε απόσταση) διαδρομή από το σημείο που βρισκόμαστε, στο στόχο. Αποδεικνύεται ότι η συνάρτηση αυτή είναι (υπό προϋποθέσεις) πλήρης και βέλτιστη, ενώ είναι επίσης ο βέλτιστα αποδοτικός αλγόριθμος μεταξύ των αλγορίθμων που επεκτείνουν ένα ένα τα κλαδιά του δέντρου. Αυτό σημαίνει ότι κανένας άλλος αλγόριθμος αυτού του τύπου δεν επεκτείνει εγγυημένα λιγότερους κόμβους. 16

17 Παρόλα τα πλεονεκτήματά του σε σχέση με αλγόριθμους αυτού του τύπου όμως, και στον Α* ο χρόνος υπολογισμού αυξάνεται εκθετικά με το μήκος σε κόμβους της απόστασης από το στόχο. Επίσης, επειδή διατηρούνται στη μνήμη όλοι οι κόμβοι που παράχθηκαν, ο διαθέσιμος χώρος εξαντλείται πολύ γρήγορα. Βλέπουμε λοιπόν ότι και ο Α* πρακτικά δεν είναι ικανός να λύσει προβλήματα μεγάλης κλίμακας Ευρετικές Συναρτήσεις Για τη βελτίωση της απόδοσης της μεθόδου Α*, είναι βασικό να βρούμε την κατάλληλη ευρετική συνάρτηση, μία που δε θα υπερεκτιμά ποτέ τον αριθμό των βημάτων προς το στόχο. Πρέπει να αναφερθεί όμως, πως δεν υπάρχουν έτοιμες ευρετικές συναρτήσεις που να μπορούν να εφαρμοστούν σε πολλά διαφορετικά προβλήματα. Αντίθετα, είναι απαραίτητο να βρεθεί ξεχωριστή ευρετική συνάρτηση για το κάθε πρόβλημα, αφού το κάθε πρόβλημα λύνεται (και η λύση του εκτιμάται) με διαφορετικό τρόπο από τα άλλα προβλήματα Ασαφής Λογική (Fuzzy Logic) Η Ασαφής Λογική αποτελεί τη γενίκευση της κλασσικής λογικής, κατά την οποία μία έννοια μπορεί να κατέχει ένα βαθμό αλήθειας οπουδήποτε ανάμεσα στο 0 και το 1. Η κλασσική λογική εφαρμόζεται μόνο σε έννοιες οι οποίες είναι ή ολοκληρωτικά αληθείς (1) ή ολοκληρωτικά λανθασμένες (0). Αντίθετα, με την ασαφή λογική μπορούμε να χειριστούμε όρους όπως "νεαρός", "μικρός", "δυνατός", τα οποία μπορούν να ανήκουν ταυτόχρονα σε δύο ή περισσότερα διαφορετικά σύνολα τιμών. Τα συστήματα που στηρίζονται στην ασαφή λογική, χρησιμοποιούν μία συλλογή ασαφών συναρτήσεων συμμετοχής και ασαφών ΑΝ-ΤΟΤΕ ( IF-THEN ) κανόνων. Αυτό συγκρίνεται με τις υψηλές γλώσσες προγραμματισμού, όπου το πρόγραμμα αποτελείται από IF-THEN κανόνες. Η Ασαφής Λογική είναι ιδιαίτερα χρήσιμη για περιπτώσεις στις οποίες οι κλασσικέςσυμβατικές τεχνολογίες δεν είναι αποτελεσματικές, όπως σε συστήματα και μηχανήματα τα οποία δεν μπορούν με ακρίβεια να περιγραφούν από μαθηματικά μοντέλα, σε εκείνα τα οποία έχουν συγκεκριμένες αβεβαιότητες ή αντιφατικές καταστάσεις και τέλος σε συστήματα που είναι γλωσσικά ελεγχόμενα. Στην περίπτωση της εφαρμογής μας, όπου οι κινήσεις του παίχτη εξαρτώνται παράλληλα από πολλούς διαφορετικούς παράγοντες, το σύστημα αξιολόγησης μπορεί να αναπαρασταθεί από ένα σύστημα ασαφούς λογικής πολύ καλύτερα από ότι θα μπορούσε με ένα διαφορετικό μαθηματικό μοντέλο. 17

18 Κεφάλαιο 3: Εφαρμογή 3.1. Εισαγωγή 3.1. Εισαγωγή - Βασικές ιδέες για τον τρόπο αντιμετώπισης του πρoβλήματος Στο παιχνίδι της μπιρίμπας όπως είδαμε από τους κανόνες, ο παίχτης στο γύρο του κάνει τρία πράγματα: 1. Διαλέγει αν θα πάρει τα φύλλα από τη στοίβα των σκάρτων ή ένα μόνο από τη στοίβα με τα κλειστά. 2. Κατεβάζει νέους ή βελτιώνει ήδη υπάρχοντες συνδυασμούς. 3. Πετάει ένα από τα φύλλα του, ανοιχτό στα σκάρτα. 18

19 Η ai λοιπόν θα πρέπει να μπορεί να παίρνει αυτές τις τρείς αποφάσεις για να παίξει. Για να το κάνει αυτό, θα πρέπει πρώτα να δημιουργηθεί ένα πλαίσιο στο οποίο θα μπορεί να παίξει η ai (και ο ανθρώπινος παίχτης). Αυτό το μη-ai κομμάτι είναι εξίσου σημαντικό, αφού περιλαμβάνει τις βασικές κλάσεις με κάρτες και στοίβες καρτών και τις συναρτήσεις τους, τα γραφικά, καθώς και την «κύρια» συνάρτηση του παιχνιδιού η οποία θα καλεί όλες τις άλλες και θα εφαρμόζει τους κανόνες της μπιρίμπας. Αφού υπάρξει αυτό το κομμάτι, η ai θα πρέπει σε κάθε φάση του παιχνιδιού να μπορεί να βρει το δέντρο με τις δυνατές κινήσεις, και να το αξιολογεί ώστε να βρει τη βέλτιστη. Η αξιολόγηση θα γίνει με ευρετικές συναρτήσεις καταρχήν, και τα αποτελέσματά αυτών θα περάσουν μέσα από ένα σύστημα ασαφούς λογικής, έτσι ώστε να λάβουμε υπόψη όλες τις ευρετικές συναρτήσεις (οι οποίες λειτουργούν παράλληλα μεταξύ τους). Στη συνέχεια θα επιλεγούν τα 5 καλύτερα αποτελέσματα, και από αυτά θα επιλεγεί μόνο ένα. Αυτό δε θα είναι το ίδιο κάθε φορά, καθώς αναλογικά με την απόσταση μεταξύ τους δίνονται πιθανότητες σε κάθε ένα από αυτά να επιλεγεί, ευνοώντας πάντα αυτά που έχουν αξιολογηθεί ως καλύτερα. Αυτό γίνεται γιατί εφόσον η μπιρίμπα είναι παιχνίδι τύχης και οι πληροφορίες που έχουμε για την κατάσταση του παιχνιδιού δεν είναι πλήρεις, δεν είναι σίγουρο ότι από δύο κινήσεις με μικρή διαφορά στη μεταξύ τους αξιολόγηση, πάντα είναι καλύτερη αυτή που έχει υψηλότερη βαθμολογία. Επιπλέον, αντιμετωπίζεται το γεγονός ότι η ai γίνεται προβλέψιμη αν αντιδρά πάντα με τον ίδιο τρόπο Επεξηγήσεις πάνω στις αρχικές ιδέες Σχετικά με το μη-ai μέρος Αρχικά λοιπόν δημιουργούμε μια κλάση για τις κάρτες, μια για τις στοίβες καρτών και μία για ολόκληρα πακέτα με στοίβες καρτών. Οι κάρτες φυσικά έχουν ως βασικό χαρακτηριστικό το χρώμα και την αξία τους, ενώ οι στοίβες και τα πακέτα είναι ουσιαστικά λίστες με τα προηγούμενα στην ιεραρχία (δηλ. οι στοίβες είναι μια λίστα με κάρτες, ενώ τα πακέτα είναι μια λίστα με στοίβες) Οι κλάσεις με λίστες θα έχουν βασικές συναρτήσεις που θα μας επιτρέπουν να Πέραν αυτού θα χρειαστούμε συναρτήσεις μέσα στις στοίβες, για να βρούμε αν ένας δοσμένος συνδυασμός είναι έγκυρος, και με χρήση αυτού με άλλη συνάρτηση να μπορούμε να βρούμε αν κάποια φύλλα μπορούν να μπουν με την κατάλληλη σειρά ώστε να δημιουργήσουν έναν έγκυρο συνδυασμό. 19

20 Σχετικά με την εύρεση των δυνατών συνδυασμών και του δέντρου του παιχνιδιού. Α) Εύρεση δυνατών συνδυασμών. Χρειαζόμαστε δύο τέτοιες συναρτήσεις, μια που να βρίσκει τους νέους συνδυασμούς που μπορούμε να φτιάξουμε με χρήση των φύλλων στο χέρι μας, και άλλη μια που να βρίσκει σε ποιους ήδη κατεβασμένους μπορούμε να κολλήσουμε φύλλα. Θα πρέπει η καθεμιά να βρίσκει όλους τους αντίστοιχους συνδυασμούς. Για να γίνει αυτό, χρειάζεται μια συνάρτηση η οποία θα μπορεί να αποφασίσει αν είναι έγκυρος ένας δοσμένος συνδυασμός φύλλων, και στη συνέχεια να δίνουμε σε αυτή τέτοιους συνδυασμούς των φύλλων που έχουμε στο χέρι μέχρι να βρούμε όλους τους έγκυρους. Στην πρώτη συνάρτηση οι συνδυασμοί θα είναι μόνο μεταξύ των φύλλων που κρατάει ο παίχτης στο χέρι του, ενώ στη δεύτερη τα φύλλα που κρατάει ο παίχτης θα συνδυαστούν με τους προϋπάρχοντες κατεβασμένους συνδυασμούς. Στην πράξη, οι συνδυασμοί που θα πρέπει να δοκιμάσουμε μέχρι να βρούμε τους σωστούς, είναι πάρα πολλοί για την επεξεργαστική ισχύ που διαθέτουμε. Γι αυτό λοιπόν και βάσει των κανόνων της μπιρίμπας (που περιορίζουν τους δυνατούς συνδυασμούς) ακολουθείται μια ευρετική μέθοδος που δε διαφέρει πολύ από τον ανθρώπινο τρόπο σκέψης, για να μειώσει αρκετά την απαιτούμενη ισχύ χωρίς να αλλοιώσει τα αποτελέσματα. Η μέθοδος αναλύεται στο επόμενο κεφάλαιο. Τέλος, τα δεδομένα των δύο συναρτήσεων αποθηκεύονται μαζί σε μια τελική λίστα, αλλά στον κάθε συνδυασμό έχουμε κρυμμένες τιμές που μας δείχνουν από ποιά συνάρτηση προήλθαν, και σε κάθε περίπτωση ποιά φύλλα χρησιμοποίησε ο παίχτης για την υλοποίησή των συνδυασμών αυτών. Β) Εύρεση του δέντρου του παιχνιδιού. Με χρήση της τελευταίας συνάρτησης που αναφέρθηκε, μπορούμε να βρούμε κάθε στιγμή όλους τους δυνατούς συνδυασμούς για δοθέντα φύλλα στο χέρι μας. Για να βρούμε λοιπόν το δέντρο του παιχνιδιού θα πρέπει να δοκιμάσουμε τον κάθε ένα συνδυασμό, και στη συνέχεια από τα φύλλα που έμειναν στο χέρι να ξανατρέξουμε την τελική συνάρτηση και συνεχίσουμε να δοκιμάζουμε κάθε νέο συνδυασμό μέχρι να έχουμε ένα δέντρο το οποίο θα απεικονίζει όλες τις δυνατότητες που έχουμε για να παίξουμε τα τρέχοντα φύλλα μας. Θα είναι δηλαδή μία λίστα από «συνδυασμούς συνδυασμών» Αυτό είναι απαραίτητο γιατί θα πρέπει να αξιολογήσουμε κάθε σημείο του δέντρου στη συνέχεια για να βρεθεί η βέλτιστη κίνηση. Παρόλα αυτά, πρακτικά το δέντρο μπορεί να γίνει πολύ μεγάλο για την επεξεργαστική και αποθηκευτική ισχύ μας (είναι γνωστό από τη θεωρία του προηγούμενου κεφαλαίου, αλλά 20

21 σε δοκιμή με 13 φύλλα στο χέρι, το δέντρο έφτασε πλέον των παρακλαδιών, με το καθένα να χρειάζεται ~0,05 sec για να υπολογιστεί, ώσπου κατέρρευσε τελικά η python) Επειδή όμως η περεταίρω αξιολόγηση βασίζεται στο οτι το δέντρο θα καταλήγει στο τέλος του, δε μπορούμε να περιορίσουμε το βάθος που θα φτάσει. Περιορίζουμε λοιπόν το πλάτος (limited width), επιτρέποντας κάθε φορά τη δοκιμή έως έξι συνδυασμών, οι επιλέγοντας από τη λίστα τους «καλύτερους» με μια απλή μέθοδο που αναλύεται παρακάτω Σχετικά με τις ευρετικές συναρτήσεις για την αξιολόγηση των δεδομένων. Έχοντας το δέντρο των συνδυασμών αρκεί να το αξιολογήσουμε για να βρούμε τη βέλτιστη κίνηση. Για το σκοπό αυτό χρησιμοποιούνται ορισμένες «ευρετικές συναρτήσεις». Αυτές τρέχουν παράλληλα και έχουν ως σκοπό να αξιολογήσουν την επιρροή που έχουν οι εξής παράγοντες: Φύλλα στη διάθεση των αντιπάλων και φύλλα που έχουν κατεβάσει αυτοί, φύλλα στη διάθεση του συμπαίχτη, φύλλα πεταγμένα στα σκάρτα και τέλος, αξία των συνδυασμών που υλοποιεί ο παίχτης. Η αξιολόγηση γίνεται με ένα σύστημα «fuzzy logic»: Οι συναρτήσεις αυτές μεταβάλλουν μια τιμή σε κάθε φύλλο που κρατάει ο παίχτης, θετικά ή αρνητικά. Στο τέλος μια συνάρτηση αναλαμβάνει να αθροίσει αυτές τις τιμές για καθένα από τους «συνδυασμούς συνδυασμών» του δέντρου, καθώς και να τις διορθώσει ανάλογα με την κατάσταση του παιχνιδιού. Τελικά λοιπόν, επιλέγονται οι 5 καλύτεροι συνδυασμοί με θετική αξία (αν υπάρχουν) και σε αυτούς δίνονται σταθμισμένες πιθανότητες να επιλεγούν, αναλογικά με την αξία και τις αποστάσεις μεταξύ των αξιών τους. Έτσι εξασφαλίζουμε οτι θα προτιμώνται κυρίως οι καλύτεροι συνδυασμοί, αλλά εισάγεται και μια αβεβαιότητα στον τρόπο παιχνιδιού της τεχνητής νοημοσύνης κάνοντάς τη λιγότερο προβλέψιμη. Αυτή η μέθοδος ακολουθείται εξ ολοκλήρου για τη δεύτερη απόφαση που πρέπει να πάρει η τεχνητή νοημοσύνης, δηλαδή πως να παίξει τα φύλλα της. Για την πρώτη και τρίτη απόφαση, δηλαδή τι φύλλο/α να πάρει και τι φύλλο να ρίξει στα σκάρτα, δε χρειάζεται να βρούμε το δέντρο του παιχνιδιού. Τρέχει μια εκδοχή των ευρετικών συναρτήσεων και του συστήματος αξιολόγησης των καρτών, και βάσει αυτού βρίσκουμε τη βέλτιστη κίνηση. Η απόφαση είναι πιο εύκολη εδώ γιατί δε χρειάζεται να βρούμε όλους τους «συνδυασμούς συνδυασμών», μόνο να κοιτάξουμε όλους τους συνδυασμούς που γίνονται με την/τις εν λόγω κάρτα/κάρτες, από εμάς, τους αντιπάλους και τους συμπαίχτες μας, πριν αποφασίσουμε. 21

22 3.3 Γραφικά Βασικές Ιδέες για τα Γραφικά Για να εμφανίσουμε γραφικά στην οθόνη ενός υπολογιστή, χρειαζόμαστε ένα πρόγραμμα το οποίο θα μπορεί ρυθμιστεί για να δείξει τα πράγματα που χρειαζόμαστε σε ένα «παράθυρο». Όταν τα πράγματα που θέλουμε να φαίνονται στην οθόνη αλλάξουν, θα πρέπει να «δώσουμε» στο πρόγραμμα τη νέα απεικόνιση, μαζί με την εντολή να ανανεώσει το παράθυρο με βάση τα νέα δεδομένα που του δόθηκαν. Επειδή ο ανθρώπινος εγκέφαλος μπορεί να επεξεργαστεί εικόνες που απέχουν μεταξύ τους το πολύ 1/30 του δευτερολέπτου, αν το παράθυρο ανανεώνεται συχνότερα, για το ανθρώπινο μυαλό η αλλαγή θα είναι ακαριαία. Έχουμε τη δυνατότητα να ανανεώσουμε το παράθυρο πολύ γρηγορότερα από αυτό το χρονικό διάστημα, αλλά περιορίζουμε τις ανανεώσεις σε ένα τέτοιο χρονικό πλαίσιο, έτσι ώστε να εξοικονομούμε επεξεργαστική ισχύ για άλλες εργασίες. Για να εμφανίσουμε γραφικά στην οθόνη ενός υπολογιστή χρησιμοποιήθηκε η βιβλιοθήκη pygame, η οποία είναι μια μεταφορά βιβλιοθηκών γραμμένων σε γλώσσα c++ με τρόπο που να συνεργάζονται με την python. Για δυσδιάστατα γραφικά, παρέχει όλες τις βασικές λειτουργίες που θα χρειαστούμε, καθώς και μια λίστα με «γεγονότα» όπως κάθε πάτημα πλήκτρου ή μετακίνηση του ποντικιού. Αυτή η λίστα είναι πολύ χρήσιμη για την επικοινωνία ανθρώπου-μηχανής, αφού ανάλογα με τις κινήσεις που κάνει ο άνθρωπος, η εφαρμογή θα προγραμματιστεί να του απαντάει, ή να αντιδρά. (Αυτή είναι και η βασική ιδέα πίσω από κάθε παιχνίδι στον υπολογιστή.) Βασικές Ιδέες για το γραφικό περιβάλλον (GUI) και την υλοποίηση αυτού. Για τη συγκεκριμένη εφαρμογή, δεν είναι απαραίτητο να εμφανίσουμε κίνηση στα γραφικά, ούτε και τρισδιάστατα. Για το κυρίως παιχνίδι αρκεί να χωρίσουμε την οθόνη σε κατάλληλα διαστήματα ώστε όλες οι απαραίτητες πληροφορίες να μπορούν να φτάσουν στον παίχτη με τρόπο κατανοητό και που δε θα τον κουράζει. Έτσι επιλέχθηκε να δημιουργηθούν ξεχωριστά πεδία για τα φύλλα που κατεβάζουν οι δύο ομάδες, για τις στοίβες με σκάρτα και μη ανοιγμένα φύλλα, και ακόμα για τα φύλλα που ανήκουν στον παίχτη. Επιπλέον ο παίχτης θα παίρνει πληροφορίες για το γύρο και τη φάση του γύρου στην οποία βρίσκεται, για τον αριθμό των φύλλων των αντιπάλων και του συμπαίχτη, για το πόσα μπιριμπάκια απομένουν, και ποιανού σειρά είναι να παίξει. Τέλος, στη σειρά του, θα πρέπει να μπορεί να δείξει ποιά φύλλα θέλει να πάρει, να κατεβάσει ή να πετάξει ανάλογα. Για να το κάνει αυτό επιλέχθηκε ένα φύλλο, ή συνδυασμός φύλλων στον οποίο ο παίχτης κάνει κλικ να γίνεται επιλεγμένος, και μετά με χρήση του Enter, να γίνεται η αντίστοιχη κίνηση. Πιο συγκεκριμένες πληροφορίες για το χειρισμό δίνονται στο κεφάλαιο «χειρισμός του παιχνιδιού» 22

23 3.4 Ανάλυση της εφαρμογής 1. Module Deck Σε αυτό το module υπάρχουν οι συναρτήσεις σχετικές με τη δημιουργία, τις μετακινήσεις, και την αποθήκευση φύλλων της τράπουλας Κλάση Cards A. Σε αυτή την κλάση ορίζεται το «φύλλο» (card), με χαρακτηριστικά: i. suit, rank: Χρώμα και αξία της κάρτας. ii. selected: Μια μεταβλητή που δείχνει αν η κάρτα έχει επιλεγεί, φαίνεται χρήσιμη για την απεικόνισή της στην οθόνη και σε μερικές ευρετικές συναρτήσεις. iii. minor_suit, minor_rank: Κρυμμένες τιμές για το χρώμα και την αξία μιας κάρτας που δε βρίσκεται στη θέση που ορίζουν τα suit και rank της. Αυτό συμβαίνει μόνο σε μπαλαντέρ ή άσσους, και μόνο υπό προϋποθέσεις. iv. throw, throw2, throw3, throw4, throw 5: Τιμές οι οποίες μεταβάλλονται από τις 5 ευρετικές συναρτήσεις κατά την αξιολόγηση του δέντρου. v. mod: Μια τιμή που δείχνει από ποιανού τα φύλλα προήλθε η κάρτα Ακόμα, σε μια λίστα παρέχονται οι ονομασίες των χρωμάτων και των αξιών των καρτών, για εύκολη απεικόνιση σε μορφή κειμένου. B. Συναρτήσεις. i. str (self): Με χρήση του πίνακα ονομάτων μετατρέπει οποιαδήποτε από τις κάρτες σε κείμενο. ii. img(self): Βρίσκει τη σωστή εικόνα από τα γραφικά για κάθε κάρτα. iii. trump(self): Αν μια κάρτα είναι μπαλαντέρ, επιστρέφει αληθές. iv. balader_rank_changer(self,rank,suit=-1): Μετατρέπει τα minor_rank και minor_suit ενός μπαλαντέρ σε αυτά που εισάγουμε 23

24 v. comp(self, other): Συγκρίνει την κάρτα self με την other, κι επιστρέφει -1, 0 ή 1 ανάλογα με το ποιά είναι μεγαλύτερη. (τα χρώματα έχουν την εξής σειρά: Μπαστούνια, Καρό, Σπαθιά, Κούπες) Αν ένα από τα δύο φύλλα ή και τα δύο είναι μπαλαντέρ ή άσσος, συγκρίνει τα minor_rank και minor_suit αυτών των φύλλων. vi. dist(self, other): Για κάρτες ίδιου χρώματος, βρίσκει τη μεταξύ τους απόσταση. Και εδώ, αν ένα ή και τα δύο φύλλα είναι μπαλαντέρ ή άσσοι, συγκρίνονται τα minor_ranks αυτών. Αν δεν είναι ιδίου χρώματος, επιστρέφει ψευδές (-1000), αλλιώς την απόσταση μεταξύ των φύλλων Κλάση Deck A. Σε αυτή την κλάση ορίζεται η «τράπουλα» ως συνδυασμός φύλλων. Γι αυτό κατά την εκκίνησή της (συνάρτηση init ) δεν αποδίδονται χαρακτηριστικά εκτός από μια λίστα με κάρτες: Αυτή γεμίζει με τα 108 φύλλα με τα οποία παίζεται η μπιρίμπα, και στη συνέχεια τα φύλλα ανακατεύονται. Β. Οι άλλες συναρτήσεις που περιέχει είναι: i. str (self): Η οποία τυπώνει σε κείμενο τα φύλλα που περιέχει η self ii. minor_fixer(self): Η οποία δίνει σε όλα τα φύλλα που θα έπρεπε να έχουν minor_suit και minor_ranks (Μπαλαντέρ, Άσσοι) μέσα στη self, τις αρχικές τιμές αυτών, ίδιες δηλαδή με τα suit, rank τους. iii. mod_changer(self,num=0): Η οποία μεταβάλλει το mod όλων των καρτών της self στην τιμή που καθορίζουμε εμείς (0 εκτός αν ορίσουμε άλλη) iv. throw_changer(self,choice=10,num=0): Η οποία αλλάζει τα throw 1,2,3,4 ή 5 όλου του deck (ανάλογα με την τιμή του choice) στην τιμή που έχει η num. Τα throw 1,2,3,4 παίρνουν τη νέα τιμή μόνο εφόσον η νέα τιμή είναι μικρότερη από την παλιά. Για το throw5, ανάλογα με την choice, θα παίρνει τη νέα τιμή μόνο αν: Για choice=4 : είναι και οι δύο θετικές ή 0, και η num είναι μεγαλύτερη, ή αν η num είναι αρνητική και η αρχική τιμή δεν είναι -10. Για choice=6: είναι και οι δύο θετικές ή 0, και η num είναι μεγαλύτερη, ή αν η αρχική τιμή είναι μικρότερη από -4 και η num είναι μικρότερή της. Αυτό γίνεται γιατί οι throw μεταβάλλονται βάσει κάποιων πινάκων. Για τα πρώτα 4 throw, οι πίνακες αυτοί είναι φθίνοντες και οι τιμές αρνητικές, αλλά στο throw 5 oι τιμές του πίνακα ξεκινούν από το 0, γίνονται θετικές, και στη συνέχεια αρνητικές. 24

25 Εμείς σε κάθε περίπτωση θέλουμε να αλλάξουμε το throw μόνο αν η νέα τιμή είναι στον πίνακα μετά την αρχική. Γι αυτό και για το throw5 ακολουθούνται αυτοί οι κανόνες. v. pop_card(self, i): Η οποία αφαιρεί την κάρτα στη θέση i από τη λίστα με τις κάρτες, επιστρέφοντάς την ταυτόχρονα. vi. add_card(self, card): Η οποία προσθέτει την κάρτα «card» στο τέλος της λίστας με τις κάρτες. vii. move_card(self, hand, i, num): Η οποία μετακινεί στo self, από το hand, num αριθμό καρτών, ξεκινώντας από την κάρτα στη θέση i του hand. Τα self, hand είναι decks. viii. len_deck (self): Η οποία επιστρέφει τον αριθμό των καρτών της self. ix. deselector(self,option=0): Η οποία ανάλογα με την τιμή του option μεταβάλλει το χαρακτηριστικό «selected» των καρτών της self σε 0 ή 1. x. validator(self): Η οποία βρίσκει την εγκυρότητα ενός συνδυασμού ως εξής: Κάθε φύλλο συγκρίνεται με το επόμενό του. Καταρχήν ελέγχονται αν τα φύλλα είναι του ίδιου χρώματος συγκρίνοντας τα suits. Αν είναι διαφορετικά δοκιμάζουμε τα minor_suits. Αν και πάλι είναι διαφορετικά, ο συνδυασμός θα είναι άκυρος. Στη συνέχεια ελέγχουμε αν τα φύλλα είναι στη σειρά συγκρίνοντας τα ranks τους. Αν αυτά έχουν απόσταση διαφορετική από -1, υποθέτουμε οτι κάποια από τις κάρτες είναι μπαλαντέρ, οπότε συγκρίνουμε τα minor_ranks. Αν και πάλι είναι διαφορετικά, ο συνδυασμός θα είναι άκυρος. Αν λοιπόν καμία από τις συνθήκες εγκυρότητας δεν παραβιάστηκε, ο συνδυασμός θα είναι έγκυρος. Η υλοποίηση έγινε με μια σειρά if και συνεχείς συγκρίσεις με τη βοήθεια της συνάρτησης dist της κλάσης Card. xi. sort_deck(self): Η οποία βάζει τις κάρτες της self σε σειρά ως εξής: Δημιουργεί μια νέα λίστα και μια νέα κάρτα, μεγαλύτερη από κάθε άλλη κάρτα που μπορεί να υπάρξει. Συγκρίνει λοιπόν τις κάρτες της self με αυτή και όταν βρίσκει κάποια μικρότερη, την κρατάει, ώσπου να βρεθεί η μικρότερη απ όλες. Αυτή μετακινείται στη νέα λίστα, και η όλη διαδικασία ακολουθείται ξανά και ξανά ώσπου να μετακινηθούν όλες οι κάρτες. Στη νέα λίστα οι κάρτες θα είναι με τη σειρά. Ορίζουμε λοιπόν αυτή τη λίστα ως τη λίστα με κάρτες της self. xii. same_suit_check(self): Η οποία επιστρέφει αληθές (1) αν όλα τα φύλλα της self είναι του ίδιου χρώματος xiii. balader_check(self): Η οποία επιστρέφει τον αριθμό των μπαλαντέρ που έχει η self. xiv. checker(self): Η οποία είναι η πρώτη από της συναρτήσεις αξιολόγησης εγκυρότητας, οι οποίες παίρνουν ένα συνδυασμό φύλλων «hand» και αναλαμβάνουν να αποφασίσουν αν 25

26 αυτά τα φύλλα μπορούν να αποτελέσουν έγκυρο συνδυασμό, και αν ναι, να τα βάλουν στην κατάλληλη σειρά για να φαίνεται αυτός ο συνδυασμός. Η checker συγκεκριμένα, καταρχήν ελέγχει αν ο συνδυασμός είναι ήδη έγκυρος (με χρήση της validator). Στη συνέχεια ελέγχει αν τα φύλλα, εξαιρουμένων των μπαλαντέρ είναι του ίδιου χρώματος, οπότε και θα είναι δυνατόν ο συνδυασμός να είναι έγκυρος. Στη συνέχεια ελέγχει αν υπάρχουν μπαλαντέρ στο συνδυασμό. Αν όχι, αρκεί να τρέξουμε την sort_deck δύο φορές, μια δίνοντας σε τυχόν άσσο την τιμή 1, και μια δίνοντας του την τιμή 13 (μεγαλύτερο από ρήγα) και αν ο συνδυασμός είναι έγκυρος, η συνάρτηση validator θα απαντήσει αληθές, αλλιώς ο συνδυασμός θα είναι άκυρος. Αν υπάρχουν μπαλαντέρ, η εγκυρότητα εξαρτάται και από τον αριθμό αυτών. Αν αυτοί είναι 3 η περισσότεροι, ο συνδυασμός είναι άκυρος, αλλά αν είναι 1 ή 2 ο συνδυασμός ίσως είναι έγκυρος. Σε περίπτωση που ο συνδυασμός είναι έγκυρος ή άκυρος, η συνάρτηση επιστρέφει -5 ή -10 αντίστοιχα, αλλιώς επιστρέφει τον αριθμό των μπαλαντέρ (1 ή 2) xv. aligner(self): Η συνάρτηση αυτή είναι η δεύτερη από τις συναρτήσεις αξιολόγησης εγκυρότητας. Καλεί την checker, και ανάλογα με την τιμή που πήρε, επιστρέφει εγκυρότητα ή ακυρότητα για το συνδυασμό που ελέγχουμε. Αν η τιμή ήταν 1 ή 2, που σημαίνει οτι υπάρχουν μπαλαντέρ στο συνδυασμό, έχουμε τα εξής: Για ένα μόνο μπαλαντέρ, του δίνω κάθε δυνατή τιμή, και στη συνέχεια τρέχω τις sort_deck και validator. Αν τα φύλλα γίνουν έγκυρος συνδυασμός, ή validator θα απαντήσει αληθές. Σε αντίθετη περίπτωση ο συνδυασμός είναι άκυρος. Για δύο μπαλαντέρ, ο ένας θα πρέπει να βρίσκεται στην αρχική του θέση. Βρίσκουμε τους δύο μπαλαντέρ, και κοιτάμε αν το χρώμα έστω ενός από αυτούς είναι ίδιο με αυτό των υπολοίπων φύλλων. Αν όχι, ο συνδυασμός θα είναι άκυρος. Αν ναι, τα minor_suit και rank του μπαλαντέρ αυτού γίνονται ίδια με τα suit και rank του, και ο μπαλαντέρ παίρνει τη φυσική του θέση. Στη συνέχεια με τον μπαλαντέρ που περίσσεψε, ακολουθούμε την ίδια διαδικασία που έχουμε για έναν μπαλαντέρ. Τελικά θα έχουμε καλύψει όλες τις πιθανότητες για εγκυρότητα του συνδυασμού, οπότε θα μπορούμε να τον επιστρέψουμε αν είναι έγκυρος, ή να επιστρέψουμε ψευδές αν δεν είναι. (Σε κάθε φορά που τρέχουν οι sort_deck και validator, σε τυχόν άσσους δίνουμε και την τιμή 1 αλλά και τη 13 (άρα τρέχουν δύο φορές οι συναρτήσεις αυτές) ώστε να καλύψουμε το ενδεχόμενο ο άσσος να βρίσκεται μετά το ρήγα) Υποκλάση Hand A. Αυτή είναι μια υποκλάση της Deck. Λειτουργούν συνεπώς όλες οι συναρτήσεις της Deck. Ορίζει μια κενή λίστα με φύλλα. Κατά την εκκίνησή της (συνάρτηση init ) παίρνει τη λίστα με τα 108 φύλλα της Deck, και την αδειάζει. Δεν κάνει άλλες αλλαγές. Β. Χαρακτηριστικά της Hand. Αντίθετα με την Deck, η Hand έχει χαρακτηριστικά πέραν της λίστας με κάρτες. Αυτά είναι: i.label: Μια ετικέτα για να δίνω όνομα στη Hand. ii.selected: Μια μεταβλητή για το αν η συγκεκριμένη Hand είναι επιλεγμένη. iii.mod: Μια μεταβλητή που δείχνει την προέλευση της Hand. iv.throw: Μια μεταβλητή για χρήση με τις συναρτήσεις αξιολόγησης της Hand. 26

27 v. tag: Μια μεταβλητή που χρησιμοποιείται για να δείχνει από ποιό σημείο ενός πίνακα με Hands, προήλθε η συγκεκριμένη Hand. Χρησιμοποιείται ιδιαιτέρως στη συνάρτηση Treefinder που βρίσκει το δέντρο του παιχνιδιού. Γ. Συναρτήσεις της Hand. i. value_hand(self,hand=0): Βρίσκει την αξία των φύλλων εντός της self. Για hand=0 τα φύλλα που εξετάζουμε δεν είναι έγκυρος συνδυασμός, οπότε κοιτάμε μόνο την αξία των επιμέρους φύλλων, ενώ αν hand=1 ο συνδυασμός θα πρέπει να είναι έγκυρος, οπότε βαθμολογείται ως τέτοιος. Χρησιμοποιείται στο τέλος του παιχνιδιού. ii. dirty_check(self): Βρίσκει αν τα φύλλα στη self αποτελούν «βρώμικο» συνδυασμό. Επιστέφει αληθές αν είναι. («βρώμικος» θεωρείται ο συνδυασμός στον οποίο έστω κι ένα φύλλο δεν είναι το ίδιο χρώμα με τα υπόλοιπα. μπαλαντέρ συνυπολογίζονται σε αυτά) iii. copy_deck(self): Αντιγράφει τη self σε μια νέα Hand, και επιστρέφει τη νέα. Χρήσιμη συνάρτηση όταν χρειάζεται να μεταβάλλουμε τα στοιχεία της self, αλλά ταυτόχρονα διατηρώντας τα αρχικά στοιχεία Κλάση Table_Cards A. Είναι μια λίστα η οποία περιέχει κλάσεις Hand. Κατά την εκκίνησή της ( init ) δημιουργείται αυτή η λίστα, καθώς και μια label σαν χαρακτηριστικά της κλάσης μας. Β. Συναρτήσεις της κλάσης Table_Cards: i. add_hand(self, hand): Προσθέτει μια λίστα καρτών (hand) στη self. ii. pop_hand(self,i): Επιστρέφει την i λίστα με κάρτες από αυτές που βρίσκονται στη self, αφαιρώντας την ταυτόχρονα από τη self. iii. move_hand(self, table, i, num): Μετακινεί num αριθμό από λίστες που αρχικά βρίσκονταν στην table, στο τέλος της self, ξεκινώντας από το i σημείο της table. iv. len_table(self): Επιστρέφει τον αριθμό των hands που περιέχει η self. v. copy_table(self): Αντιγράφει τη self σε ένα άλλο Table_Hands, και επιστρέφει το νέο. vii. sort_table_sec(self): Αρχειοθετεί τις Hand που βρίσκονται μέσα στη self, βάζοντας πρώτα τη μικρότερη σε μέγεθος, και τελευταία τη μεγαλύτερη. viii. sort_table(self): Αρχειοθετεί τις Hand που βρίσκονται μέσα στη self, βάζοντας πρώτα αυτή με το μικρότερο tag, και τελευταία αυτή με το μέγιστο. ix. value_table(self): Βρίσκει την αξία των φύλλων που περιέχει η self, θεωρώντας οτι τα φύλλα αυτά αποτελούν έγκυρους συνδυασμούς. Χρησιμοποιεί τη value_hand συνάρτηση. x. tag_changer(self,num=0): Μεταβάλλει τα tags όλων των Hands της self, στον αριθμό num. 27

28 xi. tag_corrector(self): Δίνει στα Hands που περιέχει η self νέες τιμές για τα tags, ξεκινώντας από tag=0 για το πρώτο Hand και τελειώνοντας με tag=n για το νιοστό. Στην πράξη «διορθώνει» τα tags σε αυτά που έπρεπε να είναι. xii. str (self): Τυπώνει σε μορφή κειμένου τα περιεχόμενα της self ως εξής. Οι κάρτες του κάθε Hand, με τη σειρά με την οποία τα Hands βρίσκονται μέσα στη self. 2. Module Graphics Εκκίνηση του Module: Κατά την εκκίνηση, γίνονται οι εξής διεργασίες: i. Καθορισμός των adapt_x,adapt_y. Αυτές είναι δύο μεταβλητές με τις οποίες πολλαπλασιάζουμε στη συνέχεια οποιεσδήποτε συντεταγμένες γραφικών ορίσουμε. Έτσι, ενώ έχει υπολογιστεί ανάλυση 1024x768 για να τρέχει το πρόγραμμα, με μεταβολή των adapt_x,adapt_y μπορούμε να μετατρέψουμε το παράθυρο να ταιριάζει σε οποιαδήποτε ανάλυση. Πρέπει να αναφερθεί όμως οτι με αναλύσεις στις οποίες διατηρείται ο λόγος 1024/768 = 4/3, η εφαρμογή θα λειτουργεί καλύτερα, αφού δε θα παραμορφώνονται τα γραφικά. ii. Καθορισμός της οθόνης (screen) στην οποία θα τρέχει το παιχνίδι. Γι αυτήν επιλέχθηκε η αρχική ανάλυση 1024x768. iii. Καθορισμός των βασικών γραμματοσειρών που θα χρειαστούμε για να εμφανίσουμε κείμενο στη συνέχεια. iv. Φόρτωση στη μνήμη των αρχικών εικόνων που θα χρειαστούμε, καθώς και των εικόνων όλων των φύλλων της τράπουλας, με τα οποία θα αναπαρασταθούν τα φύλλα Κλάση Gfx: Η κλάση στην οποία περιέχονται όλες οι απαραίτητες συναρτήσεις για τα γραφικά. Αυτές καλούνται από την κύρια συνάρτηση του παιχνιδιού όταν χρειαστεί. Δεν έχει δικά της χαρακτηριστικά, παρά μόνο συναρτήσεις. Α. Συναρτήσεις με τις οποίες εμφανίζονται γραφικά στην οθόνη i. start_menu(self): Εμφανίζει στην οθόνη την «αρχική οθόνη» ii. ask_name(self,name): Εμφανίζει στην οθόνη το μενού εισαγωγής ονόματος του παίχτη. iii. ui(self): Εμφανίζει στην οθόνη τις βασικές γραμμές και χρώματα που θα χρειαστούμε για τα βασικά γραφικά του παιχνιδιού. Πάνω εδώ θα επικολληθούν στη συνέχεια γραφικά όπως τα φύλλα των παιχτών και οι περαιτέρω πληροφορίες που χρειάζεται ο παίχτης. Αποτελεί ουσιαστικά το βασικό γραφικό περιβάλλον. iv. phase(self,phase,name,turn): Εμφανίζει στην οθόνη πληροφορίες για τον γύρο στον οποίο βρισκόμαστε, τη φάση αυτού, και των τυχόν κινήσεων που χρειάζεται να κάνει ο παίχτης για να προχωρήσει το παιχνίδι στην επόμενη φάση. 28

29 v. pl_cards(self,hand,pl_name): Εμφανίζει στην οθόνη το όνομα του παίχτη (pl_name) και τα φύλλα του(hand). Αν κάποια κάρτα είναι επιλεγμένη, την εμφανίζει λίγο πιο πάνω από τις μη επιλεγμένες, για να ξεχωρίζει. vi. cop_cards(self,hand,pl_name): Εμφανίζει στην οθόνη το όνομα του συμπαίχτη, τα φύλλα του (τα οποία τα δείχνει κλειστά αφού δεν έχουμε δικαίωμα να τα δούμε), καθώς και τον αριθμό τους. vii. o_players_cards(self,hand,pl_name1,hand2,pl_name2): Ομοίως εμφανίζει στην οθόνη τα ονόματα των αντιπάλων, τα φύλλα τους γυρισμένα κλειστά καθώς και τον αριθμό αυτών. viii. deck_cards(self,deck,open_deck,brb): Εμφανίζει στην οθόνη τη στοίβα με τα κλειστά φύλλα, τα σκάρτα φύλλα, καθώς και τον αριθμό των μπιριμπακίων που υπάρχουν ακόμα στο παιχνίδι. Αν είτε τα κλειστά είτε τα σκάρτα φύλλα έχουν επιλεγεί, εμφανίζει ένα πορτοκαλί περίγραμμα γύρω από την επιλεγμένη στοίβα. ix. table_cards(self,table1,table2): Εμφανίζει στην οθόνη τους συνδυασμούς καρτών που έχουν κατεβάσει οι δύο ομάδες (table1,table2), στην κατάλληλη θέση τους μέσα στο γραφικό περιβάλλον. Αν οι συνδυασμοί αυτοί ξεπερνούν τους 11 για μία ομάδα, τους μεταφέρει στη δεύτερη στήλη για συνδυασμούς. Αν κάποιος συνδυασμός έχει επιλεγεί, γύρω από αυτόν εμφανίζει ένα πορτοκαλί περίγραμμα. x. no_game_loaded(self): Εμφανίζει στην οθόνη μήνυμα σφάλματος αν προσπαθούμε να συνεχίσουμε κάποιο παιχνίδι, χωρίς να έχουμε φορτωμένο στη μνήμη κάποιο. xi. wrong_move(self): Εμφανίζει στην οθόνη μήνυμα σφάλματος αν προσπαθούμε να «κατεβάσουμε» έναν μη έγκυρο συνδυασμό. x. processing(self): Εμφανίζει στην οθόνη μήνυμα για να ενημερώσει τον παίχτη οτι η τεχνητή νοημοσύνη επεξεργάζεται τα δεδομένα πριν αποφασίσει πως θα παίξει. Ουσιαστικά υπάρχει για να δείχνει στον παίχτη οτι η καθυστέρηση είναι φυσιολογική. xi. endgame(self,playerteam,oppteam): Στο τέλος του παιχνιδιού, η συνάρτηση αυτή αναλαμβάνει να εμφανίσει τα τελικά σκορ των δύο ομάδων (playerteam,oppteam) Β. Συναρτήσεις οι οποίες χρειάζονται για να λειτουργήσει η επικοινωνία με τον παίχτη. Αυτές περιλαμβάνουν συναρτήσεις που δημιουργούν κρυφά παραλληλόγραμμα στα οποία όταν ανιχνευτεί κλικ του ποντικιού θα συμβαίνει κάποια ενέργεια, και συναρτήσεις οι οποίες θα εκτελούν τις αναγκαίες ενέργειες όταν χρειαστεί. i. selection_player(self,hand): Επιστρέφει ένα παραλληλόγραμμο ίσο με το περίγραμμα των φύλλων του παίχτη (hand). ii. selection_deck(self,deck): Επιστρέφει ένα παραλληλόγραμμο ίσο με το περίγραμμα της στοίβας με τα κλειστά φύλλα. 29

30 iii. selection_o_deck(self,odeck): Επιστρέφει ένα παραλληλόγραμμο ίσο με το περίγραμμα της στοίβας με τα σκάρτα φύλλα. iv. selection_down_cards(self,down_cards): Επιστρέφει παραλληλόγραμμα ίσα με τα περιγράμματα των συνδυασμών φύλλων που έχει κατεβάσει η ομάδα του παίχτη. v. selected_card_combo(self,length,hand): Ανάλογα με τη θέση του σημείου που έγινε το κλικ του ποντικιού (length), η κάρτα που βρίσκεται σε αυτό το σημείο γίνεται επιλεγμένη ή όχι, ανάλογα με το αν ήταν ήδη επιλεγμένη ή όχι. Επιτρέπει πάνω από μία κάρτα να είναι επιλεγμένη ταυτόχρονα. vi. selected_card(self,length,hand): Ανάλογα με τη θέση του σημείου που έγινε το κλικ του ποντικιού (length), η κάρτα που βρίσκεται σε αυτό το σημείο γίνεται επιλεγμένη ή όχι, ανάλογα με το αν ήταν ήδη επιλεγμένη ή όχι. Επιτρέπει μόνο μία κάρτα να είναι επιλεγμένη κάθε φορά. vii. selected_hand(self,current,other): Η συνάρτηση κάνει το «current» χέρι επιλεγμένο, και το «other» hand μη επιλεγμένο αντίστοιχα. viii. selected_down_cards(self,num_of_rect,table_cards): Κάνει επιλεγμένο το συνδυασμό στον οποίο έγινε κλικ (από τους κατεβασμένους της ομάδας μας). Όλοι οι υπόλοιποι συνδυασμοί γίνονται μη επιλεγμένοι. ix. table_check(self,x,y,rects): Η συνάρτηση βρίσκει αν το σημείο x,y στο οποίο έγινε κλικ, βρίσκεται εντός κάποιου από τα παραλληλόγραμμα που περιέχει η λίστα rects, και αν ναι, επιστρέφει σε ποιό. Χρησιμεύει για να μπορούμε να αντιδράσουμε κατάλληλα σε κάθε κλικ του ποντικιού που κάνει ο παίχτης. 3. Module AI Σε αυτό το module, υπάρχει μόνο η κλάση player, η οποία αντιπροσωπεύει έναν παίχτη, είτε ai είτε ανθρώπινο. Αυτής της κλάσης τα χαρακτηριστικά περιλαμβάνουν όλες τις πληροφορίες που ξέρει ο παίχτης, ενώ οι συναρτήσεις δίνουν τη δυνατότητα σε έναν aiπαίχτη να αξιολογεί και να αποφασίζει τις κινήσεις του Κλάση Player Α. Χαρακτηριστικά: i. name: Το όνομα του παίχτη. ii. status: Το status ξεχωρίζει τους παίχτες μεταξύ τους. 0 έχει ο ενεργός παίχτης, 1 ο πρώτος αντίπαλος, 2 ο συμπαίχτης και 3 ο δεύτερος αντίπαλος. 30

31 iii. ai: Αν ο παίχτης είναι ai αυτό θα ισούται με 1, αλλιώς με 0. iv. hand: Είναι τα φύλλα που έχει ο παίχτης στο χέρι του, σε μια κλάση Hand. v. combinations: Είναι οι κατεβασμένοι συνδυασμοί της ομάδας του παίχτη. vi. opp_combinations: Είναι οι κατεβασμένοι συνδυασμοί της αντίπαλης ομάδας. vii. downcards: Είναι τα φύλλα που βρίσκονται στα σκάρτα. viii. count_cards: Είναι ο αριθμός των φύλλων που έχουν οι αντίπαλοι και ο συμπαίχτης, σε μια λίστα με τρείς αριθμούς. Οι πρώτοι δύο για τους αντιπάλους. ix. mem_opp1: Είναι η μνήμη της ai για τα φύλλα που ξέρουμε οτι έχει ο πρώτος αντίπαλος. x. mem_opp2: Είναι η μνήμη της ai για τα φύλλα που ξέρουμε οτι έχει ο δεύτερος αντίπαλος. xi. mem_copl: Είναι η μνήμη της ai για τα φύλλα που ξέρουμε οτι έχει ο συμπαίχτης. xii. brb: Δείχνει τι έχει γίνει με τα μπιριμπάκια. Είναι -1 αν δεν έχουν ανοιχτεί, 0 αν άνοιξε μόνο η ομάδα του παίχτη, 1 αν άνοιξε η ομάδα των αντιπάλων, και 2 αν ανοίχτηκαν και τα δύο μπιριμπάκια. Β. Συναρτήσεις i. not_same_card_checker(self,card,hand): Αν η κάρτα «card» υπάρχει μέσα στο συνδυασμό «hand», επιστρέφει τη θέση της, αλλιώς επιστρέφει ii. combination_finder_from_hand(self, hand): Συνάρτηση εύρεσης συνδυασμών από τα φύλλα που έχουμε στο χέρι. Εφόσον έχουμε τη δυνατότητα να ελέγξουμε αν ένας συνδυασμός φύλλων είναι έγκυρος (module deck, κλάση Deck, συνάρτηση xv) αρκεί να δοκιμάσουμε κάθε δυνατό συνδυασμό μεταξύ των φύλλων μας για να βρούμε ποιοί είναι οι έγκυροι. Αυτό πρακτικά θα απαιτούσε περισσότερη επεξεργαστική ισχύ από όση διαθέτουμε. Οι δυνατοί συνδυασμοί για 11 διαφορετικά φύλλα σε 11 δυνατές διαφορετικές θέσεις είναι της τάξης του 10^7. Αντί γι αυτό λοιπόν, χρησιμοποιούμε μια μέθοδο κοντινή στον ανθρώπινο τρόπο σκέψης για να βρούμε τη λύση: Καταρχήν ξέρουμε οτι χρειάζονται τρείς κάρτες στη σειρά κατ ελάχιστο για να είναι ένας συνδυασμός έγκυρος. Από αυτές, μόνο η μία μπορεί να είναι μπαλαντέρ. Έτσι λοιπόν, αν βρω όλες τις δυάδες από κάρτες στη σειρά (έγκυρη δυάδα είναι και το: Ρήγας + Άσσος), και μετά δοκιμάσω μια μία τις υπόλοιπες κάρτες που έχω στο χέρι μέχρι να βρω πότε ο συνδυασμός είναι έγκυρος, και στη συνέχεια τον αποθηκεύσω, θα έχω βρει όλους τους συνδυασμούς. Στην πράξη, αυτή η διαδικασία γίνεται χωρίς να χρησιμοποιηθούν τυχόν μπαλαντέρ αρχικά, στη συνέχεια προσπαθούμε να κολλήσουμε μπαλαντέρ (αν υπάρχουν) σε κάθε έναν από τους συνδυασμούς που βρέθηκαν, με 31

32 προτίμηση στο «2» ίδιου χρώματος με τον υπόλοιπο συνδυασμό έναντι των άλλων μπαλαντέρ, και μετά επαναλαμβάνουμε την ίδια διαδικασία ξανά, προσθέτουμε όσα φύλλα κολλάνε σε κάθε συνδυασμό ξανά, ξαναπροσπαθούμε να κολλήσουμε μπαλαντέρ (επιτρέπεται μόνο αν ο πρώτος μπαλαντέρ βρίσκεται στη φυσική του θέση), και στη συνέχεια ξαναπροσπαθώ να κολλήσω επιπλέον φύλλα. Η μέθοδος σταματάει για κάθε αρχική δυάδα αν σε κάποιο βήμα δεν έχω ή δεν μπορώ να κολλήσω μπαλαντέρ, ή αν φτάσει στο τέλος, και συνεχίζει για την επόμενη δυάδα. Σε κάθε περίπτωση, κάθε έγκυρος συνδυασμός αποθηκεύεται σε μια λίστα, και στο τέλος η συνάρτηση επιστρέφει αυτήν ακριβώς τη λίστα. iii. combination_finder_from_table(self, hand, table=0 ): Συνάρτηση εύρεσης συνδυασμών από τα φύλλα που είναι κατεβασμένα στο τραπέζι. Η μέθοδος εδώ δε θα είναι όμοια με την προηγούμενη, αφού τώρα κολλάμε σε έτοιμους συνδυασμούς, αλλά θα είναι παρόμοια. Εφαρμόζουμε βασικά την προηγούμενη μέθοδο, αλλά εκεί όπου πριν είχαμε αρχικά δυάδες φύλλων, εδώ έχουμε ολόκληρους συνδυασμούς. Για κάθε έναν υπάρχοντα συνδυασμό θα βρούμε μια λίστα νέων εκδοχών αυτού με προσθήκη φύλλων από το χέρι μας, και όλες αυτές οι λίστες αποθηκεύονται σε έναν πίνακα τον οποίο η συνάρτηση μας επιστρέφει όταν τελειώσει. Το χαρακτηριστικό tag των συνδυασμών γίνεται ίδιο με αυτό του αρχικού συνδυασμού από τον οποίο προήλθαν (και στους αρχικούς συνδυασμούς το tag απεικονίζει τη θέση κάθε ενός μέσα στο Table) Τα φύλλα που προστέθηκαν στη συνέχεια από τα φύλλα του παίχτη, έχουν mod=-1. iv. matrix_to_table(self, hand, combinations): Η συνάρτηση αυτή καλεί τις combination_finder_from_hand και combination_finder_from_table, μετατρέπει τα αποτελέσματά τους στην ίδια μορφή (σειρές από συνδυασμούς σε κλάσεις Hand), και αποθηκεύει όλους τους συνδυασμούς σε μια λίστα, την οποία και επιστρέφει. Ανάλογα με το αν προήλθε από την combination_finder_from_hand ή combination_finder_from_table, το χαρακτηριστικό mod της instance του συνδυασμού θα είναι -1 ή 1 αντίστοιχα. Επίσης, τα φύλλα μέσα στους συνδυασμούς έχουν mod=-1 αν ήταν φύλλα που είχε στο χέρι του ο παίχτης. Αυτό είναι απαραίτητο για να μπορέσουμε να βρούμε ποια φύλλα χρησιμοποιούνται κάθε φορά, και ποιοί συνδυασμοί μεταβάλλονται. Η συνάρτηση αυτή λειτουργεί ως γέφυρα μεταξύ των δύο προηγουμένων και των επομένων, μετατρέποντας τα αποτελέσματα των προηγουμένων σε μια βολική μορφή για επεξεργασία. v. chooser_from_matrix(self, hand, combinations): Η συνάρτηση αυτή περιορίζει τα αποτελέσματα που βρέθηκαν σε 6. Έτσι το δέντρο που θα βρεθεί στη συνέχεια θα έχει ένα επεξεργάσιμο μέγεθος. Επιλέγει 3 συναρτήσεις από την combination_finder_from_hand και 3 από την combination_finder_from_table. Επιλέγει πάντα τις 3 μεγαλύτερες σε κάθε περίπτωση, αλλά από αυτές οι 2 θα είναι χωρίς μπαλαντέρ, και η μια με μπαλαντέρ. Έτσι, παρόλο που 32

33 περιορίζει την αναζήτηση, επιλέγει τους 6 πιο πολλά υποσχόμενους συνδυασμούς. Αυτούς δηλαδή που κατά πάσα πιθανότητα θα οδηγήσουν στη βέλτιστη λύση. Με αυτόν τον τρόπο μειώνουμε την απαραίτητη επεξεργαστική ισχύ που χρειαζόμαστε, αλλά χωρίς να υποβαθμιστεί σημαντικά η αξία των αποτελεσμάτων που θα βρούμε. vi. tree_finder(self,hand): Η συνάρτηση αυτή βρίσκει το δέντρο του παιχνιδιού. Παίρνει τα αποτελέσματα της chooser_from_matrix, και από αυτά επιλέγει το πρώτο. Αφαιρώντας τις κάρτες που χρησιμοποιήθηκαν για την υλοποίηση του πρώτου συνδυασμού από τα διαθέσιμα φύλλα του παίχτη, ξανακαλεί την chooser_from_matrix. Από τα αποτελέσματα αυτής επιλέγει ξανά το πρώτο μέχρι να φτάσει σε αδιέξοδο. Τότε επιστρέφει στο προηγούμενο βήμα, και επιλέγει το δεύτερο από τα αποτελέσματα που είχε. Συνεχίζει τη διαδικασία μέχρι να γυρίσει στο αρχικό βήμα και να έχει εξερευνήσει όλους τους διαθέσιμους συνδυασμούς. Για κάθε συνδυασμό που εξερευνά, αποθηκεύει τα αποτελέσματα σε μια λίστα, την οποία και επιστρέφει όταν τελειώσει την αναζήτηση. Είναι μια εφαρμογή της αναζήτησης-κατά-βάθος, σε ένα δέντρο περιορισμένου πλάτους. Η υλοποίηση γίνεται ως εξής: Υπάρχουν τρία κομμάτια στο πρόγραμμα τα οποία τρέχουν ξεχωριστά: Ένα για όταν φτάνουμε σε κλάδο που δεν έχουμε εξερευνήσει, οπότε και επιλέγουμε να συνεχίσουμε με το πρώτο διαθέσιμο αποτέλεσμα. Αν φτάσει σε αδιέξοδο καλεί το τρίτο κομμάτι. Ένα για κλάδο που έχουμε εξερευνήσει ήδη, το οποίο κοιτάει αν υπάρχουν άλλες ανεξερεύνητες επιλογές, και αν ναι εξερευνά την επόμενη, αν όχι οδηγεί στο τρίτο κομμάτι. Το τρίτο κομμάτι αναλαμβάνει να επιστρέψει στο προηγούμενο κλαδί του δέντρου σε περίπτωση που φτάσαμε σε αδιέξοδο. Καλεί στη μνήμη τα προηγούμενα στοιχεία, και αποθηκεύει τη διαδρομή ως εδώ. Αν φτάσει να μην μπορεί να πισωγυρίσει, αυτό σημαίνει οτι το δέντρο έχει αναλυθεί ολόκληρο, οπότε επιστρέφει τα αποθηκευμένα δεδομένα και σταματάει τη συνάρτηση. Τα δεδομένα που αποθηκεύονται σε κάθε κίνηση είναι τα εξής: Κάρτες που χρειαστήκαν για την κίνηση από αυτές που έχουμε στο χέρι, κάρτες που είχαμε στο χέρι πριν την κίνηση, κάρτες στο χέρι μετά την κίνηση, κατεβασμένοι συνδυασμοί πριν την κίνηση, κατεβασμένοι συνδυασμοί μετά την κίνηση, η προηγούμενη λίστα με δυνατούς συνδυασμούς, η νέα λίστα με δυνατούς συνδυασμούς, καθώς και το σημείο στο δέντρο που βρισκόμαστε. Πολλές από αυτές τις πληροφορίες δεν είναι απαραίτητο να αποθηκευτούν, γιατί συχνά η μια προέρχεται από την άλλη, αλλά μας διευκολύνει να έχουμε τα αποτελέσματα στη μνήμη και να εξοικονομούμε επεξεργαστική ισχύ από το να ξαναϋπολογίζουμε πράγματα που έχουν ήδη βρεθεί. vii. cards_evaluator(self): Είναι η πρώτη από τις συναρτήσεις evaluator, οι οποίες αξιολογούν τα δεδομένα μας. Έχει σκοπό να δώσει τιμές στις μεταβλητές throw των φύλλων που έχουμε στο χέρι, ώστε να αποφασίσουμε κοιτώντας αυτές για τη βέλτιστη κίνηση. Η συγκεκριμένη αξιολογεί τα φύλλα μας στη δεύτερη φάση του γύρου, όπου και ο παίχτης κατεβάζει συνδυασμούς. Καταρχήν, μηδενίζει τα throw των καρτών, και δίνει mod=-1 στα φύλλα από το χέρι μας, mod=1 στα φύλλα του πρώτου αντιπάλου, mod=2 στα φύλλα του δεύτερου, mod=3 στα φύλλα του συμπαίχτη, και mod=4 στα σκάρτα φύλλα. 33

34 Όταν λέμε φύλλα των αντιπάλων και του συμπαίχτη, επειδή δεν τα ξέρουμε στην πράξη, αυτό που εννοούμε είναι τα φύλλα τους που θυμόμαστε οτι πήραν από κάτω στους προηγούμενους γύρους. Στη συνέχεια η συνάρτηση χωρίζεται σε τρείς υποσυναρτήσεις: Μία που αξιολογεί τα φύλλα των αντιπάλων, μία για τα φύλλα του συμπαίχτη, και μία για τα σκάρτα. Θεωρητικά, για τους αντιπάλους θα πρέπει να βρούμε ποιά φύλλα τους μας κάνουν, και να προσπαθήσουμε να περιμένουμε μήπως μας τα ρίξουν. Αυτό σημαίνει να μη χρησιμοποιήσουμε τα φύλλα μας που ταιριάζουν άμεσα, ελπίζοντας οτι ο αντίπαλος θα πετάξει το φύλλο που μας κάνει. Προφανώς ένα φύλλο που μας κάνει, αλλά κάνει και σε συνδυασμό του αντιπάλου ή που είναι μπαλαντέρ, δε θα μας το πετάξει ποτέ, άρα δεν το υπολογίζουμε. Παρόμοια λογική υπάρχει και για τα φύλλα που είναι στα σκάρτα: Αν μας κάνουν, θα προτιμούσαμε να περιμένουμε ένα γύρο μήπως τα αποκτήσουμε αν δεν τα πάρει κάποιος άλλος. Έτσι είναι σοφό να μην κατεβάσουμε τυχόν συνδυασμούς στους οποίους τα σκάρτα φύλλα κολλάνε, γιατί τότε θα τα πάρουν οι αντίπαλοι όταν έρθει η σειρά τους για να μας εμποδίσουν. Για το συμπαίχτη, πρέπει να δούμε δύο πράγματα: Αν έχει φύλλα που κολλάνε σε δικούς μας συνδυασμούς, οπότε και πρέπει να κατεβάσουμε αυτούς τους συνδυασμούς για να κολλήσει τα φύλλα ο συμπαίχτης στη σειρά του, και αν έχουμε εμείς φύλλα που κολλάνε σε δικούς του συνδυασμούς, τα οποία δεν πρέπει να κατεβάσουμε γιατί τα φυλάμε να τα κολλήσουμε στα δικά του. Η αξιολόγηση γίνεται ως εξής: Υπάρχει ένας πίνακας με τιμές για ανάλογα με την υποσυνάρτηση, οι οποίες αντιστοιχούν σε μεγέθη συνδυασμού. Δοκιμάζουμε λοιπόν ένα ένα τα φύλλα του αντιπάλου/συμπαίχτη/σκάρτα να τα προσθέσουμε στα δικά μας (μπαλαντέρ δεν τους υπολογίζουμε αφού δε θα πέσουν ποτέ στα σκάρτα), και βλέπουμε αν σχηματίζονται συνδυασμοί με τα νέα φύλλα. Αν ναι, όλα τα φύλλα μας που υπάρχουν σε αυτό το νέο συνδυασμό παίρνουν στο αντίστοιχο από τα 5 throw τους την αντίστοιχη τιμή από τον πίνακα. Για όλους τους πίνακες πέραν του συμπαίχτη, μια αρνητικότερη τιμή πάντα θα αντικαθιστά την προηγούμενη αφού οι αντίστοιχοι πίνακες είναι φθίνοντες, και φυσικά ένας μεγαλύτερος συνδυασμός έχει σημαντικότερη επιρροή από έναν μικρότερο. Για το συμπαίχτη, έχουμε δύο πίνακες, έναν για όταν ελέγχουμε ποιά φύλλα μας του κάνουν, κι έναν για όταν ελέγχουμε ποιά φύλλα του μας κάνουν. Από τους πίνακες αυτούς, ό ένας είναι φθίνων, ενώ ο άλλος ξεκινάει αύξων, και στην πορεία φθίνει. Γενικά θετικές τιμές στους πίνακες σημαίνουν οτι τα φύλλα με αυτές πρέπει να χρησιμοποιηθούν, ενώ αρνητικές οτι πρέπει να τα κρατήσουμε στο χέρι. viii. move_evaluator(self,hand): Η συνάρτηση αυτή, με χρήση της tree_finder και της cards_evaluator, αποφασίζει ποιά κίνηση θα παίξει η τεχνητή νοημοσύνη κατά τη δεύτερη φάση του παιχνιδιού. Πρώτα βρίσκει το δέντρο του παιχνιδιού με την tree_finder και στη συνέχεια αξιολογεί την επίδραση των φύλλων που ξέρουμε οτι έχουν οι αντίπαλοι και ο συμπαίχτης, καθώς και των σκάρτων με χρήση της cards_evaluator. Τα throw που είναι πάντα φθίνοντα, ενώνονται σε μια τιμή, τη μικρότερη από τα 4 throw. Στη συνέχεια βρίσκουμε την επίδραση που έχουν παράγοντες όπως η αξία κάθε νέου συνδυασμού, το αν ο συνδυασμός συνδυασμών οδηγεί σε κλείσιμο, το αν οι νέοι συνδυασμοί είναι βρώμικοι και είμαστε ακόμα στην αρχή του παιχνιδιού, το αν οι 34

35 αντίπαλοι έχουν πάρει μπιριμπάκι κι έχουν λίγα φύλλα (άρα ετοιμάζονται να κλείσουν), αν το ίδιο συμβαίνει και στη δική μας ομάδα, ή αν τα φύλλα στην τράπουλα τελειώνουν. Όλοι αυτοί οι παράγοντες μεταβάλλουν μια μεταβλητή, η οποία μεταβάλλεται περεταίρω από το αρνητικότερο και το θετικότερο throw (αν το δεύτερο είναι μεγαλύτερο από 0) των φύλλων κάθε νέου συνδυασμού, και αποθηκεύεται σε κάθε συνδυασμό συνδυασμών. Έτσι στο τέλος μπορούμε να βρούμε σε ποιούς συνδυασμούς αυτή η μεταβλητή έχει μεγαλύτερη αξία, και να επιλέξουμε τη βέλτιστη κίνηση. Στην πράξη, δεν επιλέγεται πάντα ο συνδυασμός με τη μεγαλύτερη αξία. Βρίσκουμε τους 5 καλύτερους, και όσοι από αυτούς έχουν θετική αξία, και είναι το πολύ ή 30% ή 10 μονάδες μικρότεροι από το συνδυασμό με τη μέγιστη αξία, έχουν και μια πιθανότητα να επιλεγούν ως βέλτιστοι. Η επιλογή γίνεται ως εξής: Συγκρίνουμε τους δύο χειρότερους, και προσθέτουμε στην τιμή και των δύο έναν τυχαίο αριθμό από το 0 έως τη διαφορά τους + το 40% της μικρότερης αξίας, και όποιου η τελική τιμή είναι μεγαλύτερη, αυτός και επιλέγεται για να συγκριθεί στο επόμενο στάδιο με τον αμέσως καλύτερο συνδυασμό. Με αυτό τον τρόπο δίνονται και στους 5 συνδυασμούς πιθανότητες να επιλεγούν, αλλά οι καλύτεροι ευνοούνται σημαντικά, και αν έχουν αναγνωρίσιμη διαφορά στις μεταξύ τους αξίες, οι μικρότεροι είναι απίθανο να επιλεγούν. ix. cards_get_throw_evaluator(self, choice): Η συνάρτηση αυτή βρίσκει τη βέλτιστη κίνηση στις φάσεις 1 και 3, ανάλογα με τον αριθμό της choice. Δηλαδή αποφασίζει ποιό φύλλο να πετάξουμε στην 3 η φάση, και αν θα πάρουμε τα σκάρτα, ή 1 από τα κλειστά φύλλα, στην 1 η φάση. Ξεκινάει δίνοντας τα αρχικά mod και throw στα φύλλα μας και στα φύλλα που ξέρουμε οτι έχουν συμπαίχτης, αντίπαλοι και στα σκάρτα. Στη συνέχεια χωρίζεται σε τρείς υποσυναρτήσεις, οι οποίες λειτουργούν με τον ίδιο τρόπο με αυτές της συνάρτησης cards_evaluator. Αυτή τη φορά, ενώ οι δύο πρώτες συναρτήσεις είναι παρόμοιες και αξιολογούν την επίδραση των φύλλων αντιπάλων και συμπαίχτη, η τρίτη αξιολογεί την επίδρασή των δικών μας φύλλων στα σκάρτα. Για την 1 η φάση, προσθέτουμε ένα ένα τα σκάρτα φύλλα στα φύλλα των αντιπάλων/συμπαίχτη/και τα δικά μας, με σκοπό να βρούμε κατά πόσον αξίζει να τα πάρουμε. Αυτό εξαρτάται από το αν μας κάνουν σε συνδυασμούς της ομάδας μας, και κατά πόσον εμποδίζουμε τους αντιπάλους να κάνουν συνδυασμούς παίρνοντάς τα. Οι πίνακες δεν είναι ίδιοι με αυτούς της προηγούμενης συνάρτησης. Έτσι μεταβάλλονται τα throw, και στη συνέχεια ενώνονται σε ένα μόνο. Λαμβάνουμε επίσης υπόψη την πιθανότητα να υπάρχει μπαλαντέρ στα σκάρτα (οπότε και τα παίρνουμε σχεδόν πάντα), ή παράγοντες όπως το παιχνίδι να φτάνει στο τέλος του (και άρα να μη συμφέρει να παίρνουμε πολλά φύλλα), ή το να έχει ο επόμενος από εμάς αντίπαλος μόνο φύλλα που δε θέλει να πετάξει, οπότε συμφέρει κάτω να μην αφήσουμε πάνω από ένα φύλλο, ώστε να αναγκαστεί να πάρει κλειστό φύλλο, και να πετάξει κάτι που μας κάνει, αν και αυτό το κλειστό φύλλο δεν μπορούσε να το πετάξει. (πχ. Αν είχε ένα φύλλο που μας χρειαζόταν, και ένα μπαλαντέρ, και τραβούσε δεύτερο φύλλο που μας χρειαζόταν, θα έπρεπε να πετάξει κάποιο από αυτά. Αν όμως μπορούσε να πάρει από κάτω μερικά άχρηστα φύλλα, στους επόμενους γύρους θα μπορούσε να πετάει αυτά) Τελικά, αν η τιμή στην οποία καταλήξουμε είναι θετική, παίρνουμε κλειστό φύλλο, αν είναι αρνητική παίρνουμε τα σκάρτα, και αν είναι μεταξύ 0 και -5, ανάλογα με τη φάση του παιχνιδιού και έναν τυχαίο αριθμό, παίρνουμε απόφαση για το τι θα κάνουμε. 35

36 Για τη 2 η φάση, η επιλογή είναι ευκολότερη επειδή δεν επηρεαζόμαστε από παράγοντες πέραν των συναρτήσεων αξιολόγησης: Τρέχουν λοιπόν αυτές οι συναρτήσεις, και βρίσκονται οι δύο κάρτες με το θετικότερο throw. Μεταξύ καρτών με ίδιο throw, διαλέγουμε 50/50 ποιά θα πεταχτεί. Μεταξύ καρτών με διαφορές 11+ στα throw, πετάμε πάντα αυτή με το μεγαλύτερο. Σε αντίθετη περίπτωση, προστίθεται και στις δύο ένας τυχαίος αριθμός από 0 έως τη διαφορά τους συν το μισό της διαφοράς τους, και τελικά όποια από τις κάρτες έχει μεγαλύτερη τιμή, πετιέται. 4. Module Game Είναι το κύριο module του παιχνιδιού. Καλεί όλα τα άλλα και χρησιμοποιεί τις συναρτήσεις και τα χαρακτηριστικά τους για να τρέξει το παιχνίδι. Η βασική ιδέα είναι οτι πρώτα καλεί τις συναρτήσεις γραφικών για να ξεκινήσει το γραφικό περιβάλλον, και στη συνέχεια περιμένει μέσω του Pygame για τις εντολές του χρήστη. Κατά την εκκίνηση ενός νέου παιχνιδιού, μοιράζονται φύλλα στους 4 παίχτες, και δεσμεύονται ακόμα φύλλα για τα μπιριμπάκια. Τα χαρακτηριστικά της κλάσης περιλαμβάνουν όλα τα στοιχεία του παιχνιδιού. Δημιουργεί 5 παίχτες, τους τέσσερεις αντιπάλους κι έναν «ενεργό» παίχτη. Ως ενεργός θεωρείται ο παίχτης που παίζει κάθε φορά, και σε αυτού τα χαρακτηριστικά αντιγράφονται τα χαρακτηριστικά του εκάστοτε παίχτη. Ανάλογα με το αν αυτός είναι ai ή ανθρώπινος παίχτης, η game ή θα πάρει αποφάσεις σε κάθε φάση του γύρου, ή θα περιμένει τις αποφάσεις του ανθρώπινου παίχτη πριν προχωρήσει. Επειδή θα επικαλύπτονται 3 χαρακτηριστικά: Αυτά του ενεργού παίχτη, αυτά του παίχτη και αυτά της κλάσης του παιχνιδιού, θα πρέπει όταν μεταβάλλεται κάποιο από αυτά από κάποια συνάρτηση, να ενημερώνονται και οι άλλοι δύο. Τα χαρακτηριστικά του παίχτη αρκεί να αντιγραφούν στα χαρακτηριστικά του ενεργού παίχτη στην αρχή του γύρου, και το ανάποδο να γίνει στο τέλος του γύρου. Τα χαρακτηριστικά του ενεργού παίχτη όμως θα πρέπει να αντιγράφονται στη Game στο τέλος κάθε φάσης, αφού ο ενεργός παίχτης αντί πληροφορίες από τη Game για να παίξει σε κάθε φάση. Αυτό σημαίνει οτι θα χρειαστούν ενημερωτικές συναρτήσεις οι οποίες θα μεταφέρουν δεδομένα από τη μια κλάση στην άλλη. Σε κάθε περίπτωση, για να περάσει στην επόμενη φάση του κάθε γύρου, ο ανθρώπινος παίχτης πρέπει να επιβεβαιώσει πατώντας το enter Κλάση Game A. Χαρακτηριστικά: 36

37 i. deck : Είναι η στοίβα με τα κλειστά φύλλα. ii. open_cards_deck: Η στοίβα με τα σκάρτα. iii. birimbakia: Η στοίβα με τα μπιριμπάκια iv. player_team_cards : Τα κατεβασμένα φύλλα της ομάδας του ανθρώπινου παίχτη. v. opp_team_cards: Τα κατεβασμένα φύλλα της αντίπαλης ομάδας του ανθρώπινου παίχτη vi. full_deck: Είναι μια instance της Deck. Από αυτήν τα φύλλα αντιγράφονται στην deck όταν ξεκινάει ένα νέο παιχνίδι vii. phase: Είναι η φάση του γύρου στην οποία βρίσκεται το παιχνίδι. viii. oldphase: Η προηγούμενη φάση του παιχνιδιού από την τωρινή. ix-xiii: num_of_card, closed_cards, open_cards, down_cards, pl_cards: Είναι μεταβλητές που χρησιμοποιούνται σε συνάρτηση με το module των γραφικών για να αποθηκεύσουμε αριθμούς θέσης καρτών και παραλληλόγραμμα θέσης συνδυασμών, τα οποία μετά χρησιμοποιούνται για να διαπιστώσουμε αν και που έχει κάνει κλικ ο παίχτης. xiv. active_player: Είναι ο ενεργός παίχτης σε κάθε γύρο xv. temp_mem_cards: Είναι οι κάρτες που ξέρουν οι άλλοι παίχτες οτι έχει στο χέρι του ο ενεργός παίχτης. Δηλαδή είναι οι κάρτες που πήρε σε κάθε γύρο από τα σκάρτα, μείον όσες έχει κατεβάσει σε συνδυασμούς ή έχει πετάξει στο τέλος του γύρου του. xvi. brb: Είναι η κατάσταση των μπιριμπακίων. -1 αν είναι ανέγγιχτα, 0 αν πήρε η ομάδα του πρώτου παίχτη, 1 αν πήρε η ομάδα του δεύτερου παίχτη, και 2 αν πήραν και οι δύο ομάδες. xvii. turn: Είναι μια λίστα στην οποία αποθηκεύεται η φάση και ο αριθμός του γύρου στα οποία βρισκόμαστε. Β. Συναρτήσεις: i. new_game_start(self): Με αυτήν ξεκινάει ένα νέο παιχνίδι. Δημιουργούνται οι τέσσερεις παίχτες, μοιράζονται χαρτιά όπου χρειάζεται, δίνονται αρχικές τιμές σε όλες τις απαραίτητες μεταβλητές, και ο πρώτος παίχτης μετατρέπεται σε ενεργό. Τα ονόματα των ai παιχτών επιλέγονται από μια λίστα με αποθηκευμένα ονόματα. ii. menu_joiner(self,gfx): Η συνάρτηση αυτή, είναι η πρώτη που τρέχει, και συνδέει τα μενού μεταξύ τους. Ξεκινώντας καλεί τη συνάρτηση γενικού μενού, και ανάλογα με την απάντηση που παίρνει από εκείνη καλεί τη συνάρτηση που πρέπει. Προς το παρόν μπορεί να κάνει δύο πράγματα: Είτε να καλέσει τη main για να συνεχίσει ένα ήδη υπάρχον παιχνίδι, είτε να καλέσει τη 37

38 συνάρτηση επιλογής ονόματος, στην οποία ο ανθρώπινος παίχτης δίνει το όνομά του και στη συνέχεια να ξεκινήσει ένα νέο παιχνίδι. iii. general_menu(self,gfx): Αυτή είναι η συνάρτηση γενικού μενού. Εμφανίζει στην οθόνη ένα μενού με τις δυνατές επιλογές του παίχτη, και επιστρέφει την εκάστοτε επιλογή όταν γίνει. iv. name_menu(self,gfx): Είναι το μενού επιλογής ονόματος. Δίνει στον παίχτη τη δυνατότητα να γράψει το όνομά του, και ταυτόχρονα εμφανίζει στην οθόνη αυτά που έγραψε ο παίχτης. Όταν ο παίχτης επιβεβαιώσει οτι έδωσε το όνομά του, το επιστρέφει. v. active_player_changer(self): Η συνάρτηση αυτή αλλάζει τον ενεργό παίχτη. Τρέχει στο τέλος κάθε γύρου και ανάλογα με το ποιός ήταν προηγούμενος ο ενεργός παίχτης, επιλέγει τον επόμενο ενεργό παίχτη. vi. mod_fixer(self): Η συνάρτηση αυτή τρέχει στο τέλος κάθε γύρου, και φροντίζει το χαρακτηριστικό mod όλων των καρτών, το οποίο μεταβάλλεται από τις συναρτήσεις evaluator, και αλλάζει ανάλογα με το πού βρίσκεται η κάθε κάρτα, να είναι το σωστό για κάθε κάρτα. vii. full_deselector(self): Η συνάρτηση αυτή κάνει όλες τις κάρτες που μπορούν να είναι επιλεγμένες, μη επιλεγμένες. Τρέχει στο τέλος κάθε φάσης. viii. active_player_updater(self): Ο ενεργός παίχτης, όταν ξεκινάει ή όταν αλλάζει, δεν έχει στα χαρακτηριστικά του τις τιμές που έχει ο παίχτης τον οποίο αντιπροσωπεύει. Η συνάρτηση αυτή ενημερώνει αυτά τα χαρακτηριστικά, αντλώντας τις σωστές τιμές από τα χαρακτηριστικά της κλάσης Game. Τρέχει στο τέλος κάθε γύρου, και διορθώνει τα φύλλα που έχουν κατεβάσει οι δύο ομάδες, τα σκάρτα φύλλα, τα φύλλα που δεν έχουν ανοιχτεί ακόμα, τα μπιριμπάκια και των αριθμό των φύλλων συμπαίχτη και αντιπάλων, στις σωστές τιμές τους. ix. pl_mem_updater(self): Ενημερώνει τους άλλους τρείς παίχτες για τα φύλλα που γνωρίζουν οτι έχει στα χέρια του ο ενεργός παίχτης. Αυτά θα είναι όσα φύλλα πήρε από κάτω από την αρχή του παιχνιδιού, μείον όσα κατέβασε σε συνδυασμούς ή πέταξε στο τέλος των γύρων του. Ενημερώνει απευθείας τα instances των άλλων παιχτών, και τρέχει στο τέλος του γύρου. x. player_updater(self): Τρέχει στο τέλος κάθε γύρου και ενημερώνει την πραγματική instance του ενεργού παίχτη (player, όχι active_player), για τις κινήσεις που έγιναν στο γύρο. Αντλεί τις πληροφορίες, από τα χαρακτηριστικά του ενεργού παίχτη. xi. game_updater (self): Τρέχει στο τέλος κάθε φάσης, και ενημερώνει την κλάση Game για τις κινήσεις του ενεργού παίχτη. xii. final_scores(self): Η συνάρτηση υπολογίζει τα τελικά σκορ των δύο ομάδων υπολογίζοντας τυχόν φύλλα που έχουν στα χέρια τους, τυχόν συνδυασμούς που έχουν κατεβεί, το ποιά ομάδα έκλεισε και το ποιός έχει πάρει μπιριμπάκι. 38

39 xiii. main(self,gfx): Η κύρια συνάρτηση του παιχνιδιού. Τρέχει ένα βρόγχο ασταμάτητα, ο οποίος διαφοροποιείται ανάλογα με τη φάση του παιχνιδιού και το αν ο παίχτης είναι ανθρώπινος ή ai. Στο τέλος κάθε φάσης ορίζεται ποιά είναι η επόμενη φάση, τρέχουν οι κατάλληλες συναρτήσεις updater και αναμένεται επιβεβαίωση από τον ανθρώπινο παίχτη, καλώντας τη συνάρτηση endphase. Στο τέλος της, υπάρχει η εντολή να σταματήσει να λειτουργεί για 30 ms, ώστε να εξοικονομούμε επεξεργαστική ισχύ, και στη συνέχεια ανανεώνεται η οθόνη με τα νέα γραφικά που ορίστηκαν από τη main. Εντός του βρόχου: Αρχικά τρέχουν οι συναρτήσεις των γραφικών που απεικονίζουν τα γραφικά του παιχνιδιού, τα φύλλα του παίχτη και των αντιπάλων, τα σκάρτα φύλλα και γενικά όλες τις γραφικές πληροφορίες που χρειάζεται ο παίχτης. Στη συνέχεια τρέχουν οι συναρτήσεις που δημιουργούν παραλληλόγραμμα γύρο από τα σημεία που χρειάζεται, ώστε όταν ο παίχτης κάνει κλικ σε αυτά, να μπορούμε να εκτελέσουμε τις κατάλληλες κινήσεις. Τέλος, ανάλογα με τη φάση και το αν ο παίχτης είναι ai ή όχι επιλέγει μια από τις εξής κινήσεις: Φάση 1, άνθρωπος: Αν κάνει κλικ πάνω είτε στα σκάρτα είτε στα κλειστά φύλλα, αυτά γίνονται επιλεγμένα, και αν στη συνέχεια επιβεβαιώσει με enter, παίρνει τα φύλλα που επέλεξε, ενημερώνεται η μνήμη των άλλων παιχτών για τα φύλλα που πήρε (αν πήρε τα σκάρτα) και καλείται η συνάρτηση endphase. Φάση 1, ai: Τρέχει η συνάρτηση cards_get_throw_evaluator του ενεργού παίχτη, και ανάλογα με την απάντησή του, παίρνει τις κάρτες που επέλεξε, ενημερώνεται η μνήμη των άλλων παιχτών για τα φύλλα που πήρε (αν πήρε τα σκάρτα), και καλείται η συνάρτηση endphase. Φάση 2, άνθρωπος: Αν κάνει κλικ πάνω σε φύλλο του, αυτό το φύλλο γίνεται επιλεγμένο. Αν κάνει κλικ σε κατεβασμένο συνδυασμό της ομάδας του, αυτός ο συνδυασμός γίνεται επιλεγμένος. Αν επιβεβαιώσει την κίνηση, είτε θα κατεβεί νέος συνδυασμός (αν δεν είχε επιλεγεί κάποιος ήδη υπάρχον) είτε θα ενημερωθεί ένας παλιότερος συνδυασμός, είτε θα εμφανιστεί μήνυμα σφάλματος αν ο συνδυασμός που προσπαθεί να κατεβάσει ο παίχτης δεν είναι έγκυρος. Σε περίπτωση ο συνδυασμός είναι έγκυρος, θα ενημερωθεί ο ενεργός παίχτης από τη Game για να νέα δεδομένα. 39

40 Αν δοθεί επιβεβαίωση ενώ δεν υπάρχει επιλεγμένη κάρτα ή συνδυασμός, περνάμε στο τέλος της φάσης, όπου και ενημερώνεται η μνήμη των άλλων παιχτών και καλείται η συνάρτηση endphase. Σε περίπτωση που τελείωσαν τα φύλλα του παίχτη, πριν την endphase ορίζεται οτι η νέα φάση θα είναι η 5 αν η ομάδα του παίχτη δεν έχει πάρει μπιριμπάκια, ή η 10 αν έχει πάρει ήδη, οπότε και το παιχνίδι θα τελειώσει αφού τρέξει ή endphase. Φάση 2, ai: Ομοίως με τον άνθρωπο, αλλά καλείται η συνάρτηση move_evaluator για να αποφασίσει για την κίνηση του παίχτη, και στη συνέχεια ενημερώνεται η Game για την απάντηση της move_evaluator. Κατά τα άλλα ακολουθείται η προηγούμενη διαδικασία. Φάση 3, άνθρωπος: Αν γίνει κλικ σε κάποιο από τα φύλλα του παίχτη, αυτό γίνεται επιλεγμένο, και αν δοθεί επιβεβαίωση με enter, αυτό το φύλλο καταλήγει στα σκάρτα. Επιτρέπεται μόνο ένα επιλεγμένο φύλλο. Στη συνέχεια ενημερώνεται η μνήμη των φύλλων του παίχτη αφαιρώντας από αυτήν το φύλλο που πετάχτηκε, και ενημερώνεται ο ενεργός παίχτης από τα στοιχεία της Game. Φάση 3, ai: Η απόφαση για την κάρτα που θα πεταχτεί προέρχεται από τη συνάρτηση cards_get_throw_evaluator, και στη συνέχεια ακολουθείται η ίδια διαδικασία που έγινε και με τον ανθρώπινο παίχτη. Στο τέλος της φάσης 3, ελέγχουμε αν ο παίχτης δεν έχει άλλα φύλλα στα χέρια του, και αν όντως δεν έχει, ορίζουμε ως επόμενη φάση την 6 η αν δεν είχε πάρει η ομάδα του μπιριμπάκι, και την 10 η αν είχε. Τέλος καλείται η endphase. Φάση 5: Είναι η φάση στην οποία ο παίχτης παίρνει το μπιριμπάκι και το παίζει. Καλείται η endphase η οποία θα προσθέσει στα φύλλα του παίχτη τα 11 φύλλα του μπιριμπακίου. Φάση 6: Είναι η φάση στην οποία ο παίχτης παίρνει το μπιριμπάκι και τελειώνει το γύρο του. Καλείται η endphase η οποία θα προσθέσει στα φύλλα του παίχτη τα 11 φύλλα του μπιριμπακίου. Φάση 10: Είναι η φάση στην οποία το παιχνίδι τελειώνει. Καλείται η endphase η οποία θα υπολογίσει και θα δείξει στην οθόνη τα τελικά σκορ των παιχτών. 40

41 Φάση 11: Σε αυτή τη φάση το παιχνίδι έχει τελειώσει. Ο κύριος βρόγχος του παιχνιδιού σταματάει εδώ. ixx. endphase(self,gfx): Η συνάρτηση αυτή καθυστερεί την εξέλιξη του παιχνιδιού μέχρι ο ανθρώπινος παίχτης να επιβεβαιώσει πατώντας το enter οτι ενημερώθηκε για το τι έγινε κατά τη διάρκεια της προηγούμενης φάσης. Για όσο περιμένει εμφανίζει στην οθόνη οτι περιμένει επιβεβαίωση για να προχωρήσει. Όταν λάβει την επιβεβαίωση, ενημερώνει την Game και τον ενεργό παίχτη για το τι έγινε στην επόμενη φάση, και αν η επόμενη φάση είναι η 1 η, ενημερώνει ακόμα τον παίχτη για το τι έγινε στο γύρο, και αλλάζει τον ενεργό παίχτη. Επίσης σε κάθε περίπτωση κάνει κάθε κάρτα που δεν έχει λόγο να είναι επιλεγμένη, μη επιλεγμένη. Παράλληλα ορίζει ποιά θα είναι η επόμενη φάση, ανάλογα με το ποιές ήταν οι δύο προηγούμενες. Αν η προηγούμενη φάση ήταν η 10 η, το παιχνίδι τελειώνει και υπολογίζονται τα τελικά σκορ, τα οποία εμφανίζονται στην οθόνη στην 11 η φάση. 5. Module Music Το αρχείο αυτό είναι υπεύθυνο για τη μουσική που θα ακούγεται κατά τη διάρκεια του παιχνιδιού. Τελικά η μουσική κρίθηκε μη σημαντική για τη λειτουργία της εφαρμογής, και, παρόλο που οι συναρτήσεις της παρακάτω κλάσης λειτουργούν, δε χρησιμοποιούνται (αν και είναι αρκετά εύκολο να προσθέσουμε μουσική) Κλάση Music: Η κλάση αυτή πρέπει να κληθεί από την κεντρική συνάρτηση όταν αρχίζει το παιχνίδι, για να έχουμε μουσική. Περιέχει συναρτήσεις οι οποίες εκμεταλλεύονται τις δυνατότητες του pygame για να παίξουν αρχεία μουσικής σε μορφή.ogg i. start(self): Η συνάρτηση αυτή καλείται για να ξεκινήσουμε να ακούμε τη μουσική. Φορτώνει σε μια λίστα προς εκτέλεση τη μουσική μορφής.ogg που βρίσκεται στο φάκελο: «./music» Στη συνέχεια ξεκινάει με το πρώτο τραγούδι της λίστας, ρυθμίζοντας και την ένταση του ήχου. ii. play_next_track(self): Η συνάρτηση ελέγχει αν ακούγεται κάποιο τραγούδι, και αν όχι, αναπαράγει το επόμενο τραγούδι της λίστας αναπαραγωγής. iii. music_off(self): Σταματάει την εκτέλεση του τραγουδιού που ακούγαμε. iv. music_on(self): Συνεχίζει την εκτέλεση ενός σταματημένου τραγουδιού. 41

42 6. Module Pyconsole Κονσόλα: Γενικά είναι χρήσιμη μια εφαρμογή κονσόλας μέσα σε ένα παιχνίδι, καθώς μπορεί να διευκολύνει τις διαδικασίες testing και debugging. Στην εφαρμογή μας, δε χρειάστηκε να γραφτεί κώδικας για αυτό, καθώς υπήρχε έτοιμος εδώ: Το αρχείο αυτό λοιπόν, δημιουργεί ένα παράθυρο κονσόλας μέσα σε ένα παράθυρο του pygame: Πατώντας ctrl+w κατά τη διάρκεια της σειράς του παίχτη ή για όσο βρισκόμαστε στο αρχικό μενού, εμφανίζεται στο πάνω μέρος του παραθύρου ένα μπλέ παράθυρο, στο οποίο μπορούμε να γράψουμε και να εκτελέσουμε κώδικα σα να βρισκόμασταν στο interactive shell της python (αλλά δεν έχουμε επικοινωνία με την εφαρμογή που τρέχει εκείνη τη στιγμή). Το παράθυρο κλείνει με τον ίδιο συνδυασμό πλήκτρων. Ο κώδικας του pyconsole δίνει τη δυνατότητα επίσης σε κάποιον, να γράψει δικές του εντολές, οι οποίες θα μπορούν να μεταβάλλουν κάτι στο παιχνίδι. Τελικά δεν εκμεταλλευτήκαμε αυτή τη δυνατότητα, στο μέλλον όμως θα μπορούσε να χρησιμοποιηθεί για γρήγορο testing και debugging του προγράμματος. Το pyconsole είναι μια εφαρμογή της οποίας τον κώδικα πήραμε έτοιμο από το internet. Συνεπώς επεξηγήσεις για τον κώδικα υπάρχουν εκεί από όπου βρήκαμε τον κώδικα. Η ηλεκτρονική διεύθυνση υπάρχει παραπάνω. 7. Διαγράμματα Ροής των βασικότερων συναρτήσεων Συναρτήσεις πιστοποίησης εγκυρότητας Αυτές είναι οι συναρτήσεις checker και aligner, η έξοδος της checker είναι η είσοδος της aligner. 42

43 i. Συνάρτηση Checker 43

44 ii. Συνάρτηση Aligner Συναρτήσεις εύρεσης συνδυασμών Αυτές οι συναρτήσεις βρίσκουν όλους τους δυνατούς συνδυασμούς που μπορούν να υλοποιηθούν από τον παίχτη. Είναι οι combination_finder_from_hand, combination_finder_from_table i. combination_finder_from_hand, parts1,2 44

45 45

46 46

47 ii. combination_finder_from_table, parts1,2,3 47

48 48

49 49

50 Συνάρτηση εύρεσης του δέντρου του παιχνιδιού Η συνάρτηση αυτή είναι η tree_finder: 50

51 Συναρτήσεις αξιολόγησης των κινήσεων του παίχτη Είναι δύο κύριες, η cards_evaluator και η move_evaluator, αλλά η πρώτη έχει τρείς υποσυναρτήσεις, τις coplayer_evaluator, downcards_evaluator και opp_evaluator. i. cards_evaluator και υποσυναρτήσεις. 51

52 52

53 53

54 ii. move_evaluator, parts1,2 54

55 55

56 56

57 Συναρτήσεις αξιολόγησης των επιλογών του παίχτη κατά την πρώτη και τρίτη φάση. Είναι οι συναρτήσεις που αποφασίζουν τι θα πάρει ο παίχτης στην πρώτη και τι θα πετάξει στην τρίτη φάση. Οι κύρια συνάρτηση είναι η cards_get_throw_evaluator, και οι βοηθητικές της είναι οι coplayer_evaluator, opp_evaluator, playercards_evaluator. 57

58 58

59 59

60 60

61 61

62 Η κύρια συνάρτηση του παιχνιδιού. Περιέχει το κύριο loop το οποίο εκτελείται για όσο παίζουμε 62

63 Κεφάλαιο 4: Παραδείγματα Χρήσης 4.1. Λειτουργία Προγράμματος Screenshots Για να λειτουργήσει το πρόγραμμα, αρκεί να είναι εγκατεστημένη στον υπολογιστή η έκδοση της python ή κάποια μεταγενέστερη, και η έκδοση του pygame ή κάποια μεταγενέστερη (που να είναι όμως συμβατή με την έκδοση της python του εκάστοτε συστήματος) Στη συνέχεια, τρέχοντας το αρχείο game.pyw θα εμφανιστεί το παράθυρο του αρχικού μενού του παιχνιδιού: Ο χειρισμός σε αυτό το παράθυρο γίνεται από το πληκτρολόγιο. Πατώντας το κατάλληλο νούμερο επιλέγεται μία από τις έξι δυνατότητες που βλέπουμε στην οθόνη. (σε αυτή την έκδοση του παιχνιδιού λειτουργούν μόνο οι επιλογές 1,2 και 6) 63

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

65 Πάνω αριστερά βλέπουμε τον αριθμό των μπιριμπακίων που υπάρχουν ακόμα κλειστά, ενώ πάνω δεξιά βλέπουμε σε ποιό γύρο βρίσκεται το παιχνίδι. Αριστερά, δεξιά και πάνω υπάρχουν τα ονόματα των υπολοίπων παιχτών, και ο αριθμός των φύλλων που έχουν στα χέρια τους. Στο κέντρο αριστερά θα μπουν (όταν υπάρξουν) οι συνδυασμοί τους οποίους κατέβασε η ομάδα του παίχτη, ενώ στο κέντρο δεξιά αυτοί της αντίπαλης ομάδας. Τέλος, κάτω αριστερά βρίσκονται τα φύλλα που έχει στο χέρι του ο παίχτης, ενώ κάτω δεξιά βλέπουμε ποιού παίχτη είναι η σειρά να παίξει, και τι πρέπει να κάνει ο ανθρώπινος παίχτης για να προχωρήσει το παιχνίδι. Στην πρώτη φάση, ο παίχτης επιλέγει με το ποντίκι αν θα πάρει όλα τα σκάρτα φύλλα, ή ένα από τα κλειστά (κάνοντας κλικ σχηματίζεται ένα πορτοκαλί παραλληλόγραμμο γύρω από τη στοίβα που επιλέχθηκε), και επιβεβαιώνει την επιλογή πατώντας το Enter, οπότε και περνάμε στο τέλος της πρώτης φάσης: 65

66 Επιλέχθηκαν τα σκάρτα, οπότε βλέπουμε ποιό/ά φύλλα πήραμε, και το πρόγραμμα περιμένει Enter για να περάσει στη 2η φάση: Σε αυτή τη φάση, ο παίχτης μπορεί να κατεβάσει νέους συνδυασμούς επιλέγοντας τα φύλλα που πρέπει κάνοντας κλικ πάνω τους (τα επιλεγμένα φύλλα ξεχωρίζουν γιατί «ανεβαίνουν» λίγο πάνω από τα μη επιλεγμένα), και πατώντας το Enter για να επιβεβαιώσει. Στη περίπτωση μας επιλέχθηκαν τα φύλλα 9,10,βαλές καρό. Επίσης, όπως θα φανεί στην επόμενη εικόνα, επιλέγοντας ταυτόχρονα ένα κατεβασμένο συνδυασμό και κάποια από τα φύλλα του παίχτη που ταιριάζουν, μπορούμε να προσθέσουμε φύλλα στο συνδυασμό. 66

67 Αν προσπαθήσουμε να κατεβάσουμε μη έγκυρο συνδυασμό, θα εμφανιστεί μήνυμα σφάλματος. Περνάμε στο τέλος της φάσης πατώντας το Enter ενώ δεν υπάρχουν επιλεγμένες κάρτες, όπου και το πρόγραμμα περιμένει επιβεβαίωση (με Enter) για να περάσει στην 3η φάση: Σε αυτή τη φάση, ο παίχτης επιλέγει μια κάρτα από τα φύλλα του (με το ποντίκι) και την πετάει στα σκάρτα (επιβεβαιώνοντας με Enter). Έτσι περνάμε στο τέλος της 3ης φάσης, όπου το πρόγραμμα αναμένει επιβεβαίωση με Enter για να περάσει στην 1η φάση του επόμενου παίχτη: 67

68 Βλέπουμε οτι ο αντίπαλος πήρε ένα από τα κλειστά φύλλα. Σε αυτή τη φάση καθώς και σε κάθε φάση που παίζει άλλος παίχτης από τον δικό μας (δηλαδή για το υπόλοιπο του γύρου), το μόνο που μπορεί να κάνει ο παίχτης είναι να επιβεβαιώσει οτι είδε την κίνηση του αντιπάλου (ή συμπαίχτη) πατώντας το Enter στο τέλος κάθε φάσης αυτών. Όταν ξαναέρθει η σειρά μας, θα μπορούμε να παίξουμε ξανά, από την αρχή της πρώτης φάσης. Όταν σε κάποιο παίχτη τελειώσουν τα φύλλα, παίρνει το μπιριμπάκι της ομάδας του, ή κλείνει και το παιχνίδι τελειώνει αν η ομάδα είχε ήδη πάρει το μπιριμπάκι της. Στην εικόνα φαίνεται το τέλος του παιχνιδιού: 4.2 Δείγματα τρόπου λειτουργίας της ai από Screenshots A. Ένας παίχτης δε θα κατέβαζε ποτέ συνδυασμό με μπαλαντέρ στην αρχή αν αυτός ο μπαλαντέρ δεν ήταν στο ίδιο χρώμα με τα υπόλοιπα φύλλα του συνδυασμού. Αυτό γιατί ένας συνδυασμός «καθαρός» έχει διπλάσια αξία, και ο παίχτης μπορεί να χρησιμοποιήσει το μπαλαντέρ αργότερα αν δε μπορέσει να φτιάξει έναν «καθαρό» συνδυασμό. 68

Τιμή Τιμή. σκορ. ζωές

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

Διαβάστε περισσότερα

Το Κ2 είναι ένα παιχνίδι για 1 έως 5 παίκτες, ηλικίας 8 ετών και άνω, με διάρκεια περίπου 60 λεπτά.

Το Κ2 είναι ένα παιχνίδι για 1 έως 5 παίκτες, ηλικίας 8 ετών και άνω, με διάρκεια περίπου 60 λεπτά. ΟΔΗΓΙΕΣ Το Κ2 είναι το δεύτερο ψηλότερο βουνό στον κόσμο (μετά το Έβερεστ) με ύψος 8.611 μέτρα από τη στάθμη της θάλασσας. Θεωρείται, επίσης, ένα από τα δυσκολότερα βουνά άνω των 8.000 μέτρων. Το Κ2 ποτέ

Διαβάστε περισσότερα

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites Σκοπός της 10ης άσκησης είναι να μάθουμε να χρησιμοποιούμε sprites και να φτιάξουμε ένα παιχνίδι που χρησιμοποιεί συγκρούσεις. Θα δούμε επίσης μερικά

Διαβάστε περισσότερα

1-4 παίκτες - 30 λεπτά

1-4 παίκτες - 30 λεπτά 1-4 παίκτες - 30 λεπτά Κάθε παίκτης είναι ένας Άνθρωπος της Αναγέννησης, με ξεχωριστές ικανόητες. Λόγιος, Έμπορος, Ιππότης και Φούρναρης. Σκοπός σας είναι να εκπαιδεύσετε, να προσλάβετε και να στρατολογήσετε

Διαβάστε περισσότερα

Οδηγίες. Θα το παίξεις... και θα πεις κι ένα τραγούδι!

Οδηγίες. Θα το παίξεις... και θα πεις κι ένα τραγούδι! Οδηγίες To Sing It! είναι ένα νέο παιχνίδι παρέας που δοκιμάζει τις γνώσεις σας στο ελληνικό τραγούδι! Μέσα από λέξεις που σας δίνονται, καλείστε να βρείτε τραγούδια που τις περιέχουν. Θα πείτε εσείς τα

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 4η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται κυρίως στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β.

Διαβάστε περισσότερα

ΠΟΡΕΙΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Σε κάθε γύρο έχετε 2 ενέργειες. Στην κάθε ενέργεια μπορείτε να κάνετε ένα από τα εξής:

ΠΟΡΕΙΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Σε κάθε γύρο έχετε 2 ενέργειες. Στην κάθε ενέργεια μπορείτε να κάνετε ένα από τα εξής: ΕΙΣΑΓΩΓΗ Οι δουλειές ανθίζουν! Από τότε που ανοίξατε τη συντεχνία, κάθε λογής επαγγελματίες έχουν φτάσει από όλη την Ευρώπη, ώστε να ανταλλάξουν πληροφορίες και να αυξήσουν τις δουλειές τους. Εσείς είστε

Διαβάστε περισσότερα

Περιεχόμενα του Παιχνιδιού

Περιεχόμενα του Παιχνιδιού 1347 Ο Μαύρος Θάνατος ξεσπάει στην Ευρώπη. Ο άρχοντας της χώρας σας, μόλις υπέκυψε στην πανούκλα, και τώρα εσείς, οι πρίγκηπες της χώρας, ανταγωνίζεστε μεταξύ σας για να τον αντικαταστήσετε. Για να το

Διαβάστε περισσότερα

EMOJITO! 7 Δίσκοι Ψηφοφορίας. 100 Κάρτες Συναισθημάτων. 1 Ταμπλό. 7 Πιόνια παικτών. 2-7 Παίκτες

EMOJITO! 7 Δίσκοι Ψηφοφορίας. 100 Κάρτες Συναισθημάτων. 1 Ταμπλό. 7 Πιόνια παικτών. 2-7 Παίκτες o Emojito! είναι ένα παιχνίδι παρέας, για 2 έως 14 άτομα, όπου οι παίκτες προσπαθούν να εκφράσουν συναισθήματα που απεικονίζονται σε κάρτες, είτε χρησιμοποιώντας το πρόσωπό τους, είτε ήχους ή και τα 2.

Διαβάστε περισσότερα

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

Περιεχόμενα και προετοιμασία για τέσσερις παίκτες Ένα παιχνίδι του Peter Prinz για 2-4 παίκτες Σαν αρχαιολόγοι, οι παίκτες αποκτούν την γνώση που απαιτείται για να ξεκινήσουν αποστολές σε Αίγυπτο, Μεσοποταμία, Κρήτη και Ελλάδα. Ποιός έχει τη δύναμη να

Διαβάστε περισσότερα

Παραδείγματα μεταβλητών

Παραδείγματα μεταβλητών Παραδείγματα μεταβλητών Παράδειγμα Bouncing Balls: Στη σκηνή υπάρχουν τρείς μπάλες και κάθε μία έχει διαφορετικό μέγεθος από τις άλλες. Όλες οι μπάλες χοροπηδούν ταυτόχρονα προς όλες τις κατευθύν-σεις.

Διαβάστε περισσότερα

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1 Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Τεχνητή Νοημοσύνη, 2016 17 Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 4 ης διάλεξης 4.1. (α) Αποδείξτε ότι αν η h είναι συνεπής, τότε h(n

Διαβάστε περισσότερα

ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ ΟΙ ΚΑΡΤΕΣ

ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ ΟΙ ΚΑΡΤΕΣ ΕΠΙΣΗΜΟΙ ΚΑΝΟΝΕΣ ΤΟΥ Το SLEUTH είναι ένα φανταστικό παιχνίδι έρευνας για 3 έως 7 παίκτες. Μέσα από έξυπνες ερωτήσεις προς τους αντιπάλους του, κάθε παίκτης συλλέγει στοιχεία και έπειτα, χρησιμοποιώντας

Διαβάστε περισσότερα

Επίλυση Προβλημάτων και Τεχνικές Αναζήτησης Εισαγωγή

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

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 6η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη. 6η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 6η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

Ασκήσεις μελέτης της 6 ης διάλεξης

Ασκήσεις μελέτης της 6 ης διάλεξης Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Τεχνητή Νοημοσύνη, 2016 17 Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 6 ης διάλεξης 6.1. (α) Το mini-score-3 παίζεται όπως το score-4,

Διαβάστε περισσότερα

αντίστοιχο γεγονός. Όταν όντως το κουμπί

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

Διαβάστε περισσότερα

Επίλυση Προβλημάτων 1

Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης Αναζήτηση πρώτα σε βάθος Αναζήτηση πρώτα σε πλάτος (ΒFS) Αλγόριθμοι ευρετικής αναζήτησης

Διαβάστε περισσότερα

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι 21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB Αλγόριθμος Διαδικασία Παράμετροι Τι είναι Αλγόριθμος; Οι οδηγίες που δίνουμε με λογική σειρά, ώστε να εκτελέσουμε μια διαδικασία ή να επιλύσουμε ένα

Διαβάστε περισσότερα

Ταυτότητα εκπαιδευτικού σεναρίου

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

Διαβάστε περισσότερα

Slalom Race Computer Game on Scratch

Slalom Race Computer Game on Scratch Slalom Race Computer Game on Scratch Μπογιατζή Ελισάβετ ¹, Μεταξά Παυλίνα², Νεστοροπούλου Ευσεβεία³, Μαρόγλου Ευαγγελία 4 1 boelisabet@gmail.com 2 pavlinamet2@gmail.com 3 makis.nestoro@hotmail.com 4 euaggeliam2000@gmail.com

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Παίγνια Δύο Αντιπάλων Τα προβλήματα όπου η εξέλιξη των καταστάσεων εξαρτάται

Διαβάστε περισσότερα

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Φτάσαμε σιγά σιγά στο τέλος του βιβλίου. Αντί για κάποιον επίλογο σκέφτηκα να συλλέξω κάποια πράγματα που θα ήθελα να πω σε κάποιον ο οποίος αρχίζει

Διαβάστε περισσότερα

Καροτοκυνηγός. Αντικείμενα

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

Διαβάστε περισσότερα

Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω.

Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω. Το Jungle Speed είναι ένα παιχνίδι για 2 έως 10 παίκτες (ή και ακόμη περισσότερους!) ηλικίας 7 και άνω. Σκοπός σας είναι να είστε ο πρώτος παίκτης που θα ξεφωρτωθεί όλες του τις κάρτες. Το τοτέμ τοποθετείται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το Τάξη : Α Λυκείου Λογισμικό : Scratch Ενδεικτική Διάρκεια : 45 λεπτά Μεταβλητές Όλα όσα έμαθες στα προηγούμενα φυλλάδια είναι απαραίτητα για να υλοποιήσεις απλές εφαρμογές. Ωστόσο αν θέλεις να δημιουργήσεις

Διαβάστε περισσότερα

Θεωρία Λήψης Αποφάσεων

Θεωρία Λήψης Αποφάσεων Θεωρία Λήψης Αποφάσεων Ενότητα 8: Αναζήτηση με Αντιπαλότητα Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.) Αναζήτηση

Διαβάστε περισσότερα

Πλειστηριασμός Για να πλειοδοτήσει κάποιος άξονας θα πρέπει να αναλάβει την υποχρέωση

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

Διαβάστε περισσότερα

Ένα παιχνίδι για 2-4 εξερευνητές, ηλικίας 8 και άνω. Διάρκεια παιχνιδιού περίπου 60 λεπτά

Ένα παιχνίδι για 2-4 εξερευνητές, ηλικίας 8 και άνω. Διάρκεια παιχνιδιού περίπου 60 λεπτά Ένα παιχνίδι για 2-4 εξερευνητές, ηλικίας 8 και άνω Διάρκεια παιχνιδιού περίπου 60 λεπτά ΠΕΡΙΕΧΟΜΕΝΑ 1 ταμπλό με τον χάρτη της Αφρικής Βιβλίο 2 βιβλία Κάρτες Περιπέτειας 30 κάρτες περιπέτειας (15 με λευκό

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΠΕΡΙΕΧΟΜΕΝΑ. 96 Κάρτες αντικειμένων 4 Κάρτες επεξήγησης ενεργειών Οδηγίες. Απεικόνιση Αντικειμένου. Αρνητικος Αριθμός.

ΕΙΣΑΓΩΓΗ ΠΕΡΙΕΧΟΜΕΝΑ. 96 Κάρτες αντικειμένων 4 Κάρτες επεξήγησης ενεργειών Οδηγίες. Απεικόνιση Αντικειμένου. Αρνητικος Αριθμός. ΕΙΣΑΓΩΓΗ Είναι ώρα για ΠΑΡΤΥ! Έχουμε μουσική, φαγητό, χορό και πολλές Πινιάτες! Γεμίστε τις Πινιάτες με γλυκά και παιχνίδια ή ξεγελάστε τους άλλους γεμίζοντας κρυφά την Πινιάτα με άχρηστα αντικείμενα!

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης. Επτά λεγεώνες και. κατακτηθεί. Απόθεμα λεγεώνων. Στοίβα στόχων

ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης. Επτά λεγεώνες και. κατακτηθεί. Απόθεμα λεγεώνων. Στοίβα στόχων Ένα παιχνίδι του Paolo Mori για 2 έως 6 παίκτες ηλικίας 8 και άνω ΠΕΡΙΕΧΟΜΕΝΑ: 88 στόχοι 48 λεγεώνες 23 δείκτες ενεργοποίησης 12 βραβεία 1 σακουλάκι 1 μπλοκ σκορ Μπροστά σας έχετε ένα παράδειγμα του στησίματος

Διαβάστε περισσότερα

Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων

Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων Τεχνητή Νοημοσύνη 06 Αλγόριθμοι Αναζήτησης σε Παίγνια Δύο Αντιπάλων Εισαγωγικά (1/3) Τα προβλήματα όπου η εξέλιξη των καταστάσεων εξαρτάται από δύο διαφορετικά σύνολα τελεστών μετάβασης που εφαρμόζονται

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/ Τεχνητή Νοημοσύνη 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία: Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

ΠΑΙΓΝΙΑ Παιχνίδια Γενική Θεώρηση μεγιστοποιήσει την πιθανότητά

ΠΑΙΓΝΙΑ Παιχνίδια Γενική Θεώρηση μεγιστοποιήσει την πιθανότητά ΠΑΙΓΝΙΑ Παιχνίδια Γενική Θεώρηση: Έστω ότι έχουμε τους παίκτες Χ και Υ. Ο κάθε παίκτης, σε κάθε κίνηση που κάνει, προσπαθεί να μεγιστοποιήσει την πιθανότητά του να κερδίσει. Ο Χ σε κάθε κίνηση που κάνει

Διαβάστε περισσότερα

Ένα παιχνίδι του Stefan Feld ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ ΠΕΡΙΕΧΟΜΕΝΑ

Ένα παιχνίδι του Stefan Feld ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ ΠΕΡΙΕΧΟΜΕΝΑ Ένα παιχνίδι του Stefan Feld για 2 έως 5 παίκτες. Χρόνος παιχνιδιού: 45-60 λεπτά. ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΠΑΙΧΝΙΔΙ Η Βενετία είναι διάσημη για τις γέφυρες και τις γόνδολές της. Περί αυτού πρόκειται και το παιχνίδι

Διαβάστε περισσότερα

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ" ΜΕΡΟΣ ΔΕΥΤΕΡΟ Υπεύθυνος Καθηγητής Λυκοθανάσης Σπυρίδων Ακαδημαικό Έτος:

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ Τελικές εξετάσεις Πέμπτη 27 Ιουνίου 2013 10:003:00 Έστω το πάζλ των οκτώ πλακιδίων (8-puzzle)

Διαβάστε περισσότερα

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης Επίλυση προβληµάτων Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης! Παιχνίδια δύο αντιπάλων Προβλήµατα ικανοποίησης περιορισµών Γενικά " Ντετερµινιστικά

Διαβάστε περισσότερα

5.1.1 Περιγραφή των συστατικών τμημάτων ενός γραφήματος

5.1.1 Περιγραφή των συστατικών τμημάτων ενός γραφήματος 5. Γραφήματα 5.1 Εισαγωγή 5.1.1 Περιγραφή των συστατικών τμημάτων ενός γραφήματος Το Discoverer παρέχει μεγάλες δυνατότητες στη δημιουργία γραφημάτων, καθιστώντας δυνατή τη διαμόρφωση κάθε συστατικού μέρους

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Πίστας Αγώνα Αρχικών Στοιχημάτων Βοηθήματος Παικτών Πρώτου Παίκτη Τούρμπο Πρώτο στοίχημα: Κατασκευή της πίστας:

Πίστας Αγώνα Αρχικών Στοιχημάτων Βοηθήματος Παικτών Πρώτου Παίκτη Τούρμπο Πρώτο στοίχημα: Κατασκευή της πίστας: Η χελώνα δέχτηκε την απαίτηση του λαγού για ρεβάνς του αγώνα και τα νέα εξαπλώθηκαν γρήγορα παντού. Ο μεγάλος αγώνας ήταν έτοιμος να ξεκινήσει και οι συμμετέχοντες ήταν πια έτοιμοι για την μεγάλη αναμέτρηση.

Διαβάστε περισσότερα

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π.

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π. Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων CO.RE.LAB. ΣΗΜΜΥ - Ε.Μ.Π. Άσκηση 1 η : Παιχνίδι επιλογής ακμών Έχουμε ένα ακυκλικό κατευθυνόμενο γράφο, μια αρχική κορυφή και δυο παίκτες. Οι παίκτες διαδοχικά

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012 ΘΕΜΑ Α Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις: 1. Κάθε βρόγχος που υλοποιείται με την εντολή Για μπορεί να

Διαβάστε περισσότερα

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα;

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα; Τελεστές, συνθήκες και άλλα! Όπως έχει διαφανεί από όλα τα προηγούμενα παραδείγματα, η κατασκευή κατάλληλων συνθηκών στις εντολές εάν, εάν αλλιώς, για πάντα εάν, περίμενε ώσπου, επανέλαβε ώσπου, είναι

Διαβάστε περισσότερα

Λίγα λόγια... Περιεχόμενα

Λίγα λόγια... Περιεχόμενα ΟΔΗΓΙΕΣ Λίγα λόγια... Το επιτραπέζιο παιχνίδι «Μάντεψε Τι + Ποιος» περιλαμβάνει 6 συναρπαστικά παιχνίδια, που θα ξετρελάνουν μικρούς και μεγάλους. Εξάλλου, το ζητούμενο είναι η διασκέδαση και αυτό το παιχνίδι

Διαβάστε περισσότερα

Παρουσίαση Περιεχομένων. Σκοπός του Παιχνιδιού. Προετοιμασία

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

Διαβάστε περισσότερα

ΣΚΗΝΙΚΟ ΥΠΟΒΑΘΡΑ ΑΡΧΙΚΗ

ΣΚΗΝΙΚΟ ΥΠΟΒΑΘΡΑ ΑΡΧΙΚΗ Scratch 1. Σκηνικό (Αρχική Έχασες Κέρδισες). Η πρώτη μου δουλειά όταν φτιάχνω ένα παιχνίδι είναι πάω στο ΣΚΗΝΙΚΟ - ΥΠΟΒΑΘΡΑ και να σχεδιάσω (ή να αντιγράψω μια εικόνα από το διαδίκτυο ή από οπουδήποτε

Διαβάστε περισσότερα

Δομή Επιλογής. 1. Αν ο σκύλος ακουμπήσει ένα κόκαλο τότε το κόκαλο εξαφανίζεται και ο παίκτης κερδίζει 10 πόντους.

Δομή Επιλογής. 1. Αν ο σκύλος ακουμπήσει ένα κόκαλο τότε το κόκαλο εξαφανίζεται και ο παίκτης κερδίζει 10 πόντους. Τάξη : Α Λυκείου Λογισμικό : Scratch Ενδεικτική Διάρκεια : 45 λεπτά Δομή Επιλογής Μία από τις πιο σημαντικές δομές που χρησιμοποιείται στον προγραμματισμό είναι η δομή επιλογής. Η δομή αυτή μας δίνει την

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

The Mind. Mind σε ένα νέο επίπεδο.επιλέξτε ένα από τα δύο μουσικά κομμάτια στο CD. Με το πρώτο κομμάτι

The Mind. Mind σε ένα νέο επίπεδο.επιλέξτε ένα από τα δύο μουσικά κομμάτια στο CD. Με το πρώτο κομμάτι The Mind Παίκτες: 2-4 Ηλικία: 8 ετών και άνω Διάρκεια: περίπου 20 λεπτά Wolfgang Warsch Ας γίνουμε ένα...! Όσο προχωρείτε σε αυτό το πείραμα, τόσο περισσότερο βιώνετε το The Mind σε μια νέα διάσταση. Λαμβάνετε

Διαβάστε περισσότερα

Θεωρία Λήψης Αποφάσεων

Θεωρία Λήψης Αποφάσεων Θεωρία Λήψης Αποφάσεων Ενότητα 5: Πληροφορημένη Αναζήτηση και Εξερεύνηση Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.)

Διαβάστε περισσότερα

Περιεχόμενα 1 Scriptorium (Ταμπλό Αξίας Κατηγορίας) 5 εξάπλευρα ζάρια 87 κάρτες

Περιεχόμενα 1 Scriptorium (Ταμπλό Αξίας Κατηγορίας) 5 εξάπλευρα ζάρια 87 κάρτες Εισαγωγή Στο Biblios, αναλαμβάνετε το ρόλο ενός ηγούμενου, επικεφαλής ενός μοναστηριού την εποχή του Μεσαίωνα. Προσπαθώντας να δημιουργήσετε την εντυπωσιακότερη βιβλιοθήκη, συναγωνίζεστε με άλλους ηγούμενους

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2015-2016 Θέμα Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις προτάσεις 1-4 και δίπλα τη λέξη ΣΩΣΤΟ,

Διαβάστε περισσότερα

6η Δραστηριότητα. Ναυμαχία Αλγόριθμοι αναζήτησης. Περίληψη. Αντιστοιχία με το σχολικό πρόγραμμα * Ικανότητες. Ηλικία. Υλικά

6η Δραστηριότητα. Ναυμαχία Αλγόριθμοι αναζήτησης. Περίληψη. Αντιστοιχία με το σχολικό πρόγραμμα * Ικανότητες. Ηλικία. Υλικά 6η Δραστηριότητα Ναυμαχία Αλγόριθμοι αναζήτησης Περίληψη Συχνά ζητάμε από τους υπολογιστές να ψάξουν πληροφορίες στο εσωτερικό μεγάλων αρχείων δεδομένων. Για να το καταφέρουν, απαιτούνται ταχείες και αποτελεσματικές

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire

Αυτόνομοι Πράκτορες. Εργασία εξαμήνου. Value Iteration και Q- Learning για Peg Solitaire Αυτόνομοι Πράκτορες Εργασία εξαμήνου Value Iteration και Q- Learning για Peg Solitaire Μαρίνα Μαυρίκου 2007030102 1.Εισαγωγικά για το παιχνίδι Το Peg Solitaire είναι ένα παιχνίδι το οποίο παίζεται με ένα

Διαβάστε περισσότερα

Περιεχόμενα. Σκοπός του παιχνιδιού. Ένα παιχνίδι του Dirk Henn για 2-6 παίκτες

Περιεχόμενα. Σκοπός του παιχνιδιού. Ένα παιχνίδι του Dirk Henn για 2-6 παίκτες Ένα παιχνίδι του Dirk Henn για 2-6 παίκτες Οι καλύτεροι αρχιτέκτονες της Ευρώπης και της Αραβίας θέλουν να επιδείξουν τις ικανότητές τους. Προσλάβετε τις καλύτερες ομάδες κτιστών και προσπαθήστε να έχετε

Διαβάστε περισσότερα

του προγράμματος diagrama_rohs.zip )

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

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεωρία Παιγνίων και Αποφάσεων Διδάσκων: Ε. Μαρκάκης, Εαρινό εξάμηνο 2015 Λύσεις 2η σειράς ασκήσεων Προθεσμία παράδοσης: 18 Μαίου 2015 Πρόβλημα 1. (14

Διαβάστε περισσότερα

Διαδρομών Μέρμηγκα Μερμηγκιών Τζίτζικα Τζίτζικα Επιλογής Επιλογής Φθινόπωρο Φθινόπωρο Προμηθειών Χειμώνα Δύναμης Χειμώνα Φθινόπωρο Χειμώ- νας

Διαδρομών Μέρμηγκα Μερμηγκιών Τζίτζικα Τζίτζικα Επιλογής Επιλογής Φθινόπωρο Φθινόπωρο Προμηθειών Χειμώνα Δύναμης Χειμώνα Φθινόπωρο Χειμώ- νας Για να προετοιμαστείτε καλύτερα για τον χειμώνα, παίξτε εναλλάξ τον Τζίτζικα και τον Μέρμηγκα, και μαζέψτε τις προμήθειες που θα σας φέρουν τη νίκη! Προσέξτε όμως τους ληστές! 48 στρόγγυλες κάρτες Διαδρομών

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 3η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

Εφαρμογή δημιουργίας σεναρίων Sctatch

Εφαρμογή δημιουργίας σεναρίων Sctatch Εφαρμογή δημιουργίας σεναρίων Sctatch Δημιουργία Σεναρίων με το Scratch - τάξη Β Το Scratch είναι μια γλώσσα οπτικού προγραμματισμού οδηγούμενου από γεγονότα. Τα έργα (project) στο Scratch οικοδομούνται

Διαβάστε περισσότερα

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 8: Παίγνια πλήρους και ελλιπούς πληροφόρησης Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

Διαβάστε περισσότερα

Κεφάλαιο 5. Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων. Τεχνητή Νοηµοσύνη - Β' Έκδοση

Κεφάλαιο 5. Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων. Τεχνητή Νοηµοσύνη - Β' Έκδοση Κεφάλαιο 5 Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων Τεχνητή Νοηµοσύνη - Β' Έκδοση Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Σακελλαρίου Αλγόριθµοι Αναζήτησης σε Παίγνια ύο Αντιπάλων

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΠΜΣ «ΜΑΘΗΜΑΤΙΚΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΤΩΝ ΑΠΟΦΑΣΕΩΝ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ 2006-2007 2η Σειρά Ασκήσεων ΑΠΑΝΤΗΣΕΙΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΠΜΣ «ΜΑΘΗΜΑΤΙΚΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΤΩΝ ΑΠΟΦΑΣΕΩΝ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ 2006-2007 2η Σειρά Ασκήσεων ΑΠΑΝΤΗΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΙΑΤΜΗΜΑΤΙΚΟ ΠΜΣ «ΜΑΘΗΜΑΤΙΚΑ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΤΩΝ ΑΠΟΦΑΣΕΩΝ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ 2006-2007 2η Σειρά Ασκήσεων ΑΠΑΝΤΗΣΕΙΣ 1. ίνεται το γνωστό πρόβληµα των δύο δοχείων: «Υπάρχουν δύο δοχεία

Διαβάστε περισσότερα

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

Διαβάστε περισσότερα

Η ΕΠΕΚΤΑΣΗ ΚΑΡΤΩΝ. Μετάφραση / Ενσωμάτωση: Νίκος Χριστάκης για την Re M v.3

Η ΕΠΕΚΤΑΣΗ ΚΑΡΤΩΝ. Μετάφραση / Ενσωμάτωση: Νίκος Χριστάκης για την Re M v.3 Η ΕΠΕΚΤΑΣΗ ΚΑΡΤΩΝ Μετάφραση / Ενσωμάτωση: Νίκος Χριστάκης για την Re M v.3 Ευχαριστώ τον Don Riddle για τη βασική ιδέα της επέκτασης αυτής, αλλά και για πολλές φανταστικές ιδέες για κάρτες! Επίσης ευχαριστώ

Διαβάστε περισσότερα

Θεωρία Παιγνίων και Αποφάσεων. Ενότητα 5: Εύρεση σημείων ισορροπίας σε παίγνια μηδενικού αθροίσματος. Ε. Μαρκάκης. Επικ. Καθηγητής

Θεωρία Παιγνίων και Αποφάσεων. Ενότητα 5: Εύρεση σημείων ισορροπίας σε παίγνια μηδενικού αθροίσματος. Ε. Μαρκάκης. Επικ. Καθηγητής Θεωρία Παιγνίων και Αποφάσεων Ενότητα 5: Εύρεση σημείων ισορροπίας σε παίγνια μηδενικού αθροίσματος Ε. Μαρκάκης Επικ. Καθηγητής Περίληψη Παίγνια μηδενικού αθροίσματος PessimisIc play Αμιγείς max-min και

Διαβάστε περισσότερα

Πώς το λένε Computer game στο Scratch

Πώς το λένε Computer game στο Scratch Πώς το λένε Computer game στο Scratch Μιχαηλία Γκαλλέ¹, Χριστόδουλος Σατραζέμης², 1 Μαθήτρια Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου mixaelagalle@gmail.com 2 Μαθητής Γ Τάξης, 2 ο Γυμνάσιο Ευόσμου linosatra@gmail.com

Διαβάστε περισσότερα

Σκοπός του παιχνιδιού. Περιεχόμενα

Σκοπός του παιχνιδιού. Περιεχόμενα Ένα συνεργατικό παιχνίδι μνήμης για 3 έως 6 παίκτες, 7 ετών και άνω. Ο Τομ σκαρφάλωσε στην κορυφή ενός δέντρου, για να δεί αν μπορούσε να ανακαλύψει κάτι. Κοιτάζοντας προς κάθε μεριά, είδε τουλάχιστον

Διαβάστε περισσότερα

Λονδίνο, 17 Νοεμβρίου 1896

Λονδίνο, 17 Νοεμβρίου 1896 Λονδίνο, 17 Νοεμβρίου 1896 Ο ι δρόμοι της πόλης είναι σχεδόν έρημοι και τους διασχίζουν μόνο πεζοί με σκοπό να φτάσουν στα ζεστά τους σπίτια όσο γρηγορότερα μπορούν. Αλλά στα μυστικά σαλόνια του πολυτελούς

Διαβάστε περισσότερα

Ποιές εντολές του Scratch πρέπει να ξέρω;

Ποιές εντολές του Scratch πρέπει να ξέρω; Ποιές εντολές του Scratch πρέπει να ξέρω; ΕΝΤΟΛΕΣ ΚΙΝΗΣΗΣ κινήσου χ βήματα στρίψε χ μοίρες στρίψε χ μοίρες στρίψε προς την κατεύθυνση των χ μοιρών στρίψε προς το [] πήγαινε στη θέση χ:[] και y:[] πήγαινε

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e Άσκηση 1 Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e Υπάρχουν τρία μαύρα τετραγωνάκια (b), τρία άσπρα (w) και ένα κενό (e). Η σπαζοκεφαλιά έχει τις ακόλουθες

Διαβάστε περισσότερα

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΑΡΧΗ 1 ης ΣΕΛΙΔΑΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Επιμέλεια: Ομάδα Διαγωνισμάτων από Το στέκι των πληροφορικών Θέμα 1 ο Α. Να χαρακτηρίσετε κάθε μία από

Διαβάστε περισσότερα

Ε Δ Δ Δ Ο Δ B Τ Π. Το παιχνίδι αυτό είναι επέκταση και απαιτεί τη χρήση των παρακάτω κομματιών μιας από τις βασικές εκδόσεις του Ticket to Ride:

Ε Δ Δ Δ Ο Δ B Τ Π. Το παιχνίδι αυτό είναι επέκταση και απαιτεί τη χρήση των παρακάτω κομματιών μιας από τις βασικές εκδόσεις του Ticket to Ride: Το Εγχειρίδιο αυτό περιγράφει τις αλλαγές στο παιχνίδι, σχετικά με το ομαδικό παιχνίδι του χάρτη της Μυθικής Ασίας (Legendary Asia), υποθέτοντας ότι είστε εξοικειωμένοι με τους κανόνες του βασικού Ticket

Διαβάστε περισσότερα

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε "Ναι" Τέλος Α2

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε Ναι Τέλος Α2 Διδακτική πρόταση ΕΝΟΤΗΤΑ 2η, Θέματα Θεωρητικής Επιστήμης των Υπολογιστών Κεφάλαιο 2.2. Παράγραφος 2.2.7.4 Εντολές Όσο επανάλαβε και Μέχρις_ότου Η διαπραγμάτευση των εντολών επανάληψης είναι σημαντικό

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ

ΠΕΡΙΕΧΟΜΕΝΑ ΤΟΥ ΠΑΙΧΝΙΔΙΟΥ Η ΔΙΑΣΚΕΔΑΣΗ ΣΥΝΕΧΙΖΕΤΑΙ ΜΕΧΡΙ ΤΗΝ ΤΕΛΕΥΤΑΙΑ ΖΑΡΙΑ! Αυτή είναι μία επέκταση μόνο για το παιχνίδι της alea Las Vegas. Χρησιμοποιήστε τους κανόνες του βασικού παιχνιδιού με τις παρακάτω προσθήκες, επεκτάσεις

Διαβάστε περισσότερα

Επίλυση προβλημάτων με αναζήτηση

Επίλυση προβλημάτων με αναζήτηση Επίλυση προβλημάτων με αναζήτηση Περιεχόμενα Μέθοδοι (πράκτορες) επίλυσης προβλημάτων Προβλήματα και Λύσεις Προβλήματα παιχνίδια Προβλήματα του πραγματικού κόσμου Αναζήτηση λύσεων Δέντρο αναζήτησης Στρατηγικές

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ.

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ. ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ. Το πρώτο πράγμα που βλέπουμε μόλις ξεκινάμε το παιχνίδι είναι μια λίστα με όλα τα διαθέσιμα βίντεο με τα οποία μπορούμε να εξασκηθούμε. Σε αυτή περιλαμβάνονται επίσης πληροφορίες

Διαβάστε περισσότερα

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον. τελική επανάληψη /4/2015 1

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον. τελική επανάληψη /4/2015 1 Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον τελική επανάληψη 2015 7/4/2015 1 Α -Β θέμα 40Μ+20Μ Ορθά συντακτικώς γραμμένες προτάσεις, λέξεις κλειδιά, ολοκληρωμένες φράσεις Χρήση κριτικής σκέψης σε

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 Επιμέλεια: Ομάδα Διαγωνισμάτων από το Στέκι των Πληροφορικών Θέμα Α A1. Να γράψετε στο τετράδιό σας τους

Διαβάστε περισσότερα

Τσάπελη Φανή ΑΜ: 2004030113. Ενισχυτική Μάθηση για το παιχνίδι dots. Τελική Αναφορά

Τσάπελη Φανή ΑΜ: 2004030113. Ενισχυτική Μάθηση για το παιχνίδι dots. Τελική Αναφορά Τσάπελη Φανή ΑΜ: 243113 Ενισχυτική Μάθηση για το παιχνίδι dots Τελική Αναφορά Περιγραφή του παιχνιδιού Το παιχνίδι dots παίζεται με δύο παίχτες. Έχουμε έναν πίνακα 4x4 με τελείες, και σκοπός του κάθε παίχτη

Διαβάστε περισσότερα

Πληροφορική 2. Τεχνητή νοημοσύνη

Πληροφορική 2. Τεχνητή νοημοσύνη Πληροφορική 2 Τεχνητή νοημοσύνη 1 2 Τι είναι τεχνητή νοημοσύνη; Τεχνητή νοημοσύνη (AI=Artificial Intelligence) είναι η μελέτη προγραμματισμένων συστημάτων τα οποία μπορούν να προσομοιώνουν μέχρι κάποιο

Διαβάστε περισσότερα

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη 01 Εισαγωγή Μια απλή και γρήγορη εισαγωγή Το Splunk > είναι ένα πρόγραμμα το οποίο πρωτοεμφανίστηκε στην αγορά το 2003 και αποτελεί ένα πρόγραμμα εξόρυξης

Διαβάστε περισσότερα

Σχετική κίνηση αντικειμένων

Σχετική κίνηση αντικειμένων Σχετική κίνηση αντικειμένων Πως θα μπορούσε να κινηθεί ένας χαρακτήρας προς την έξοδο ενός λαβύρινθου; Πως θα μπορούσε το αυτοκινητάκι μας να κινείται μέσα στην πίστα; Πως θα μπορούσαμε να αναπαραστήσουμε

Διαβάστε περισσότερα

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

Τα Φύλλα Εργασίας αφορά την εκμάθηση της εκτέλεσης της δομής επιλογής μέσα από το περιβάλλον του SCRATCH. 15. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ Τα Φύλλα Εργασίας αφορά την εκμάθηση της εκτέλεσης της δομής επιλογής μέσα από το περιβάλλον του SCRATCH. 16. ΑΞΙΟΛΟΓΗΣΗ Οι βασικές διαδικασίες αξιολόγησης προέρχονται

Διαβάστε περισσότερα

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο 2014-2015 Πρώτη Σειρά Ασκήσεων (Υποχρεωτική, 25% του συνολικού βαθμού στο μάθημα) Ημερομηνία Ανακοίνωσης: 22/10/2014 Ημερομηνία Παράδοσης: Μέχρι 14/11/2014 23:59

Διαβάστε περισσότερα

Το Μπαούλο του κυρ Γιάννη

Το Μπαούλο του κυρ Γιάννη Εισαγωγή Το Μπαούλο του κυρ Γιάννη Ο κυρ Γιάννης έχει κληρονομιά ένα παλιό μπαούλο με ό,τι αντικείμενα μπορείς να φανταστείς! Τα ανίψια του, ο Λευτεράκης και η Βασούλα, θέλουν να τα δουν, αλλά για να τα

Διαβάστε περισσότερα

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

Διαβάστε περισσότερα

App Inventor 3ο Μάθημα (Ζάρια - επέκταση)

App Inventor 3ο Μάθημα (Ζάρια - επέκταση) App Inventor 3ο Μάθημα (Ζάρια - επέκταση) Μεταβλητές Δομή επιλογής If then Λογικές συνθήκες Στο μάθημα αυτό θα επεκτείνουμε την εφαρμογή ζάρια που αναπτύξαμε στο πρώτο μάθημα ώστε να εμφανίζει μήνυμα επιτυχίας

Διαβάστε περισσότερα

Δεν υπάρχει πολύς χρόνος για να τα καταφέρουν, παρά µόνο επτά ηµέρες...

Δεν υπάρχει πολύς χρόνος για να τα καταφέρουν, παρά µόνο επτά ηµέρες... To «Mysterium» είναι ένα συνεργατικό παιχνίδι για 2-7 παίκτες. Ένας παίκτης αναλαµβάνει το ρόλο του Φαντάσµατος που κατοικεί στην εγκαταλελειµµένη έπαυλη, ενώ οι υπόλοιποι είναι Μέντιουµ, που έχει προσκαλέσει

Διαβάστε περισσότερα

Ορολογία Αλγόριθμος, υπολογιστική σκέψη, αλγοριθμική σκέψη, αποδοτικότητα, δοκιμή.

Ορολογία Αλγόριθμος, υπολογιστική σκέψη, αλγοριθμική σκέψη, αποδοτικότητα, δοκιμή. Το παζλ ανταλλαγής Ηλικίες: 7 ενήλικες Προαπαιτούμενες δεξιότητες: Καμία Χρόνος: 50-60 λεπτά Μέγεθος ομάδας: 8 με 30 Εστίαση Τι είναι αλγόριθμος; Δοκιμή Αποδοτικότητα αλγορίθμων Υπολογιστική και αλγοριθμική

Διαβάστε περισσότερα

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΑΝΑΛΥΣΗ ΜΕΝΟΥ ΕΦΑΡΜΟΓΗΣ... 4 2. ΕΠΕΞΗΓΗΣΗ ΚΕΝΤΡΙΚΟΥ ΜΕΝΟΥ ΚΑΡΤΕΛΑΣ... 5 3. ΔΗΜΙΟΥΡΓΙΑ ΠΕΛΑΤΗ... 6 4. ΑΝΑΖΗΤΗΣΗ ΠΕΛΑΤΗ... 6 5. ΕΠΕΞΕΡΓΑΣΙΑ/ΔΙΑΓΡΑΦΗ

Διαβάστε περισσότερα

2-5 Παίκτες - Ηλικία 13+ - 60 λεπτά

2-5 Παίκτες - Ηλικία 13+ - 60 λεπτά Το Cinque Terre, είναι ένα απότομο παράκτιο κομμάτι της Ιταλικής Ριβιέρας και αποτελείται από πέντε χωριά. Τα χωριά αυτά είναι γνωστά για την ομορφιά, την κουλτούρα και το φαγητό τους, αλλά και το γεγονός

Διαβάστε περισσότερα

7.Α.1 Παρουσιάσεις. 7.Α.2 Περιγραφή περιεχομένων της εφαρμογής

7.Α.1 Παρουσιάσεις. 7.Α.2 Περιγραφή περιεχομένων της εφαρμογής Μάθημα 7ο Πολυμέσα 7.Α.1 Παρουσιάσεις Οι παρουσιάσεις είναι μια εφαρμογή που χρησιμεύει στην παρουσίαση των εργασιών μας. Αποτελούν μια συνοπτική μορφή των εργασιών μας. Μέσω δημιουργίας διαφανειών, μορφοποιήσεων

Διαβάστε περισσότερα

Επίλυση Προβλημάτων 1

Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης Αναζήτηση πρώτα σε βάθος Αναζήτηση πρώτα σε πλάτος (ΒFS) Αλγόριθμοι ευρετικής αναζήτησης

Διαβάστε περισσότερα