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

Μέγεθος: 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) Τα προβλήματα όπου η εξέλιξη των καταστάσεων εξαρτάται από δύο διαφορετικά σύνολα τελεστών μετάβασης που εφαρμόζονται

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

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

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

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

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

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

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

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

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

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

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

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

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

ιακριτά Μαθηµατικά Ασκήσεις Φροντιστηρίου

ιακριτά Μαθηµατικά Ασκήσεις Φροντιστηρίου ιακριτά Μαθηµατικά Ασκήσεις Φροντιστηρίου Εαρινό Εξάµηνο 2009 Κάτια Παπακωνσταντινοπούλου 1. Εστω A ένα µη κενό σύνολο. Να δείξετε ότι η αλγεβρική δοµή (P(A), ) είναι αβελιανή οµάδα. 2. Εστω ένα ξενοδοχείο

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

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

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

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

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

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

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

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

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

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

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

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

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

Extensive Games with Imperfect Information

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει; ΜΑΘΗΜΑ 7 Κλήση αλγορίθμου από αλγόριθμο Αναδρομή Σ χ ο λ ι κ ο Β ι β λ ι ο ΥΠΟΚΕΦΑΛΑΙΟ 2.2.7: ΕΝΤΟΛΕΣ ΚΑΙ ΔΟΜΕΣ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΡΑΦΟI 2.2.7.5: Κλήση αλγορίθμου από αλγόριθμο 2.2.7.6: Αναδρομή εισαγωγη

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

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

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

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

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

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

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

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

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

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

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

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

Οργάνωση καθημερινών ημερίδων

Οργάνωση καθημερινών ημερίδων Οργάνωση καθημερινών ημερίδων 1) Αγώνες ζευγών 1α) Διαθέσιμες κινήσεις: Φιλοσοφία, μηχανισμοί και τα χαρακτηριστικά τους. Οι κινήσεις είναι ένα από τα βασικότερα εργαλεία που έχει ένας διαιτητής στη διάθεσή

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

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

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

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

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

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

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

QS-LIS 2011 www.qslis-software.com

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

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

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

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

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

Κεφάλαιο 1.Εντολές κίνησης

Κεφάλαιο 1.Εντολές κίνησης Προγραμματίζω με το ΒΥΟΒ 1 Κεφάλαιο 1.Εντολές κίνησης Από το μάθημα της Φυσικής γνωρίζουμε ότι κίνηση σημαίνει αλλαγή της θέσης ενός αντικειμένου. Οι εντολές κίνησης που μας παρέχει το ΒΥΟΒ χωρίζονται

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

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής: Αυτό που πρέπει να θυμόμαστε, για να μη στεναχωριόμαστε, είναι πως τόσο στις εξισώσεις, όσο και στις ανισώσεις 1ου βαθμού, που θέλουμε να λύσουμε, ακολουθούμε ακριβώς τα ίδια βήματα! Εκεί που πρεπει να

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

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

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

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

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

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

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58 7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58 Στόχοι Μαθήματος 1. Πώς να επαναλάβετε μια δράση 2. Μάθετε πώς να χρησιμοποιείτε το Loop Blocks Προγραμματισμός EV3 Ακαδημία Ρομποτικής

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

Υπερπροσαρμογή (Overfitting) (1)

Υπερπροσαρμογή (Overfitting) (1) Αλγόριθμος C4.5 Αποφυγή υπερπροσαρμογής (overfitting) Reduced error pruning Rule post-pruning Χειρισμός χαρακτηριστικών συνεχών τιμών Επιλογή κατάλληλης μετρικής για την επιλογή των χαρακτηριστικών διάσπασης

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

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

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

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

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

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

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

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015 Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015 Βάλβης Δημήτριος Μηχανικός Πληροφορικής ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα

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

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

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

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

ΔΕΣΜΕΥΜΕΝΕΣ Ή ΥΠΟ ΣΥΝΘΗΚΗ ΠΙΘΑΝΟΤΗΤΕΣ

ΔΕΣΜΕΥΜΕΝΕΣ Ή ΥΠΟ ΣΥΝΘΗΚΗ ΠΙΘΑΝΟΤΗΤΕΣ ΔΕΣΜΕΥΜΕΝΕΣ Ή ΥΠΟ ΣΥΝΘΗΚΗ ΠΙΘΑΝΟΤΗΤΕΣ Έστω ότι επιθυμούμε να μελετήσουμε ένα τυχαίο πείραμα με δειγματικό χώρο Ω και έστω η πιθανότητα να συμβεί ένα ενδεχόμενο Α Ω Υπάρχουν περιπτώσεις όπου ενώ δεν γνωρίζουμε

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

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr»

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr» Επεξήγηση web site με λογικό διάγραμμα «Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr» Web : www.e-base.gr E-mail : support@e-base.gr Facebook : Like Twitter : @ebasegr Πολλοί άνθρωποι

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

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

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

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

Μπορείτε τα δείτε βιντεάκι με τη διαδικασία εδώ: 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. Αν δεν βλέπουμε

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

Περιεχόμενα. Σελίδα 3 από 21

Περιεχόμενα. Σελίδα 3 από 21 Σελίδα 1 από 21 Σελίδα 2 από 21 Περιεχόμενα Κεφάλαιο 1 Χρήσεις του υπολογιστή... 4 Κεφάλαιο 2 Βασικά τμήματα υπολογιστή... 6 Κεφάλαιο 3 - Ασφάλεια... 9 Κεφάλαιο 4 - Ποντίκι... 11 Κεφάλαιο 5 - Πληκτρολόγιο...

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

οποία ερχόµενη πίσω από τη γραµµή εκκίνησης κτυπήσει την αριθµηµένη µπίλια.

οποία ερχόµενη πίσω από τη γραµµή εκκίνησης κτυπήσει την αριθµηµένη µπίλια. ΠΑΓΚΟΣΜΙΟΙ ΚΑΝΟΝΙΣΜΟΙ ΟΚΤΑΜΠΑΛΟ 1. Σκοπός του παιχνιδιού. Το παιγνίδι παίζεται µε δηλωµένα χτυπήµατα και παίζεται µε µια άσπρη µπίλια και δεκαπέντε αριθµηµένες µπίλιες από το 1 ως το 15. Ο ένας παίκτης

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

ΛΟΓΟΙ ΚΑΙ ΑΝΑΛΟΓΙΕΣ ΟΔΗΓΟΣ ΟΡΓΑΝΩΣΗΣ ΤΗΣ ΔΙΔΑΣΚΑΛΙΑΣ. Μιχάλης Αργύρης

ΛΟΓΟΙ ΚΑΙ ΑΝΑΛΟΓΙΕΣ ΟΔΗΓΟΣ ΟΡΓΑΝΩΣΗΣ ΤΗΣ ΔΙΔΑΣΚΑΛΙΑΣ. Μιχάλης Αργύρης ΛΟΓΟΙ ΚΑΙ ΑΝΑΛΟΓΙΕΣ ΟΔΗΓΟΣ ΟΡΓΑΝΩΣΗΣ ΤΗΣ ΔΙΔΑΣΚΑΛΙΑΣ Μιχάλης Αργύρης 1 Λόγοι και αναλογίες Περίληψη Οι μαθητές έχουν στη διάθεσή τους μια υπολογιστική οντότητα, ένα καγκουρό του οποίου το μέγεθος μπορούν

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

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. Οδηγός Διαχειριστή Το m-learning Toolkit είναι μια ολοκληρωμένη πλατφόρμα εξ αποστάσεως εκπαίδευσης που έχει σχεδιαστεί για να υπάρχει η δυνατότητα της πρόσβασης

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

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

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

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

ΥΠΟΒΡΥΧΙΟ ΡΑΓΚΜΠΥ ΠΕΡΙΛΗΨΗ ΚΑΝΟΝΙΣΜΩΝ

ΥΠΟΒΡΥΧΙΟ ΡΑΓΚΜΠΥ ΠΕΡΙΛΗΨΗ ΚΑΝΟΝΙΣΜΩΝ ΥΠΟΒΡΥΧΙΟ ΡΑΓΚΜΠΥ ΠΕΡΙΛΗΨΗ ΚΑΝΟΝΙΣΜΩΝ (με βάση τις οδηγίες της CMAS) Σύντομη περιγραφή του παιχνιδιού: Το υποβρύχιο ράγκμπυ είναι ένα τρισδιάστατο άθλημα που παίζεται κάτω από την επιφάνεια του νερού,

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

Ελαφρύτερος και βαρύτερος Αλγόριθμοι ταξινόμησης

Ελαφρύτερος και βαρύτερος Αλγόριθμοι ταξινόμησης 7η Δραστηριότητα Ελαφρύτερος και βαρύτερος Αλγόριθμοι ταξινόμησης Περίληψη Οι υπολογιστές χρησιμοποιούνται συχνά για την ταξινόμηση καταλόγων, όπως για παράδειγμα, ονόματα σε αλφαβητική σειρά, ραντεβού

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

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

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

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από

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

Παιχνίδια σε Javascript

Παιχνίδια σε Javascript Παιχνίδια σε Javascript Μάθημα 1ο Μια Γρήγορη Εισαγωγή στη Γλώσσα Τα Εργαλεία Την Javascript μπορούμε (όπως και την HTML) να τη γράψουμε σε ένα απλό συντάκτη κειμένου, ή σε ένα περιβάλλον όπως το Bluefish

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ Βασικά Εργαλεία και Μέθοδοι για τον Έλεγχο της Ποιότητας [ΔΙΠ 50] 1η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Προσοχή: Οι απαντήσεις των ασκήσεων πρέπει να

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ. Βασικά Εργαλεία και Μέθοδοι για τον Έλεγχο της Ποιότητας [ΔΙΠ 50]

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ. Βασικά Εργαλεία και Μέθοδοι για τον Έλεγχο της Ποιότητας [ΔΙΠ 50] ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ Βασικά Εργαλεία και Μέθοδοι για τον Έλεγχο της Ποιότητας [ΔΙΠ 50] 1η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ Προσοχή: Οι απαντήσεις των ασκήσεων πρέπει να

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

Το περιβάλλον προγραμματισμού MicroWorlds Pro

Το περιβάλλον προγραμματισμού MicroWorlds Pro Μενού επιλογών Το περιβάλλον προγραμματισμού MicroWorlds Pro Γραμμή εργαλείων Επιφάνεια εργασίας Περιοχή Καρτελών Κέντρο εντολών Εικόνα 2.1: Το περιβάλλον της MicroWorlds Pro. Καρτέλες Οι πρώτες εντολές

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

Εργαστήριο Εφαρμοσμένης Πληροφορικής

Εργαστήριο Εφαρμοσμένης Πληροφορικής Τμήμα Φυσικής - Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Εργαστήριο Εφαρμοσμένης Πληροφορικής Ομάδα Α. Προετοιμασία Αναφοράς Εργασία-2: Σύνθεση αναφοράς Σύνθεση Αναφοράς http://eep.physics.auth.gr Τι περιέχει

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

Movie Maker (Δημιουργία βίντεο)

Movie Maker (Δημιουργία βίντεο) Movie Maker (Δημιουργία βίντεο) - Με πόσους τρόπους μπορούμε να διηγηθούμε μια ιστορία; - Μπορούμε να την πούμε ο ένας στον άλλο. - Μπορούμε να την γράψουμε. - Μπορούμε να τη ζωγραφίσουμε κομμάτι-κομμάτι.

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

ΠΕΡΙΕΧΟΜΕΝΑ ΤΟΥ ΠΑΙΧΝΔΙΟΥ ΠΕΡΙΛΗΨΗ ΠΡΟΕΤΟΙΜΑΣΙΑ. χαρτονένια κομμάτια 1 ταμπλό 2 ταμπλό αγροκτήματος (ένα για κάθε παίκτη)

ΠΕΡΙΕΧΟΜΕΝΑ ΤΟΥ ΠΑΙΧΝΔΙΟΥ ΠΕΡΙΛΗΨΗ ΠΡΟΕΤΟΙΜΑΣΙΑ. χαρτονένια κομμάτια 1 ταμπλό 2 ταμπλό αγροκτήματος (ένα για κάθε παίκτη) ΠΕΡΙΕΧΟΜΕΝΑ ΤΟΥ ΠΑΙΧΝΔΙΟΥ του Uwe Rosenberg για 2 παίκτες ηλικίας 13 και άνω ΠΕΡΙΛΗΨΗ Παίρνετε τους ρόλους αγροτών και εκτρέφετε πρόβατα, γουρούνια αγελάδες και άλογα. Τρείς εργάτες σας βοηθούν στις εργασίες

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

ΚΕΦΑΛΑΙΟ ΙΙ. OpenOffice 3.x Calc

ΚΕΦΑΛΑΙΟ ΙΙ. OpenOffice 3.x Calc ΚΕΦΑΛΑΙΟ ΙΙ OpenOffice 3.x Calc Στόχοι: Με τη βοήθεια του οδηγού αυτού ο εκπαιδευόμενος θα μπορεί να: χρησιμοποιεί τα βασικά εργαλεία του Calc κατασκευάζει πίνακες δημιουργεί φόρμουλες υπολογισμού κατασκευάζει

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

Παιχνιδάκια με τη LOGO

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

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

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εφαρμογή Εκτύπωσης Ταξιθετικών Ετικετών 2000-2005

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εφαρμογή Εκτύπωσης Ταξιθετικών Ετικετών 2000-2005 Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Υπολογιστικό Κέντρο Βιβλιοθηκών Εφαρμογή Εκτύπωσης Ταξιθετικών Ετικετών 2000-2005 Σύντομο εγχειρίδιο χρήσης και λειτουργιών Εισαγωγή Το παρόν κείμενο στόχο

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

Bάτραχοι στη λίμνη. Παιχνίδια Συνεργασίας 2014. Επίπεδο 1,2

Bάτραχοι στη λίμνη. Παιχνίδια Συνεργασίας 2014. Επίπεδο 1,2 Bάτραχοι στη λίμνη 1,2 Οργάνωση: Εργασία με όλη την τάξη. Τα παιδιά είναι γύρω από το αλεξίπτωτο, τη λίμνη και το κρατούν στο ύψος της μέσης. Τα σακουλάκια πάνω στο αλεξίπτωτο είναι οι βάτραχοι. Σκοπός

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου. 2.1 Αν χ και y μεταβλητές με τιμές 5 και 10 αντίστοιχα να εξηγηθούν οι ακόλουθες εντολές εξόδου. 1) Η τιμή του χ είναι,χ Ητιμή του χ είναι 5 Ηεντολή εμφανίζει ότι υπάρχει στα διπλά εισαγωγικά ως έχει.

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

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML για το µάθηµα ΑΝΑΛΥΣΗΣ ΣΥΣΤΗΜΑΤΩΝ Ακαδηµαϊκό Έτος 2012-2013 «Αντικειµενοστρεφής Ανάλυση Ηλεκτρονικού Καταστήµατος Προσφορών (e-shop)» Η άσκηση αφορά στη χρήση της

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

ΥΠ.ΕΣ. -.Μ.Η.Ε.Σ. ΕΓΧΕΙΡΙ ΙΟ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΛΗΞΙΑΡΧΕΙΟΥ

ΥΠ.ΕΣ. -.Μ.Η.Ε.Σ. ΕΓΧΕΙΡΙ ΙΟ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΛΗΞΙΑΡΧΕΙΟΥ ΥΠ.ΕΣ. -.Μ.Η.Ε.Σ. ΕΓΧΕΙΡΙ ΙΟ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΛΗΞΙΑΡΧΕΙΟΥ V 1.3 εκέµβριος 2012 Πίνακας Περιεχοµένων 1. Εισαγωγή.. σελ. 3 2. Σύνδεση για πρώτη φορά µε την εφαρµογή 4 3. Είσοδος στην εφαρµογή 9 4. Αναζήτηση

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

1. ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

1. ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 12 Σχεδιασμός Ανάπτυξη Λειτουργία Π.Σ. 1. ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 1.1 Δυνατότητες Λειτουργικών Συστημάτων 1.1.1 Εισαγωγή Ο όρος Λειτουργικό Σύστημα (Operating System), εκφράζει το σύνολο των προγραμμάτων

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

Όνομα : Επώνυμο: Τάξη : Καθηγητής : Ημ/νία : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (18-11-2012) Γ3, Γ4 ΑΝ Α < Β ΤΟΤΕ ΑΛΛΙΩΣ ΤΕΛΟΣ_ΑΝ

Όνομα : Επώνυμο: Τάξη : Καθηγητής : Ημ/νία : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (18-11-2012) Γ3, Γ4 ΑΝ Α < Β ΤΟΤΕ ΑΛΛΙΩΣ ΤΕΛΟΣ_ΑΝ Όνομα : Επώνυμο: Τάξη : ΦΡΟΝΤΙΣΤΗΡΙΟ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΠΛΑΤΕΙΑ ΗΡΩΩΝ ΠΟΛΥΤΕΧΝΕΙΟΥ 13 - ΤΗΛ. 2108048919 ΠΛΑΤΕΙΑ ΗΡΩΩΝ ΠΟΛΥΤΕΧΝΕΙΟΥ 29 - ΤΗΛ. 2108100606 www.dinamiko.gr, email: info@dinamiko.gr Καθηγητής

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

ΑΛΛΑΓΕΣ ΛΟΓΙΣΤΙΚΗΣ Έκδοση 3.2014.1

ΑΛΛΑΓΕΣ ΛΟΓΙΣΤΙΚΗΣ Έκδοση 3.2014.1 ΑΛΛΑΓΕΣ ΛΟΓΙΣΤΙΚΗΣ Έκδοση 3.2014.1 1. Δημιουργία Μεταβολή Καρτέλας Λογιστικής. Αν η καρτέλα έχει τύπο Λογιστικής και μορφή Κινούμενη, τότε ενεργοποιείται το πεδίο Αριθμός ΦΤΜ στην θέση του πεδίου Επάγγελμα.

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

Κεφάλαιο 5: Στρατηγική χωροταξικής διάταξης

Κεφάλαιο 5: Στρατηγική χωροταξικής διάταξης K.5.1 Γραμμή Παραγωγής Μια γραμμή παραγωγής θεωρείται μια διάταξη με επίκεντρο το προϊόν, όπου μια σειρά από σταθμούς εργασίας μπαίνουν σε σειρά με στόχο ο κάθε ένας από αυτούς να κάνει μια ή περισσότερες

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

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5) ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ Τοποθετώ μια δισκέτα στον οδηγό τη δισκέτας του υπολογιστή. Τοποθετώ τη δισκέτα που έχει το αρχείο μου στον οδηγό τη δισκέτας του υπολογιστή.

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

Γραμμικός Προγραμματισμός

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

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

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

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

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Θ.Ε. ΠΛΗ31 (2005-6) ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ #1 Στόχος Η εργασία επικεντρώνεται σε θέματα προγραμματισμού για Τεχνητή Νοημοσύνη και σε πρακτικά θέματα εξάσκησης σε Κατηγορηματική Λογική. Θέμα 1: Απλές Αναζητήσεις

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

«Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα.

«Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα. «Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα. Πώς θα δουλέψεις με το Χελωνόκοσμο την πρώτη φορά 1. Θα χρησιμοποιήσεις το αριστερό πλήκτρο

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

Η ΠΟΚΕΡΚΑΡΤΑ ΤΟΥ BIG TONY. User s Manual / Εγχειρίδιο Χρήσης. GDTronics

Η ΠΟΚΕΡΚΑΡΤΑ ΤΟΥ BIG TONY. User s Manual / Εγχειρίδιο Χρήσης. GDTronics Η ΠΟΚΕΡΚΑΡΤΑ ΤΟΥ BIG TONY User s Manual / Εγχειρίδιο Χρήσης GDTronics Οκτώβριος 2009 Πίνακας Περιεχομένων: ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ: 1 ΜΕΡΟΣ Α: ΠΟΚΕΡ ΚΑΙ ΤΕΞΑΣ ΧΟΛΝΤΕΜ 3 A.1 Τι Είναι Το Πόκερ 3 Α.2 Γενικά

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

Προετοιμασία κάρτες ξεκινήματος μένουν κλειστές. Κανόνες παιξίματος.

Προετοιμασία κάρτες ξεκινήματος μένουν κλειστές. Κανόνες παιξίματος. Κάπου στο Λονδίνο κρύβεται ο αυτόνομος Χ. Η Σέκλαντ Γιάρντ έχει στη διαθεσή της δύο, τρεις ως πέντε σεκίτες για να τον εντοπίσουν. Κινούνται με ταξί, μετρό ή λεωφορείο κι έχουν στη διάθεση τους ορισμένα

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

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

Ο ξεναγός (Συνοδευτική δραστηριότητα του γύρου του ίππου)

Ο ξεναγός (Συνοδευτική δραστηριότητα του γύρου του ίππου) Ο ξεναγός (Συνοδευτική δραστηριότητα του γύρου του ίππου) Ηλικίες: Προαπαιτούμενες δεξιότητες: Χρόνος: Μέγεθος ομάδας: 8 ενήλικες Καμία 15 λεπτά για τη βασική δραστηριότητα, περισσότερο για τις επεκτάσεις

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

M m l B r mglsin mlcos x ml 2 1) Να εισαχθεί το µοντέλο στο simulink ορίζοντας από πριν στο MATLAB τις µεταβλητές Μ,m,br

M m l B r mglsin mlcos x ml 2 1) Να εισαχθεί το µοντέλο στο simulink ορίζοντας από πριν στο MATLAB τις µεταβλητές Μ,m,br ΑΣΚΗΣΗ 1 Έστω ένα σύστηµα εκκρεµούς όπως φαίνεται στο ακόλουθο σχήµα: Πάνω στη µάζα Μ επιδρά µια οριζόντια δύναµη F l την οποία και θεωρούµε σαν είσοδο στο σύστηµα. Έξοδος του συστήµατος θεωρείται η απόσταση

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

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER Η εφαρμογή LiveTripTraveller διατίθεται για κινητά τηλέφωνα με λειτουργικό σύστημα Android. Στο υπο-ιστοσελίδα www.livetrips.com/sources μπορείτε να κατεβάσετε την εφαρμογή

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

POWERPOINT 2003. Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων.

POWERPOINT 2003. Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων. POWERPOINT 2003 1. Τι είναι το PowerPoint (ppt)? Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων. 2. Τι δυνατότητες έχει? Δημιουργία παρουσίασης. Μορφοποίηση παρουσίασης. Δημιουργία γραφικών. Δημιουργία

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013 ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013 ΘΕΜΑ Α Α1. Να χαρακτηρίσετε τις προτάσεις που ακολουθούν, γράφοντας δίπλα στο γράμμα που αντιστοιχεί σε κάθε πρόταση τη

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

Περι-γράφοντας... κλωνάρια

Περι-γράφοντας... κλωνάρια Όνομα(τα): Όνομα Η/Υ: Σ Τμήμα: Ημερομηνία: Περι-γράφοντας... κλωνάρια Ξεκινήστε το Χώρο ραστηριοτήτων, επιλέξτε τη θεματική ενότητα: ΘΕ03: Απλή επιλογή και επιλέξτε την πρώτη δραστηριότητα (Περι-γράφοντας...

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

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

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

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

Ενημέρωση αλλαγών στην αξιολόγηση ΟΠΣ_ΕΣΠΑ Εγκατάσταση στην Παραγωγή: 13/9/2010

Ενημέρωση αλλαγών στην αξιολόγηση ΟΠΣ_ΕΣΠΑ Εγκατάσταση στην Παραγωγή: 13/9/2010 Ενημέρωση αλλαγών στην αξιολόγηση ΟΠΣ_ΕΣΠΑ ΠΕΡΙΕΧΟΜΕΝΑ Ι. Αλλαγές στο ΣΤΑΔΙΟ Α στην αξιολόγηση (εξέταση πληρότητας) I.1. Προσδιορισμός ερωτημάτων λίστας εξέτασης Λ1 στο ΕΠ I.2. Προσδιορισμός της λίστας

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

ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 05/03/2012 ΑΠΑΝΤΗΣΕΙΣ. ΘΕΜΑ Α Α1. Α2. 1. ΣΩΣΤΟ 1 στ 2. ΛΑΘΟΣ 2 δ 3. ΣΩΣΤΟ 3 ε 4. ΛΑΘΟΣ 4 β 5. ΣΩΣΤΟ 5 γ

ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 05/03/2012 ΑΠΑΝΤΗΣΕΙΣ. ΘΕΜΑ Α Α1. Α2. 1. ΣΩΣΤΟ 1 στ 2. ΛΑΘΟΣ 2 δ 3. ΣΩΣΤΟ 3 ε 4. ΛΑΘΟΣ 4 β 5. ΣΩΣΤΟ 5 γ ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / ΑΠΟΦΟΙΤΟΙ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 05/03/2012 ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α Α1. Α2. 1. ΣΩΣΤΟ 1 στ 2. ΛΑΘΟΣ 2 δ 3. ΣΩΣΤΟ 3 ε 4. ΛΑΘΟΣ 4 β 5. ΣΩΣΤΟ 5 γ Α3. α. (σελ. 183-184) Στοίβα: ώθηση, απώθηση Ουρά:

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

ΕΝΙΑΙΟ ΛΥΚΕΙΟ ΚΑΛΑΜΠΑΚΑΣ ΣΧΟΛ. ΕΤΟΣ 2012-2013

ΕΝΙΑΙΟ ΛΥΚΕΙΟ ΚΑΛΑΜΠΑΚΑΣ ΣΧΟΛ. ΕΤΟΣ 2012-2013 ΕΝΙΑΙΟ ΛΥΚΕΙΟ ΚΑΛΑΜΠΑΚΑΣ ΣΧΟΛ. ΕΤΟΣ 2012-2013 ΕΚΠΑΙΔΕΥΤΙΚΉ ΠΡΟΣΟΜΟΙΩΣΗ ΕΞΕΤΑΣΕΩΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ Α Α1. Να γράψετε

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

Γρήγορη Εκκίνηση. Όταν ξεκινήσετε το GeoGebra, εμφανίζεται το παρακάτω παράθυρο:

Γρήγορη Εκκίνηση. Όταν ξεκινήσετε το GeoGebra, εμφανίζεται το παρακάτω παράθυρο: Τι είναι το GeoGebra; Γρήγορη Εκκίνηση Λογισμικό Δυναμικών Μαθηματικών σε ένα - απλό στη χρήση - πακέτο Για την εκμάθηση και τη διδασκαλία σε όλα τα επίπεδα της εκπαίδευσης Συνδυάζει διαδραστικά γεωμετρία,

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

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9. Οδηγίες Χρήσης

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9. Οδηγίες Χρήσης Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9 Οδηγίες Χρήσης Πίνακας Περιεχομένων 1. Αρχική οθόνη... 3 2. Αρχική Οθόνη Πιστοποιημένου Χρήστη... 4 2.1. Οριστικοποίηση της Περιουσιακής Εικόνας... 5 2.2. Καρτέλες

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

ΛΙΓΕΣ ΑΠΛΕΣ ΟΔΗΓΙΕΣ WAVE MODE MOBILE. Cod. Art. A0138 / A0139

ΛΙΓΕΣ ΑΠΛΕΣ ΟΔΗΓΙΕΣ WAVE MODE MOBILE. Cod. Art. A0138 / A0139 WAVE MODE MOBILE ΛΙΓΕΣ ΑΠΛΕΣ ΟΔΗΓΙΕΣ Cod. Art. A038 / A039 Habakis Co Υψηλάντου 4 456, Κηφισιά Τηλ.: 20807470 Fax: 208074662 Email: service@habakis.gr www.habakis.gr CISA SpA Via Oberdan, 42 4808 Faenza

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

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος

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

Jazler RadioStar 2. Εγχειρίδιο χρήσης. Spots/ Διαφημίσεις

Jazler RadioStar 2. Εγχειρίδιο χρήσης. Spots/ Διαφημίσεις Jazler RadioStar 2 Εγχειρίδιο χρήσης Spots/ Διαφημίσεις 2 Περιεχόμενα 1 Περίληψη... 3 2 Ιδιότητες Spots... 3 3 Γενικές ρυθμίσεις Spots... 9 4 Spots/Διαφημίσεις... 10 5 Προγραμματίζοντας τα Spot... 17 6

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βήματα προς τη δημιουργία εκτελέσιμου κώδικα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βήματα προς τη δημιουργία εκτελέσιμου κώδικα Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βήματα προς τη δημιουργία εκτελέσιμου κώδικα Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Βήματα προς τη δημιουργία εκτελέσιμου κώδικα

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

Κεφ.14: Μεταβλητές & Λίστες

Κεφ.14: Μεταβλητές & Λίστες Κεφ.14: Μεταβλητές & Λίστες... Σε αυτό το κεφάλαιο: 14.1 Εισαγωγή στην έννοια των μεταβλητών 14.2 Λίστες 14.3 Παραδείγματα... «Το πιο απίθανο πράγμα με τη ζωή είναι ότι πάντα θα υπάρχουν μεταβλητές. Θα

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

Ανακαλύπτω. Ο υπολογιστής στην πράξη!

Ανακαλύπτω. Ο υπολογιστής στην πράξη! ΔΗΜΟΣΙΑ ΚΕΝΤΡΙΚΗ ΒΙΒΛΙΟΘΗΚΗ ΛΕΒΑΔΕΙΑΣ ΣΥΛΛΟΓΟΣ «ΦΙΛΟΙ ΒΙΒΛΙΟΘΗΚΗΣ ΛΙΒΑΔΕΙΑΣ» Κατερίνα Κεράστα 2014 Α Μαθαίνω τον υπολογιστή μου Ανακαλύπτω Ο υπολογιστής στην πράξη! Ο υπολογιστής στην πράξη! Επιφάνεια

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

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ Μ. Γρηγοριάδου Ρ. Γόγουλου Ενότητα: Η Διδασκαλία του Προγραμματισμού Περιεχόμενα Παρουσίασης

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

B Γυμνασίου. Ενότητα 9

B Γυμνασίου. Ενότητα 9 B Γυμνασίου Ενότητα 9 Γραμμικές εξισώσεις με μία μεταβλητή Διερεύνηση (1) Να λύσετε τις πιο κάτω εξισώσεις και ακολούθως να σχολιάσετε το πλήθος των λύσεων που βρήκατε σε καθεμιά. α) ( ) ( ) ( ) Διερεύνηση

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