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

Μέγεθος: 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

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

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

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

Τεχνητή Νοημοσύνη. 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η έκδοση, Β. Γκιούρδας

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μαθηματικά των Υπολογιστών και των Αποφάσεων Τεχνητή Νοημοσύνη 1η Σειρά Ασκήσεων

Μαθηματικά των Υπολογιστών και των Αποφάσεων Τεχνητή Νοημοσύνη 1η Σειρά Ασκήσεων Π Π Τ Μ Τ Μ Η/Υ Π Δ Μ Π Μαθηματικά των Υπολογιστών και των Αποφάσεων Τεχνητή Νοημοσύνη 1η Σειρά Ασκήσεων Φοιτητής: Ν. Χασιώτης (AM: 0000) Καθηγητής: Ι. Χατζηλυγερούδης 22 Οκτωβρίου 2010 ΑΣΚΗΣΗ 1. Δίνεται

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

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

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

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

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

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

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

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

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

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ C Προγραμματιστικές Ασκήσεις, Φυλλάδιο Εκφώνηση: 9/3/0 Παράδοση: 5/4/0,.59 Άσκηση 0 η : Το πρόβλημα της βελόνας του Buffon Θέμα της εργασίας

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

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

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

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

ΠΡΟΕΤΟΙΜΑΣΙΑ ΠΑΡΑΔΕΙΓΜΑ ΠΡΟΕΤΟΙΜΑΣΙΑΣ ΓΙΑ 4 ΠΑΙΚΤΕΣ: 1. ΠΡΟΕΤΟΙΜΑΣΙΑ ΤΩΝ ΝΗΣΙΩΝ

ΠΡΟΕΤΟΙΜΑΣΙΑ ΠΑΡΑΔΕΙΓΜΑ ΠΡΟΕΤΟΙΜΑΣΙΑΣ ΓΙΑ 4 ΠΑΙΚΤΕΣ: 1. ΠΡΟΕΤΟΙΜΑΣΙΑ ΤΩΝ ΝΗΣΙΩΝ ΠΡΟΕΤΟΙΜΑΣΙΑ Προετοιμασία νησιών για 2 παίκτες: Προετοιμασία νησιών για 3 παίκτες: Η περιοχή των νησιών αποτελείται από 9 πλακίδια νησιών (επιλεγμένα τυχαία) και 4 κομμάτια πλαισίου. Η περιοχή των νησιών

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

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

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

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

BRIDGE ÑÉÓÔÉÍÁ ÓÕÑÁÊÏÐÏÕËÏÕ

BRIDGE ÑÉÓÔÉÍÁ ÓÕÑÁÊÏÐÏÕËÏÕ BRIDGE ÃÍÙÑÉÌÉÁ ÌÅ ÔÏ ÁÈËÇÌÁ ÑÉÓÔÉÍÁ ÓÕÑÁÊÏÐÏÕËÏÕ Ξεκινώντας να παίζουμε μπριτζ Γνωριμία με το παιχνίδι Το μπριτζ παίζεται με 4 παίκτες: Τον Βορά, την Ανατολή, το Νότο και τη Δύση! Ο Βοράς είναι συμπαίκτης

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

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

Βάσεις δεδομένων (Access)

Βάσεις δεδομένων (Access) Βάσεις δεδομένων (Access) Όταν εκκινούμε την Access εμφανίζεται το παρακάτω παράθυρο: Για να φτιάξουμε μια νέα ΒΔ κάνουμε κλικ στην επιλογή «Κενή βάση δεδομένων» στο Παράθυρο Εργασιών. Θα εμφανιστεί το

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

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΠΡΟΣΟΜΟΙΩΣΗ ΑΠΟΛΥΤΗΡΙΩΝ ΕΞΕΤΑΣΕΩΝ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΔΕΥΤΕΡΑ 11 ΑΠΡΙΛΙΟΥ 2011 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΙΛΟΓΗΣ 1) Ποιοι είναι οι τελεστές σύγκρισης και

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

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

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

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

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας 4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας 4.1.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας από βάση δεδομένων Όταν εκκινήσουμε τον Discoverer εμφανίζεται στην οθόνη μας το παράθυρο διαλόγου του βοηθητικού προγράμματος

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

Επέκταση παραλλαγών 4, 5 και 6 του Fresco, για 2-4 παίκτες ηλικίας 10 ετών και άνω

Επέκταση παραλλαγών 4, 5 και 6 του Fresco, για 2-4 παίκτες ηλικίας 10 ετών και άνω Επέκταση παραλλαγών 4, 5 και 6 του Fresco, για 2-4 παίκτες ηλικίας 10 ετών και άνω Στο εγχειρίδιο αυτό, θα βρείτε τους κανόνες της επέκτασης παραλλαγών 4, 5 και 6. Μόνο οι αλλαγές στους κανόνες και τυχόν

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

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ: ΚΑΤΕΥΘΥΝΣΗ: ΜΑΘΗΜΑ: ΘΕΜΑ Α Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ (2ος Κύκλος) ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Ηµεροµηνία: Κυριακή 22 Απριλίου 2012 ΕΚΦΩΝΗΣΕΙΣ Α1. Να γράψετε στο τετράδιό

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012 ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012 ΘΕΜΑ Α Α1. Δίνονται τα παρακάτω τμήματα αλγορίθμου σε φυσική γλώσσα. 1. Αν το ποσό των αγορών(ποσο_αγορων) ενός πελάτη είναι μεγαλύτερο

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

ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ

ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ Μια αυστηρά καθορισµένη ακολουθία ενεργειών µε σκοπό τη λύση ενός προβλήµατος. Χαρακτηριστικά οθέν πρόβληµα: P= Επιλυθέν πρόβληµα: P s

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

Εισαγωγή. Περιεχόμενα. Μέσα στο Κουτί. Εισαγωγή... 2. Στόχος... 2. Μέσα στο Κουτί... 2. Οι Κάρτες... 3. Περιγραφή των Καρτών... 3. Επιβίβαση!...

Εισαγωγή. Περιεχόμενα. Μέσα στο Κουτί. Εισαγωγή... 2. Στόχος... 2. Μέσα στο Κουτί... 2. Οι Κάρτες... 3. Περιγραφή των Καρτών... 3. Επιβίβαση!... Αριθμός Παικτών: 2-4 Χρόνος Παιχνιδιού: 45 λεπτά Ηλικίες: 12 και άνω Περιεχόμενα Εισαγωγή................................... 2 Στόχος..................................... 2 Μέσα στο Κουτί...............................

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

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων 2013-2014. Σωτήρης Γυφτόπουλος

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων 2013-2014. Σωτήρης Γυφτόπουλος Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων 2013-2014 Σωτήρης Γυφτόπουλος Κανόνες του Facility Game (1/4) Στο Facility Game υπάρχει ένα σύνολο κόμβων που συνδέονται «σειριακά» και κάθε κόμβος

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

ΠΛΗ 513-Αυτόνομοι Πράκτορες Χειμερινό εξάμηνο 2012 Εφαρμογή αλγορίθμων ενισχυτικής μάθησης στο παιχνίδι Βlackjack. Χλης Νικόλαος-Κοσμάς

ΠΛΗ 513-Αυτόνομοι Πράκτορες Χειμερινό εξάμηνο 2012 Εφαρμογή αλγορίθμων ενισχυτικής μάθησης στο παιχνίδι Βlackjack. Χλης Νικόλαος-Κοσμάς ΠΛΗ 513-Αυτόνομοι Πράκτορες Χειμερινό εξάμηνο 2012 Εφαρμογή αλγορίθμων ενισχυτικής μάθησης στο παιχνίδι Βlackjack Χλης Νικόλαος-Κοσμάς Περιγραφή παιχνιδιού Βlackjack: Σκοπός του παιχνιδιού είναι ο παίκτης

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

Βάσεις δεδομένων (Access)

Βάσεις δεδομένων (Access) Βάσεις δεδομένων (Access) Όταν εκκινούμε την Access εμφανίζεται το παρακάτω παράθυρο: Κουμπί Κενή βάση δεδομένων Κουμπί του Office Για να φτιάξουμε μια νέα ΒΔ κάνουμε κλικ στο κουμπί «Κενή βάση δεδομένων»

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

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

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

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Σενάριο 17: Παιχνίδι μνήμης με εικόνες Σενάριο 17: Παιχνίδι μνήμης με εικόνες Φύλλο Εργασίας Τίτλος: Παιχνίδι μνήμης με εικόνες Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω, Συνθετικές

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

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι Λειτουργικά Συστήματα 1 Λογισμικό του Υπολογιστή Για να λειτουργήσει ένας Η/Υ εκτός από το υλικό του, είναι απαραίτητο και το λογισμικό Το σύνολο των προγραμμάτων που συντονίζουν τις λειτουργίες του υλικού

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

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Ανάλυση - Απόδοση Αλγορίθμων Έλεγχος Αλγορίθμων. Απόδοση Προγραμμάτων. Χωρική/Χρονική Πολυπλοκότητα. Ασυμπτωτικός Συμβολισμός. Παραδείγματα. Αλγόριθμοι: Βασικές Έννοιες

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

Ανάλυση Δεδομένων με χρήση του Στατιστικού Πακέτου R

Ανάλυση Δεδομένων με χρήση του Στατιστικού Πακέτου R Ανάλυση Δεδομένων με χρήση του Στατιστικού Πακέτου R, Επίκουρος Καθηγητής, Τομέας Μαθηματικών, Σχολή Εφαρμοσμένων Μαθηματικών και Φυσικών Επιστημών, Εθνικό Μετσόβιο Πολυτεχνείο. Περιεχόμενα Εισαγωγή στο

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

Ε ανάληψη. Παιχνίδια παιχνίδια ως αναζήτηση. Βέλτιστες στρατηγικές στρατηγική minimax. Βελτιώσεις κλάδεµα α-β

Ε ανάληψη. Παιχνίδια παιχνίδια ως αναζήτηση. Βέλτιστες στρατηγικές στρατηγική minimax. Βελτιώσεις κλάδεµα α-β ΠΛΗ 405 Τεχνητή Νοηµοσύνη Παιχνίδια Τύχης Παιχνίδια Ατελούς Πληροφόρησης Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Παιχνίδια παιχνίδια ως αναζήτηση Βέλτιστες στρατηγικές

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

Extensive Games with Imperfect Information

Extensive Games with Imperfect Information Extensive Games with Imperfect Information Παύλος Στ. Εφραιµίδης Τοµέας Λογισµικού και Ανάπτυξης Εφαρµογών Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εκτεταµένα παίγνια µε ατελή πληροφόρηση

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

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

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

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

Δραστηριότητα: Εγκλεισμός

Δραστηριότητα: Εγκλεισμός Δραστηριότητα: Εγκλεισμός Ηλικίες στις οποίες έχει χρησιμοποιηθεί με επιτυχία: Προαπαιτούμενες Ικανότητες: Χρόνος: Εστίαση Μέγεθος Ομάδας 11 - ενήλικες Καμία Τι είναι αλγόριθμος Αλγόριθμοι αναζήτησης:

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

ΕΞΕΡΕΥΝΗΣΤΕ ΤΗ ΜΥΣΤΗΡΙΩΔΗ ΝΗΣΟ

ΕΞΕΡΕΥΝΗΣΤΕ ΤΗ ΜΥΣΤΗΡΙΩΔΗ ΝΗΣΟ ΕΞΕΡΕΥΝΗΣΤΕ ΤΗ ΜΥΣΤΗΡΙΩΔΗ ΝΗΣΟ ΕΙΣΑΓΩΓΗ Εξερευνήστε τη μυστηριώδη νήσο La Isla, και κυνηγήστε ζώα που μέχρι πρότινος θεωρούνταν εξαφανισμένα. Το ευγενές Ντόντο, το προσεκτικό Γιγάντιο Φόσα, τον άπιαστο

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

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010 Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010 Δημιουργία ενός απλού παιχνιδιού με το Gamemaker (μετάφραση από το http://www.stuffucanuse.com/downloads/gamemaker-introductionlessons/free_game_downloads_gamemaker.htm)

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

Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών. ορισµός και χαρακτηριστικά Ε ίλυση ροβληµάτων ικανο οίησης εριορισµών

Ε ανάληψη. Προβλήµατα ικανο οίησης εριορισµών. ορισµός και χαρακτηριστικά Ε ίλυση ροβληµάτων ικανο οίησης εριορισµών ΠΛΗ 405 Τεχνητή Νοηµοσύνη Αναζήτηση µε Αντι αλότητα Adversarial Search Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Ε ανάληψη Προβλήµατα ικανο οίησης εριορισµών ορισµός και

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

Θέμα 1ο ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Π ΧΑΡΑΚΤΗΡΕΣ:Χ

Θέμα 1ο ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Π ΧΑΡΑΚΤΗΡΕΣ:Χ ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΤΜΗΜΑ: ΤΣΙΜΙΣΚΗ &ΚΑΡΟΛΟΥ ΝΤΗΛ ΓΩΝΙΑ THΛ: 270727 222594 ΑΡΤΑΚΗΣ 12 - Κ ΤΟΥΜΠΑ THΛ: 919113 949422 ΗΜΕΡΟΜΗΝΙΑ:3/02/20 :3/02/2013 3 Θέμα 1ο Α Να απαντήσετε με Σ ή Λ στα παρακάτω: 1 τις Στατικές

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

Οδηγός των νέων δελτίων

Οδηγός των νέων δελτίων Οδηγός των νέων δελτίων 4-7 Νέα εποχή Η ΟΠΑΠ Α.Ε. στο πλαίσιο της δυναμικής της ανάπτυξης, προχωρά στην αναμόρφωση και ανανέωση των παιχνιδιών της. Με ακόμη πιο λειτουργικό σχεδιασμό, μοντέρνα εμφάνιση

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

Το παιχνίδι αυτό είναι επέκταση και απαιτεί τη χρήση των παρακάτω

Το παιχνίδι αυτό είναι επέκταση και απαιτεί τη χρήση των παρακάτω Το Εγχειρίδιο αυτό περιγράφει τις αλλαγές στους κανόνες, σχετικά με τον Χάρτη της Ινδίας. Υποτίθεται ότι είστε εξοικειωμένοι με τους βασικούς κανόνες του Ticket to Ride. Ε Ο χάρτης της Ινδίας είναι σχεδιασμένος

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

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

Μπορείτε τα δείτε βιντεάκι με τη διαδικασία εδώ: http://www.greektuts.net/greek-in-joomla/

Μπορείτε τα δείτε βιντεάκι με τη διαδικασία εδώ: http://www.greektuts.net/greek-in-joomla/ 1) Εμφάνιση ιστοσελίδας Ανοίγουμε το πρόγραμμα πλοήγησης (Firefox, Chrome, Internet Explorer κτλ) και στη γραμμή διευθύνσεων πληκτρολογούμε τη διεύθυνση http://localhost ή http://127.0.0.1. Αν δεν βλέπουμε

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

Εισαγωγή. Περιεχόμενα

Εισαγωγή. Περιεχόμενα Εισαγωγή Το 1878, το Βασιλικό Μουσείο του Βερολίνου ξεκίνησε την ανάθεση των ανασκαφών στην Πέργαμο, μια περιοχή της νυν Τουρκίας. Η πόλη έφτασε στην κορυφή της ανάπτυξής της γύρω στο 200 π.χ. (στα Λατινικά

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

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι Α λ γ ό ρ ι θ μ ο ι Αριθμητικοί τελεστές Οι αριθμητικοί τελεστές είναι: πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση +,-,*,/ ύψωση σε δύναμη ^ πηλίκο ακέραιης διαίρεσης δύο ακεραίων αριθμών div υπόλοιπο

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

Παράδειγμα σχεδιασμού και παρουσίασης μικροδιδασκαλίας

Παράδειγμα σχεδιασμού και παρουσίασης μικροδιδασκαλίας Παράδειγμα σχεδιασμού και παρουσίασης μικροδιδασκαλίας Στο τρίτο άρθρο αυτής της σειράς, η οποία αποτελεί μια πρώτη, μικρή απάντηση στις ανάγκες των εκπαιδευτών του σεμιναρίου της 12 ης & 13 ης Ιουνίου

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

3 ο εργαστήριο Scratch for NinjaCoders

3 ο εργαστήριο Scratch for NinjaCoders 3 ο εργαστήριο Scratch for NinjaCoders Τίτλος εφαρμογής: Space Invaders (Διαστημικοί εισβολείς) Περιγραφή στόχων, σενάριο εφαρμογής, παρουσίαση scratch, μεταβλητές, συμβάντα, προγραμματιστικές δομές 0

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

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

1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ

1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ 1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ Σελίδα 1 ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ... 2 ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ... 3 1 ο Βήμα: Δημιουργία νέας χρήσης.... 3 2 ο Βήμα: Εισαγωγή στην νέα χρήση... 3 3ο

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΘΕΜΑ Α Α1. Να χαρακτηρίσετε καθεμιά από τις προτάσεις που ακολουθούν γράφοντας στο τετράδιό σας, δίπλα από τον αριθμό κάθε πρότασης, το γράμμα Σ, αν αυτή

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

Πώς γίνεται το debug? Το debug γίνεται με δύο τρόπους, ως επί το πλείστον. Τουλάχιστον, εγώ δύο έμαθα, και αυτούς αναφέρω.

Πώς γίνεται το debug? Το debug γίνεται με δύο τρόπους, ως επί το πλείστον. Τουλάχιστον, εγώ δύο έμαθα, και αυτούς αναφέρω. Τι είναι το debug μαμα? Με απλά λόγια, debug (αποσφαλμάτωση αλλά που να κάθεσαι να το πεις), είναι η διαδικασία εντοπισμού και διόρθωσης σφαλμάτων που υπάρχουν σε κώδικα (ασχέτως γλώσσας προγραμματισμού).

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

f f x f x = x x x f x f x0 x

f f x f x = x x x f x f x0 x 1 Παράγωγος 1. για να βρω την παράγωγο της f σε διάστηµα χρησιµοποιώ βασικές παραγώγους και κανόνες παραγωγισης. για να βρω την παράγωγο σε σηµείο αλλαγής τύπου η σε άκρο διαστήµατος δουλεύω µε ορισµό

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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

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

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

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

1. Τα τμήματα της επιφάνειας εργασίας των Windows

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

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

GET SDI PORTAL v1. Οδηγός Βοήθειας

GET SDI PORTAL v1. Οδηγός Βοήθειας GET SDI PORTAL v1 Οδηγός Βοήθειας Μεταδεδομένα εγγράφου Στοιχείο/Element Τιμή/value Ημερομηνία/Date 2011-06-16 Τίτλος/Title GETSDIPortal_v1_Help_v1.0 Θέμα/Subject Οδηγός Βοήθειας Έκδοση/Version 1.0 Σελίδα

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

ΥΠΟΒΟΛΗ ΑΝΑΛΩΣΙΜΩΝ ΥΛΙΚΩΝ

ΥΠΟΒΟΛΗ ΑΝΑΛΩΣΙΜΩΝ ΥΛΙΚΩΝ ΥΠΟΒΟΛΗ ΑΝΑΛΩΣΙΜΩΝ ΥΛΙΚΩΝ Εισαγωγή γνωματεύσεων διαβητικών υλικών στο internet (eδαπυ) 1. Εισάγουμε τον κωδικό χρήστη και το συνθηματικό για να εισέλθουμε στην εφαρμογή https://apps.ika.gr/econsummedsuppl/faces/login.xhtml.

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

QS-LIS 2011 www.qslis-software.com

QS-LIS 2011 www.qslis-software.com QS-LIS 2011 www.qslis-software.com ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΜΕΤΡΗΣΕΙΣ ΑΠΟ ΕΙΚΟΝΕΣ ΣΧΕΔΙΟΥ Το περιεχόμενο του παρόντος τεύχους αποτελεί έργο επιστημονικού και πνευματικού μόχθου και πνευματικήν ιδιοκτησία του Γιάννη

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

Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου

Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου Προτεινόμενες εργασίες Προγραμματισμού Διαδικτύου Ιωάννης Γ. Τσούλος Εργασία Πρώτη - Αριθμομηχανή Με την χρήση του περιβάλλοντος AWT ή του SWING θα πρέπει να δημιουργηθεί αριθμομηχανή για την εκτέλεση

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

Περισσότερες λεπτομέρειες και τρελά βίντεο σας περιμένουν στο: skull-and-roses.com

Περισσότερες λεπτομέρειες και τρελά βίντεο σας περιμένουν στο: skull-and-roses.com Οι συμμορίες τσοπεράδων, επέλεγαν παραδοσιακά τους αρχηγούς τους με έναν διαγωνισμό που ονομάζεται Πίσω στο Πεζοδρόμιο, στον οποίο οι υποψήφιοι προσπαθούσαν να αντέξουν περισσότερο, όσο τους τραβούσε μια

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

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007 Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007 Πρόβλημα 1 Το πρώτο πρόβλημα λύνεται με τη μέθοδο του Δυναμικού Προγραμματισμού. Για να το λύσουμε με Δυναμικό Προγραμματισμό

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

Παλέτα Κίνηση. Καλό είναι πριν ξεκινήσετε το παρακάτω φυλλάδιο να έχετε παρακολουθήσει τα παρακάτω δύο videos: a) Εισαγωγή στο περιβάλλον του Scratch

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

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

Microsoft PowerPoint 2007

Microsoft PowerPoint 2007 Information Technology Services and Solutions Σύμβουλοι Μηχανογράφησης και Εκπαίδευσης Στεφ. Σκουλούδη 27, Καλλίπολη, Πειραιάς 210 45 38 177 http://www.itss.gr/ Microsoft PowerPoint 2007 Κωνσταντίνος Κωβαίος

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

ΠΛΗ 405 Τεχνητή Νοηµοσύνη 2006. Ε ανάληψη. πεπερασµένα χρονικά περιθώρια ανά κίνηση. απευθείας αξιολόγηση σε ενδιάµεσους κόµβους

ΠΛΗ 405 Τεχνητή Νοηµοσύνη 2006. Ε ανάληψη. πεπερασµένα χρονικά περιθώρια ανά κίνηση. απευθείας αξιολόγηση σε ενδιάµεσους κόµβους ΠΛΗ 405 Τεχνητή Νοηµοσύνη Παιχνίδια Τύχης Λογικοί Πράκτορες Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Ε ανάληψη Περιορισµοί χρόνου πεπερασµένα χρονικά περιθώρια ανά κίνηση

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

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης Φύλλα εργασίας MicroWorlds Pro Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο Β. Χ. Χρυσοχοΐδης Πρόεδρος Συλλόγου Εκπαιδευτικών Πληροφορικής Φλώρινας 2 «Σχεδίαση και ανάπτυξη δραστηριοτήτων

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

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0 Δομές Δεδομένων 5ο εξάμηνο Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse v1.0 Τις σημειώσεις κράτησαν και διαμόρφωσαν σε word οι: Κονδύλη Γαλήνη, ΑΜ 5576 Μάλλιου Χριστίνα, ΑΜ 5413

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

ΘΕΜΑ 1ο. Μονάδες 10. Β. ίνεται το παρακάτω τμήμα αλγορίθμου: Όσο Ι < 10 επανάλαβε Εμφάνισε Ι Ι Ι + 3 Τέλος_επανάληψης ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

ΘΕΜΑ 1ο. Μονάδες 10. Β. ίνεται το παρακάτω τμήμα αλγορίθμου: Όσο Ι < 10 επανάλαβε Εμφάνισε Ι Ι Ι + 3 Τέλος_επανάληψης ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΘΕΜΑ 1ο ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΤΕΤΑΡΤΗ 4 ΙΟΥΛΙΟΥ 2007 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ

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

Θεωρία παιγνίων Δημήτρης Χριστοφίδης Εκδοση 1η: Παρασκευή 3 Απριλίου 2015. Παραδείγματα Παράδειγμα 1. Δυο άτομα παίζουν μια παραλλαγή του σκακιού όπου σε κάθε βήμα ο κάθε παίκτης κάνει δύο κανονικές κινήσεις.

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

Αλγόριθμοι Τυφλής Αναζήτησης

Αλγόριθμοι Τυφλής Αναζήτησης Τεχνητή Νοημοσύνη 04 Αλγόριθμοι Τυφλής Αναζήτησης Αλγόριθμοι Τυφλής Αναζήτησης (Blind Search Algorithms) Εφαρμόζονται σε προβλήματα στα οποία δεν υπάρχει πληροφορία που να επιτρέπει αξιολόγηση των καταστάσεων.

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy Σ ε λ ί δ α 1 Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy Περιεχόμενα 1. Download Arebas Easy... 2 2. Εγκατάσταση Arebas Easy... 3 3. Εγγραφή στον Arebas Server... 7 4. Παραμετροποίηση Arebas Easy...

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

Μαζέψτε τις βαλίτσες σας, χαιρετήστε τον αχθοφόρο και επιβιβαστείτε!

Μαζέψτε τις βαλίτσες σας, χαιρετήστε τον αχθοφόρο και επιβιβαστείτε! Α πό τις απόκρημνες βουνοπλαγιές του Εδιμβούργου έως τα ηλιόλουστα λιμάνια της Κωνσταντινούπολης και από τα σοκάκια της Παμπλόνα μέχρι κάποιον ανεμοδαρμένο σταθμό του Βερολίνου, το Ticket to Ride σας μεταφέρει

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

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση ΚΕΦΑΛΑΙΟ 18 18 Μηχανική Μάθηση Ένα φυσικό ή τεχνητό σύστηµα επεξεργασίας πληροφορίας συµπεριλαµβανοµένων εκείνων µε δυνατότητες αντίληψης, µάθησης, συλλογισµού, λήψης απόφασης, επικοινωνίας και δράσης

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

Το 1ο βήμα ανανέωσης. Νέα οθόνη ΚΙΝΟ. Επίσημη οθόνη στατιστικών ΚΙΝΟ από τον ΟΠΑΠ

Το 1ο βήμα ανανέωσης. Νέα οθόνη ΚΙΝΟ. Επίσημη οθόνη στατιστικών ΚΙΝΟ από τον ΟΠΑΠ ΚΙΝΟ BONUS Το 1ο βήμα ανανέωσης Νέα οθόνη ΚΙΝΟ Επίσημη οθόνη στατιστικών ΚΙΝΟ από τον ΟΠΑΠ Το 2 ο βήμα ανανέωσης Δελτίο με 4 Βήματα για τον «Άπειρο Παίκτη» που παίζει πρώτη φορά Δελτίο με περισσότερες

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

Εργαστήριο Γραφικών. Βοηθητικό Υλικό για την εκπόνηση των εργασιών Αφορά την 1 η Εργαστηριακή Άσκηση

Εργαστήριο Γραφικών. Βοηθητικό Υλικό για την εκπόνηση των εργασιών Αφορά την 1 η Εργαστηριακή Άσκηση 1 Εργαστήριο Γραφικών Βοηθητικό Υλικό για την εκπόνηση των εργασιών Αφορά την 1 η Εργαστηριακή Άσκηση Μέρος B Σπύρος Συρμακέσης Καθηγητής syrma@teimes.gr Εύη Φαλιάγκα Δρ. Μηχανικός Η/Υ efaliaga@teimes.gr

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

Κεφάλαιο 6: Ζωγραφική

Κεφάλαιο 6: Ζωγραφική Κεφάλαιο 6: Ζωγραφική... Σε αυτό το κεφάλαιο: 6.1 Ζωγραφική 6.2 Απλά ζωγράφισε 6.3 Χρώμα, σκιά και μέγεθος 6.4 Παράδειγμα... «Ζωγραφίζω πράγματα που σκέφτομαι, όχι πράγματα που βλέπω!» (Πικάσο) 6.1 Ζωγραφική

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

Σενάριο 14: Προγραμματίζοντας ένα Ρομπότ ανιχνευτή

Σενάριο 14: Προγραμματίζοντας ένα Ρομπότ ανιχνευτή Σενάριο 14: Προγραμματίζοντας ένα Ρομπότ ανιχνευτή Ταυτότητα Σεναρίου Τίτλος: Προγραμματίζοντας ένα Ρομπότ ανιχνευτή Γνωστικό Αντικείμενο: Πληροφορική Διδακτική Ενότητα: Ελέγχω-Προγραμματίζω τον Υπολογιστή

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede

Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede Ένα έξυπνο παιχνίδι τοποθέτησης πλακιδίων για 2-5 παίκτες, 8 ετών και άνω από τον Klaus-Jurgen Wrede Η πόλη Καρκασόνε στα νότια της Γαλλίας, φημίζεται για τις ιδιαίτερες Ρωμαϊκές και Μεσαιωνικές της οχυρώσεις.

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

Εργαλεία Κατασκευής Παιχνιδιών Ι (Unreal Editor, Half Life, Doom Editor)

Εργαλεία Κατασκευής Παιχνιδιών Ι (Unreal Editor, Half Life, Doom Editor) Τεχνικός Εφαρμογών Πληροφορικής Εργαλεία Κατασκευής Παιχνιδιών Ι (Unreal Editor, Half Life, Doom Editor) Τεχνική Δημιουργίας Παιχνιδιών Εξάμηνο: 2014Β Διδάσκουσα: Ηλεκτρονική Τάξη: http://moodleforall.ictlab.edu.gr/

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

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ.

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ. 1. Πρόσβαση Οδηγίες προγράµµατος διαχείρισης ανάλυσης χρόνου εργασίας (Time Sheet) Για να ξεκινήσετε την εφαρµογή, από την κεντρική σελίδα του ΕΛΚΕ (www.elke.aua.gr) και το µενού «ιαχείριση», Time Sheet

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

Οδηγός γρήγορης εκκίνησης

Οδηγός γρήγορης εκκίνησης Οδηγός γρήγορης εκκίνησης Το Microsoft Word 2013 έχει διαφορετική εμφάνιση από προηγούμενες εκδόσεις. Γι αυτό το λόγο, δημιουργήσαμε αυτόν τον οδηγό για να ελαχιστοποιήσουμε την καμπύλη εκμάθησης. Γραμμή

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

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα. i Π Ρ Ο Λ Ο Γ Ο Σ Το βιβλίο αυτό αποτελεί μια εισαγωγή στα βασικά προβλήματα των αριθμητικών μεθόδων της υπολογιστικής γραμμικής άλγεβρας (computational linear algebra) και της αριθμητικής ανάλυσης (numerical

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

Τεχνητή Νοημοσύνη Ι. Εργαστηριακή Άσκηση 4-6. Σγάρμπας Κυριάκος. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων

Τεχνητή Νοημοσύνη Ι. Εργαστηριακή Άσκηση 4-6. Σγάρμπας Κυριάκος. Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων Τεχνητή Νοημοσύνη Ι Εργαστηριακή Άσκηση 4-6 Σγάρμπας Κυριάκος Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστων ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΤΕΧΝΟΛΟΓΙΑΣ

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

Προδιαγραφές Απαιτήσεων Γιάννης Σμαραγδάκης

Προδιαγραφές Απαιτήσεων Γιάννης Σμαραγδάκης Προδιαγραφές Απαιτήσεων Γιάννης Σμαραγδάκης Τα κυριότερα παραδοτέα/προϊόντα μιας διεργασίας ανάπτυξης λογισμικού Άρθρωση του προβλήματος, κατανόηση (προδιαγραφές απαιτήσεων) α ) Ποιο πρόβλημα λύνουμε;

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

ΤΟ MICROSOFT WORD XP. Ας ξεκινήσουμε λοιπόν!

ΤΟ MICROSOFT WORD XP. Ας ξεκινήσουμε λοιπόν! XP ΚΑΡΤΕΛΑ ΕΡΓΑΣΙΑΣ 1 Το Microsoft Word είναι ένα πρόγραμμα στον υπολογιστή που σας βοηθά να γράφετε όμορφα κείμενα στα οποία μπορείτε να προσθέσετε εικόνες, γραφικά ακόμα και ήχους. Aφού γράψετε ένα κείμενο,

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

6 η Δραστηριότητα στο MicroWorlds Pro (1)

6 η Δραστηριότητα στο MicroWorlds Pro (1) 6 η Δραστηριότητα στο MicroWorlds Pro (1) Προχωρημένος Προγραμματισμός με Logo Δομή επιλογής Αν & ΑνΔιαφορετικά Στην δραστηριότητα που ακολουθεί, θα προσπαθήσουμε να βρούμε την απόλυτη τιμή ενός αριθμού,

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