Ανάπτυξη Προγράμματος Scrabble για Υπολογιστή στην Ελληνική Γλώσσα



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

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

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

A7.2 Δημιουργία Απλής Γραφικής Εφαρμογής σε Περιβάλλον Scratch

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo;

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

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

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

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

ΕΙΣΑΓΩΓΗ ΣΤOΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

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

Κεφάλαιο 3: Εισαγωγή στους αλγορίθμους - διαγράμματα ροής

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

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

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

Αντικείμενα, συμπεριφορές, γεγονότα

Tank Rescue Computer Game σε Scratch

Μάθημα 1: Εισαγωγή. Κάνε κλικ την εντολή "κινήσου" και με το ποντίκι πατημένο μετέφερε τη στη περιοχή σεναρίων.

Ας μετονομάσουμε τη γάτα που εμφανίζεται μόλις ανοίγουμε το Scratch. Επιλέγουμε το εικονίδιο Μορφή1 που βρίσκεται στη λίστα αντικειμένων.

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

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 7η ΕΝΟΤΗΤΑ: ΟΡΓΑΝΩΣΗ ΧΡΟΝΟΥ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

Slalom Race Computer Game on Scratch

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

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Αύξηση πελατών. Λίγα λόγια για Επιτυχημένες προωθήσεις

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

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

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo

ΕΝΤΟΛΕΣ. 7.1 Εισαγωγικό μέρος με επεξήγηση των Εντολών : Επεξήγηση των εντολών που θα

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Κλιμάκιο Πληροφορικής Σεμινάρια για τα λογισμικά κλειστού τύπου Κύκλος Α

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

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

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


ΔΙΔΑΣΚΑΛΙΑ ΓΝΩΣΤΙΚΗΣ ΣΤΡΑΤΗΓΙΚΗΣ ΓΙΑ ΤΗΝ ΚΑΤΑΝΟΗΣΗ Δρ. Ζαφειριάδης Κυριάκος Οι ικανοί αναγνώστες χρησιμοποιούν πολλές στρατηγικές (συνδυάζουν την

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο PowerPoint...9. Κεφάλαιο 2 Εργασία με κείμενο... 39

Σενάριο για την επεξεργασία εικόνας με το Paint.NET που σχεδίασε ο εκπαιδευτικός κλάδου ΠΕ20 Μαλλιαρίδης Κωνσταντίνος.

Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Μαλούτα Θεανώ Σελίδα 1

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

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

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ. ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Othello-TD Learning. Βόλτσης Βαγγέλης Α.Μ

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

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

Εισαγωγή στους Υπολογιστές

Δραστηριότητα 1 αξιολόγηση της λύσης για το πρόβλημα των μεγάλων αποστάσεων

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

Ενδυμασίες. Μετονομάζουμε την νέα ενδυμασία του αντικείμενου μας και έχουμε ολοκληρώσει τη δημιουργία της.

Το σκηνικό μας είναι πλέον έτοιμο για εισάγουμε τα υπόλοιπα αντικείμενα του έργου μας.

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Το φτερό του αεροπλάνου

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

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

Σχεδιασμός Ψηφιακών Εκπαιδευτικών Εφαρμογών ΙI

Πανεπιστήµιο Θεσσαλίας

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

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

Μάθημα 6ο. Υπολογιστικό Φύλλο

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

Στέλιος Ξυνόγαλος Επίκουρος Καθηγητής Τμήμα Εφαρμοσμένης Πληροφορικής

Σενάριο Χρήσης myschool

Μεταβλητές. Σενάριο για μαθητές Γ γυμνασίου διάρκειας 3+ ωρών

Εγχειρίδιο Χρήσης Εφαρμογής Συστήματος Διαχείρισης Λογισμικού

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

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

Βιωματικό εργαστήριο ηλεκτρονικών υπολογιστών. Οργάνωση εκπαιδευτικού υλικού με Η/Υ από δραστηριότητες στο Δημοτικό και στο Νηπιαγωγείο.

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

ΙΔΕΟΚΑΤΑΣΚΕΥΕΣ: ΣΚΕΦΤΟΜΑΙ ΚΑΙ ΓΡΑΦΩ

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

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

Διαχείριση Βάσης Δεδομένων (dbadmin)

Η διάρκεια πραγματοποίησης της ανοιχτής εκπαιδευτικής πρακτικής ήταν 2 διδακτικές ώρες

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

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

Εγχειρίδιο χρήσης για τον φοιτητή

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

ΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ. Εργαλειοθήκη Παρουσιάζετε το έργο σας Εκκινείτε τα σενάριά σας Σταματάτε όλα τα σενάρια. Οι 8 ομάδες της Παλέτας εντολών

Φύση και Μαθηματικά. Η χρυσή τομή φ

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

Ανακύκλωσε το Computer Game σε Scratch

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

Transcript:

Πανεπιστήμιο Πατρών Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών Τομέας Τηλεπικοινωνιών και Τεχνολογίας Πληροφορίας Ανάπτυξη Προγράμματος Scrabble για Υπολογιστή στην Ελληνική Γλώσσα Διπλωματική εργασία του φοιτητή Ζαφειρόπουλου Παναγιώτη Α.Μ. 5499 Επιβλέπων Καθηγητής: κ. Σγάρμπας Κυριάκος Αριθμός Διπλωματικής:... Πάτρα, Ιούνιος 2012

ii

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

ii

ΤΙΤΛΟΣ: Ανάπτυξη Προγράμματος Scrabble για Υπολογιστή στην Ελληνική Γλώσσα ΣΥΓΓΡΑΦΕΑΣ: ΠΑΝΑΓΙΩΤΗΣ Χ. ΖΑΦΕΙΡΟΠΟΥΛΟΣ ΠΕΡΙΛΗΨΗ: Α.Μ.: 5499 Η παρούσα διπλωματική εργασία αφορά στη σχεδίαση και υλοποίηση ενός προγράμματος που θα απεικονίζει το επιτραπέζιο παιχνίδι Scrabble σε αντίστοιχη έκδοση για υπολογιστή, χρησιμοποιώντας αποκλειστικά την ελληνική γλώσσα, τόσο στο λεξιλόγιο όσο και στην απεικόνιση των εντολών και πληροφοριών του παιχνιδιού. Χρησιμοπoιώντας τη γλώσσα προγραμματισμού JAVA, δημιουργήθηκε το γραφικό περιβάλλον της εφαρμογής και στη συνέχεια αναπτύχθηκαν οι αλγόριθμοι που θα καθιστούσαν δυνατή την έναρξη μιας παρτίδας του παιχνιδιού ανάμεσα σε έναν άνθρωπο-παίκτη και στον υπολογιστή. Συγκεκριμένα αναπτύχθηκαν αλγόριθμοι για τη δημιουργία αναγραμματισμών από οποιαδήποτε δοσμένη λέξη, αναζήτησης των βέλτιστων λέξεων για τοποθέτηση στο ταμπλώ, αλλά και αλγόριθμοι υπολογισμού της βαθμολογίας των αντιπάλων. Επίσης αναζητήθηκε και ευρέθη η βέλτιστη λύση αναζήτησης μέσα σε μακροσκελές λεξικό. ABSTRACT: This diploma dissertation presents the design and implementation of a program that outputs the classic board game of Scrabble for use in a computer environment, making exclusive use of the Greek language for the dictionary used, as well as the rest of the information and messages presented throughout the game. Using the JAVA code language, we created the graphic environment of the application and we also developed the algorithms that enabled the proper advance of the game between a human player and the computer. We specifically developed the algorithm of finding the anagrams of any given word, the algorithm of searching for the best word for placing on the board, but also algorithms of calculating the score of both opponents. We also had success in searching and finding the best implementation of traversing through a long dictionary. 3

Περιεχόμενα ΚΕΦΑΛΑΙΟ 1: ΕΙΣΑΓΩΓΗ... 7 1.1 Στόχος της εργασίας 7 1.2 Χρησιμότητα 7 1.3 Πρακτικές δυσκολίες κατά την υλοποίηση 8 1.4 Ιστορία του παιχνιδιού Scrabble 8 1.5 Οι αρχαιοελληνικές ρίζες 17 1.6 Το Scrabble πολύτιμο εργαλείο για την ανθρωπότητα 18 ΚΕΦΑΛΑΙΟ 2: ΕΦΑΡΜΟΓΗ... 21 2.1 Εργαλεία ανάπτυξης εφαρμογής 21 2.2 Βασική ιδέα υλοποίησης - Αρχικός σχεδιασμός 23 2.3 Ελληνική έκδοση Σκραμπλ 24 2.6 Δημιουργία λεξικού 24 2.5 Ανάλυση αρχείων - αλγορίθμων - μεθόδων 25 2.6 Διάγραμμα μπλοκ υλοποίησης 45 ΚΕΦΑΛΑΙΟ 3: ΠΑΡΑΔΕΙΓΜΑΤΑ ΧΡΗΣΗΣ... 47 ΚΕΦΑΛΑΙΟ 4: ΓΕΝΙΚΕΣ ΜΕΤΡΗΣΕΙΣ... 61 4.1 Δημιουργία λεξικού 61 4.2 Δημιουργία αναγραμματισμών 63 4.3 Έλεγχος ορθότητας λέξεων 65 4.4 Ολοκλήρωση κίνησης υπολογιστή 65 ΚΕΦΑΛΑΙΟ 5: ΣΥΜΠΕΡΑΣΜΑΤΑ & ΜΕΛΛΟΝΤΙΚΕΣ ΒΕΛΤΙΩΣΕΙΣ... 67 ΠΑΡΑΡΤΗΜΑ (Κώδικας Προγράμματος)... 71 Π.1 SplashScreen.java 71 Π.2 Input.java 72 4

Π.3 MyLettersPanel.java 75 Π.4 ScrabbleStatusBox.java 80 Π.5 ScrabbleBoard.java 83 Π.6 TreeSetDictionary.java 87 Π.7 Anagrams.java 88 Π.8 CreateWordList.java 89 Π.9 CPUTurnToPlay.java 93 Π.10 Επίσημοι Κανόνες Σκραμπλ 99 ΒΙΒΛΙΟΓΡΑΦΙΑ... 103 5

6

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΚΕΦΑΛΑΙΟ 1: ΕΙΣΑΓΩΓΗ 1.1 Στόχος της εργασίας Στόχος αυτής της εργασίας ήταν η ανάπτυξη ενός προγράμματος το οποίο θα υλοποιεί το επιτραπέζιο παιχνίδι «Scrabble» για χρήση σε υπολογιστή. Να επιτρέπει δηλαδή σε κάποιον χρήστη να παίζει το συγκεκριμένο παιχνίδι μπροστά στην οθόνη ενός υπολογιστή, αλληλεπιδρώντας με αυτόν και αντιμετωπίζοντάς τον ως αντίπαλο προς την επίτευξη της νίκης. Η υλοποίηση του προγράμματος έγινε χρησιμοποιώντας αποκλειστικά την ελληνική γλώσσα και όσο το δυνατόν ολόκληρο το ελληνικό λεξιλόγιο. Αυτό σημαίνει ότι οι λέξεις που θα γίνονται αποδεκτές, θα πρέπει υποχρεωτικά να αποτελούν λήμματα των ελληνικών λεξικών. Το τελικό αποτέλεσμα ένα πρόγραμμα, άμεσα εκτελέσιμο σε υπολογιστή με λειτουργικό Windows και το οποίο επιτρέπει στον χρήστη να παίζει το συγκεκριμένο παιχνίδι. 1.2 Χρησιμότητα Σίγουρα είναι δύσκολο να εξηγήσει κάποιος που αναπτύσσει ένα παιχνίδι τη χρησιμότητά του στο ευρύ κοινό. Όμως, ακριβώς επειδή πρόκειται για ένα «παιχνίδι», δεν έχει τόση σημασία να εξηγήσουμε τη χρησιμότητά του, για παράδειγμα στο κοινωνικό σύνολο, όσο το να κατανοήσουμε τους λόγους που μας οδήγησαν στην ανάπτυξή του. Το παιχνίδι Scrabble αποτελεί εδώ και αρκετά χρόνια ένα από τα αγαπημένα παιχνίδια για ανθρώπους όλων των ηλικιών σε ολόκληρο τον κόσμο. Όμως, παρόλο που είναι γνωστό και στη χώρα μας, δεν έχει υπάρξει μέχρι τώρα μια αξιόλογη 7

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ υλοποίηση για υπολογιστή στην ελληνική γλώσσα. Σαφώς και το αποτέλεσμα της παρούσης εργασίας δεν αποτελεί μία βέλτιστη υλοποίηση της συγκεκριμένης ιδέας, όμως αποτελεί έναν καλό προπομπό για παρόμοιες εργασίες στο μέλλον. 1.3 Πρακτικές δυσκολίες κατά την υλοποίηση Η παρούσα υλοποίηση έγινε χρησιμοποιώντας τη γλώσσα προγραμματισμού JAVA. Ως αντικειμενοστραφής γλώσσα, απαιτεί κάποια εξοικείωση, ειδικά από τη στιγμή που αποφασίστηκε να γίνει εκτεταμένη χρήση γραφικών στοιχείων και παραθύρων μηνυμάτων. Μη έχοντας πρότερη εμπειρία από τέτοιου είδους υλοποιήσεις, αντιμετωπίσαμε αρκετές δυσκολίες στην υλοποίηση των διαφόρων αλγορίθμων και συναρτήσεων που απαιτούνται για την εφαρμογή και τη μετατροπή τους από ψευδοκώδικα, ήτοι γλώσσα καταληπτή από το μέσο άνθρωπο, σε γλώσσα προγραμματισμού, που θα επιτρέπει την εκτέλεση αυτών από τον υπολογιστή. Ακόμα ένα εμπόδιο που συναντήσαμε ήταν η εύρεση ενός λεξιλογίου κατάλληλου για χρήση με το πρόγραμμά μας. Αποφασίστηκε να χρησιμοποιήσουμε ως εναρκτήριο σημείο ένα λεξικό που έχει δημιουργηθεί από το Εθνικό Μετσόβιο Πολυτεχνείο [1] και χρησιμοποιείται σε μία διεθνώς καταξιωμένη Σουίτα Εφαρμογών Γραφείου (OpenOffice [2]). Το συγκεκριμένο λεξιλόγιο, αν και ιδιαιτέρως ευρύ και πλήρες, περιλαμβάνει λέξεις σε μορφή μη χρησιμοποιήσιμη από το πρόγραμμά μας. Γι αυτό και έπρεπε να κάνουμε τις απαραίτητες μετατροπές, όπως θα εξηγήσουμε στη συνέχεια. Η πιο σημαντική δυσκολία, όμως, ήταν αναμφίβολα η εύρεση των αλγορίθμων για τη δημιουργία λέξεων, τη δημιουργία λεξικού, την αναζήτησή των λέξεων στο λεξικό κλπ. 1.4 Ιστορία του παιχνιδιού Scrabble Το Scrabble, αναμφισβήτητα ένα από τα πιο γνωστά παιχνίδια παγκοσμίως έχει μία πολύ ενδιαφέρουσα ιστορία, που αξίζει να δούμε, μιας και περισσότερα από 150 εκατομμύρια σετ του επιτραπέζιου αυτού παιχνιδιού έχουν πωληθεί σε 121 χώρες του κόσμου, από την κυκλοφορία του το 1931 μέχρι και σήμερα. 8

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Διάσημες προσωπικότητες αγαπούν αυτό το παιχνίδι. Η Μαντόνα, ο Μπάρακ Ομπάμα, ο Μπιλ και η Χίλαρυ Κλίντον, ο Κιάνου Ριβς έχουν δηλώσει ότι παίζουν μανιωδώς, όπως και η Kylie Minogue, o Mel Gibson, o Sting. 9

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Οι ηθοποιοί Willie Garson (Sex and the City) και Sarah Chalke (Scrubs) Οι ηθοποιοί Lauren Graham (Gilmore Girls) και Matthew Perry (Friends) Ο ηθοποιός Alec Baldwin Στη Μεγάλη Βρετανία έχει αποκτήσει ιδιαίτερη σημασία, εξαιτίας μιας σύμπτωσης: η Βασίλισσα Ελισάβετ είναι οπαδός του Scrabble και ο γιος της, 10

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Πρίγκιπας Κάρολος, γεννήθηκε τη χρονιά που κατοχυρώθηκε η εμπορική ονομασία του Scrabble. [3] Οι Βρετανοί δεν άφησαν απαρατήρητη αυτή τη σύμπτωση. Η Βρετανή καλλιτέχνης Λίζι Σάντερς, το 2008, χρονιά του εορτασμού της 60ής επετείου τόσο του Scrabble όσο και της γέννησης του Πρίγκιπα Καρόλου, φιλοτέχνησε το πορτραίτο του Καρόλου με τα κυβάκια του παιχνιδιού [4]. Η εικόνα του πρίγκιπα Καρόλου φιλοτεχνημένη με τετράγωνα του Scrabble Η ιστορία του Scrabble ξεκινά στις Ηνωμένες Πολιτείες της Αμερικής, από έναν αρχιτέκτονα με αρκετό ελεύθερο χρόνο - άλλωστε μιλάμε για την περίοδο της μεγάλης οικονομικής κρίσης, τη δεκαετία του 1930 τον Άλφρεντ Μόσερ Μπατς (Alfred Mosher Butts [13/04/1899 04/04/1993] [5]). 11

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Ο δημιουργός του παιχνιδιού Άλφρεντ Μόσερ Μπατς Ο Μπατς αποφάσισε να φτιάξει ένα επιτραπέζιο παιχνίδι για να ασχολείται με τους φίλους του. Το έπραξε όμως πολύ μεθοδικά. Ανέλυσε τα υπάρχοντα τότε παιχνίδια και κατέληξε ότι διακρίνονται σε τρεις κατηγορίες: Παιχνίδια αριθμών, όπως τα Bingo και Dice (Ζάρια) Παιχνίδια κινήσεων, όπως το Σκάκι και η Ντάμα Παιχνίδια λέξεων, όπως το Anagrams (ένα παιχνίδι αναγραμματισμών) Ο Μπατς λοιπόν θέλησε να σχεδιάσει ένα παιχνίδι που να εμπίπτει και στις τρεις προαναφερθείσες κατηγορίες. Γι αυτό συνδύασε τα χαρακτηριστικά των Αναγραμματισμών και του Σταυρόλεξου. Έτσι δημιούργησε το παιχνίδι με την ελληνικότατη λέξη «LEXIKO», το οποίο λίγο αργότερα μετονόμασε σε «Criss Cross Words» (Διαγωνο-Σταυρόλεξο). Για να κάνει σωστή κατανομή των διαθέσιμων γραμμάτων, ο Μπατς μελέτησε μερικά πρωτοσέλιδα των New York Times και υπολόγισε τη συχνότητα κάθε χαρακτήρα. Είναι εντυπωσιακό και μόνο να σκεφτεί κάποιος ότι αυτή η αρχική ανάλυση και κατανομή των χαρακτήρων, εξακολουθεί να ισχύει ακόμα και σήμερα και να χρησιμοποιείται στο παιχνίδι αυτό, παρά την όποια εξέλιξη. 12

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Το αρχικό παιχνίδι Criss-Cross Words, πρόγονος του Scrabble Παρά τις προσπάθειες του Μπατς, όλοι οι παραγωγοί παιχνιδιών της εποχής απέρριψαν την ιδέα του. Όταν όμως γνώρισε τον επιχειρηματία Τζέημς Μπρουνότ (James Brunot), εκείνος αποφάσισε να ασχοληθεί πραγματικά. Οι δυο τους έκαναν κάποιες αλλαγές στους κανονισμούς και στο σχεδιασμό και το σημαντικότερο βρήκαν και το νέο όνομα «Scrabble», που στην αγγλική γλώσσα σήμαινε κάτι σαν «ψηλαφώ φανατικά με τα δάχτυλα». Οι δημιουργοί έλαβαν το δίπλωμα ευρεσιτεχνίας την 1 η Δεκεμβρίου 1948. Το παιχνίδι κατοχυρώθηκε επίσημα ως «Scrabble Brand Crossword Game» στις 16 Δεκεμβρίου 1948. Από τότε άρχισε η μαζική παραγωγή σε μια μικρή βιοτεχνία στο Κονέκτικατ, όπου εργάζονταν κυρίως φίλοι και παρήγαν 12 σετ κάθε ώρα εργασίας. Τα πρώτα χρόνια δυσκολεύτηκαν αρκετά, αλλά στις αρχές της δεκαετίας του 1950, όπως λέγεται ο Μπρουνότ γνώρισε στις διακοπές του τον 13

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ πρόεδρο της εταιρίας Macy, τον Τζακ Στράους, ο οποίος ενθουσιάστηκε με το Scrabble και παρήγγειλε μερικά για το κατάστημά του. Μέσα σε ένα χρόνο «όλοι έπρεπε να παίξουν Scrabble» και ο Στράους πωλούσε 6000 σετ του παιχνιδιού κάθε εβδομάδα. Κι έτσι όλα πήραν το δρόμο τους. Το 1952 οι κατασκευαστές του παιχνιδιού, αντιλαμβανόμενοι την ολοένα αυξανόμενη ζήτηση, σύναψαν συνεργασία με την εταιρία Selchow & Righter, μια από τις πιο γνωστές εταιρίες παιχνιδιών εκείνη την εποχή, η οποία είχε αρνηθεί την παραγωγή του κατά τα αρχικά χρόνια του, με χρόνο ζωής σχεδόν έναν αιώνα, ώστε να αναλάβει την κατασκευή, διανομή και εμπορία του παιχνιδιού σε Η.Π.Α. και Καναδά. Ακόμα και η εταιρία αυτή όμως έπρεπε να αυξήσει δραματικά την παραγωγή της, αφού το Scrabble είχε εξελιχθεί σε φρενίτιδα και οι διαφημίσεις ήταν συνεχείς σε εφημερίδες, περιοδικά και τηλεόραση. Το 1972 η Selchow & Righter αγόρασε από τον Μπρουνότ το εμπορικό σήμα, αποκτώντας έτσι για λογαριασμό τους όλα τα δικαιώματα του Scrabble σε Η.Π.Α. και Καναδά. Το 1986 η Selchow & Righter πωλήθηκε στην COLECO, η οποία χρεοκόπησε τρία χρόνια αργότερα και τα κεφάλαιά της, και κυρίως το εμπορικό σήμα του Scrabble, αγοράστηκαν από την εταιρία Hasbro, τη μεγαλύτερη εταιρία παιχνιδιών στην Αμερική. Σήμερα το παιχνίδι Scrabble είναι γνωστό σε όλον τον κόσμο και υπάρχει σε διάφορες εκδόσεις (Junior, Standard, Deluxe, Travel) και γλώσσες. Υπάρχουν διάφοροι όμιλοι Scrabble που οργανώνουν τουρνουά του παιχνιδιού. Επίσης κάθε 2 14

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ χρόνια διοργανώνεται το Παγκόσμιο Πρωτάθλημα Scrabble. Στις Η.Π.Α. έχει εισαχθεί το παιχνίδι αυτό ακόμα και στα σχολεία, ως πρόσθετο μέτρο αντιμετώπισης της νεανικής εγκληματικότητας και της προώθησης του υγιούς συναγωνισμού. Γι αυτό και έχουν αναπτυχθεί εκδόσεις ειδικά για δασκάλους με υπόδειξη τρόπων διδασκαλίας ορθογραφίας. Διοργανώσεις παγκόσμιων διαγωνισμών Scrabble Εφαρμογή διδακτικών μεθόδων με τη χρήση του παιχνιδιού Το παιχνίδι αυτό έφτασε μέχρι τους τηλεοπτικούς δέκτες στη μορφή καθημερινού τηλεπαιχνιδιού στο κανάλι NBC των Η.Π.Α. Η προβολή του διήρκεσε από τον Ιούλιο του 1984 μέχρι τον Ιούνιο του 1993. Το «μότο» του τηλεπαιχνιδιού ήταν: «Every man dies. Not every man truly Scrabbles» (Μετάφραση: ο κάθε άνθρωπος ανεξαιρέτως κάποτε πεθαίνει, δεν πρόκειται όμως όλοι ανεξαιρέτως να παίξουν πραγματικά Scrabble). Το 2011 άρχισε να προβάλλεται μια νέα έκδοση του τηλεπαιχνιδιού. Ως επιστέγασμα όλης αυτής της ιστορίας το παιχνίδι Scrabble εισήχθη στο National Toy Hall of Fame το 2004. 15

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Το Scrabble ως τηλεπαιχνίδι στην Αμερικανική τηλεόραση τη δεκαετία του 1980 Ο Άλφρεντ Μόσερ Μπατς εύρισκε διαρκή ευχαρίστηση σε μια παρτίδα Scrabble με συγγενείς και φίλους μέχρι τα βαθιά γεράματα, όταν πλέον ζούσε σε ίδρυμα ευγηρίας και αγαπημένη του λιχουδιά, την οποία του έφερνε ο ανιψιός του Ρόμπερτ, ήταν οι γνωστές σοκολατένιες καραμέλες M&M. Πραγματικά ειρωνικό, ο δημιουργός του Scrabble να λατρεύει τις λιχουδιές με ονομασία ένα γράμμα της αλφαβήτου. Ο δημιουργός του παιχνιδιού απεβίωσε πλήρης ημερών το 1993, σε ηλικία 93 ετών [6], [7], [8], [9], [10]. 16

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ 1.5 Οι αρχαιοελληνικές ρίζες (Και ο Αχιλλέας έπαιζε Scrabble) Ο Αχιλλέας με τον Αίαντα παίζουν παιχνίδι παρόμοιο με το «αρχέγονο» άθυρμα. Σχηματίζοντας λέξεις προς όλες τις πιθανές κατευθύνσεις (όπως τη λέξη «πνεύμα») μπορούν οι παίκτες να παίξουν με τον πιο απλό τρόπο τον πρόγονο του δημοφιλούς Scrabble Ίσως να φαίνεται εντυπωσιακό και μόνο σαν σκέψη. Αν σκεφτούμε όμως ότι ένα μεγάλο κομμάτι του σημερινού πολιτισμού έχει τις ρίζες της δημιουργίας του στον αρχαίο Ελληνικό, τότε μπορούμε να δεχτούμε μια τέτοια πιθανότητα. Μετά από χρόνια έρευνας, μελέτη αρχαιολογικών ευρημάτων σε αρχαία ελληνικά αγγεία και σε τοιχογραφίες και επίπονη εργασία, ο μελετητής- 17

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ οικονομολόγος Γρηγόρης Ζώρζος κατάφερε να ολοκληρώσει την ανακατασκευή ενός αρχαίου παιχνιδιού, το άθυρμα «Αρχέγονα», δηλαδή αρχέγονο παιχνίδι. Το συγκεκριμένο παιχνίδι παιζόταν σε πίνακα με 256 τετράγωνα, με ένα ζάρι και δύο σειρές γραμμάτων διαφορετικού χρώματος, μία για κάθε παίκτη. Είναι λογικό να σκεφτούμε, λοιπόν, ότι πρόκειται για τον πρόγονο του σημερινού Scrabble. Για τα γράμματα-πιόνια του παιχνιδιού είχαν επιλεχθεί «τα 26 πρώιμα ελληνικά γράμματα, το αρχέγονο ή αρχέτυπο αλφάβητο, που είχε αποτυπώσει τις δονήσεις που δεχόταν ο άνθρωπος από τις κοσμικές δυνάμεις», όπως εξηγεί ο κύριος Ζώρζος. Το αλφαβητάριο-άθυρμα ήταν μια από τις τρεις μορφές εκμάθησης της δημιουργίας του κόσμου και η πλέον πολύπλοκη. Συνθέτει τα πρώιμα αρχαιοελληνικά γράμματα με τους αριθμούς και τις κοσμικές δονήσεις και δημιουργεί μια απλή σύνθεση, έτσι ώστε να μπορούν εύκολα όλοι να κατανοήσουν τη σκέψη και τις θεωρίες του Πλάτωνα και του Αριστοτέλη. Απευθύνεται, δε, σε κάθε ηλικία. Από τα παιδιά, που θέλουν να μάθουν το αλφάβητο, μέχρι εκείνους που ερευνούν το βαθύτερο νόημα της ύπαρξης της ζωής μέσα από τις παρακαταθήκες των αρχαίων Ελλήνων φιλοσόφων. Όσο για το ζάρι που καθοδηγεί τις κινήσεις των παικτών, συμβολίζει τις τέσσερις διαστάσεις του κόσμου. Το μήκος, το πλάτος, το ύψος και τον χρόνο [11]. 1.6 Το Scrabble πολύτιμο εργαλείο για την ανθρωπότητα Υπάρχει ακόμα ένα ενδιαφέρον αν και άγνωστο στο ευρύ κοινό στοιχείο από τον άνθρωπο Άλφρεντ Μπατς. Όπως παραδέχτηκε ο ίδιος σε στενό του φίλο προς το τέλος της ζωής του, όταν παρίστατο ως τιμώμενο πρόσωπο σε διεθνές τουρνουά Scrabble, ήταν πολύ κακός στην ορθογραφία. Παίζοντας το παιχνίδι που ο ίδιος δημιούργησε, βοηθήθηκε πολύ στη διόρθωση της δυσκολίας του αυτής. Γίνεται, λοιπόν, κατανοητός ο λόγος που έχουν φτάσει σήμερα τα παιχνίδια λέξεων, με κυριότερο βέβαια το Scrabble, να αποτελούν αναπόσπαστο κομμάτι στη διδασκαλία στα σχολεία σε αρκετές χώρες του κόσμου. Αρκετοί δάσκαλοι χρησιμοποιούν το παιχνίδι ως εκπαιδευτικό μέσο και εξηγούν το γιατί: «Το Scrabble δεν βοηθά μόνο στην ανάπτυξη του λεξιλογίου και την ορθογραφία των λέξεων. Οι μαθητές επίσης ασκούνται στα μαθηματικά, υπολογίζοντας τους βαθμούς των λέξεων και μαθαίνουν να συνεργάζονται στα πλαίσια μιας ομάδας», όπως αναφέρει σε έρευνα που έγινε στις Η.Π.Α. η εκπαιδευτικός Λόρι Γουίλκι [13]. Πρόκειται για ένα παιχνίδι που απαιτεί μεγάλη συγκέντρωση και μπορεί να ακούγεται ως κάτι υπερβολικό για παιδιά μικρής ηλικίας. Όμως αποδεικνύεται στην πράξη πως τα παιδιά «εθίζονται», σχεδόν, με το Scrabble και το αγαπούν, ειδικά όταν τους επιτρέπεται στα πρώτα τους βήματα με την ενασχόληση με το παιχνίδι να χρησιμοποιούν και ένα λεξικό. Έτσι ανεβαίνει η αυτοπεποίθησή τους και εμβαθύνουν ακόμα περισσότερο. Επίσης, σύμφωνα με την εργασία του σπουδαστή Γλωσσολογίας Βιτάλι Βοΐνοφ, από το πανεπιστήμιο του Τέξας Άρλινγκτον («University of Texas at Arlington») και η οποία παρουσιάστηκε στο πανεπιστήμιο της Καλιφόρνια στο Λος 18

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Άντζελες («UCLA - University of California, Los Angeles») [12], το παιχνίδι Scrabble μπορεί να χρησιμοποιηθεί ως εργαλείο διάσωσης μιας γλώσσας που απειλείται με εξαφάνιση. Η συγκεκριμένη εργασία ασχολήθηκε με τη γλώσσα που ομιλούνταν μέχρι τα τελευταία χρόνια στη Δημοκρατία της Τιβά, στη νότια Σιβηρία. Όπως αναφέρεται, η εξάπλωση των τηλεπικοινωνιών, όπως το διαδίκτυο, αλλά και η τηλεόραση έχουν φέρει πλέον τις αγγλόφωνες εκπομπές σε ολόκληρο τον πλανήτη. Όταν όμως ένα παιδί, στην ηλικία της ανάπτυξης ακόμα, με το πάτημα ενός κουμπιού φεύγει από το περιβάλλον του και μεταφέρεται σε έναν κόσμο με τον Μίκυ Μάους, τα Πόκεμον και τους άλλους γνωστούς παιδικούς ήρωες, τότε αμέσως δημιουργείται πρόβλημα και πολύ σύντομα θα ξεχαστούν η ιστορία, αλλά κυρίως η γλώσσα του τόπου του. Εκεί έρχονται τα παιχνίδια λέξεων τα οποία, μεταφρασμένα σε αντίστοιχη έκδοση για κάθε χώρα και γλώσσα, μπορούν να βοηθήσουν στη διατήρηση του λεξιλογίου. Και φυσικά υπάρχει και η άλλη διάσταση, ότι, δηλαδή, η μετάφραση του παιχνιδιού σε μια συγκεκριμένη γλώσσα ανεβάζει τη σημασία και την αναγνωρισιμότητα της γλώσσας. Μια τελευταία διάσταση στη χρησιμότητα του παιχνιδιού Scrabble, έρχεται να προσθέσει η αναφορά ενός μαθητή σε εργασία του, η οποία δημοσιεύτηκε στο διαδίκτυο [14]. Αναφέρεται, λοιπόν, ότι σε ευρύτερο επίπεδο η ενασχόληση με το Scrabble μπορεί δυνητικά να σώσει το οικοσύστημα. Οι τηλεοπτικοί δέκτες καταναλώνουν ενέργεια περίπου 300 κιλοβάτ την ώρα, τριπλάσια ποσότητα από ένα μεγάλο ψυγείο. Ένας φορητός υπολογιστής ο οποίος μένει ανοικτός 24 ώρες το 24ωρο, μέσα σε έναν χρόνο θα έχει καταναλώσει 1800 κιλοβατώρες! Δύο ώρες καθημερινά ενασχόληση με το Scrabble, κλείνοντας τηλεόραση και υπολογιστή, εξοικονομεί τεράστια ποσά ενέργειας για όλον τον χρόνο. Η χρήση του Scrabble ως μέσο εξοικονόμησης ενέργειας, είναι κάτι διασκεδαστικό, οικονομικό και διαθέσιμο στον καθένα, εκτός του ότι αυξάνει την εγκεφαλική δραστηριότητα. 19

ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ 20

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ ΚΕΦΑΛΑΙΟ 2: ΕΦΑΡΜΟΓΗ 2.1 Εργαλεία ανάπτυξης εφαρμογής Όπως αναφέραμε, η ανάπτυξη της εφαρμογής έγινε χρησιμοποιώντας τη γλώσσα προγραμματισμού JAVA, με τη βοήθεια του προγράμματος NetBeans. Η επιλογή της συγκεκριμένης γλώσσας έγινε κυρίως γιατί πρόκειται για αρκετά «απλή» γλώσσα και κατανοητή για κάποιον χωρίς ιδιαίτερα μεγάλες γνώσεις προγραμματισμού. Επίσης η Java προσφέρει πληθώρα έτοιμων βιβλιοθηκών, οι οποίες μπορούν να προσαρμοστούν χωρίς προβλήματα στις ανάγκες του προγραμματιστή. Επιπλέον, πρόκειται για μία γλώσσα που κάνει δυνατή τη γραφική απεικόνιση στοιχείων, κάτι που είναι προτιμότερο από το να αναπτύξουμε ένα τέτοιο παιχνίδι ώστε να εκτελείται σε ένα μαύρο παράθυρο DOS. Φυσικά έχουν υπάρξει τέτοιες υλοποιήσεις στο παρελθόν και μάλιστα αρκετά επιτυχημένες, αλλά θεωρήθηκε σωστό σε μία εποχή που κυριαρχούν τα όμορφα γραφικά και εικόνες και η αλληλεπίδραση ανθρώπου-υπολογιστή έχει κάνει τεράστια βήματα προς μια πιο εύληπτη και προσιτή άποψη, να αναπτύξουμε μία εφαρμογή με κύριο γνώμονα μια πιο ορθή γραφική απεικόνιση. Η επιλογή του προγράμματος NetBeans, επίσης δεν ήταν καθόλου τυχαία. Οι αρχικές προσπάθειες έγιναν χρησιμοποιώντας το αντίστοιχο (και πιο διαδεδομένο ίσως) πρόγραμμα Eclipse. Σύντομα όμως αποδείχτηκε ότι το συγκεκριμένο πρόγραμμα προορίζεται για πιο έμπειρους προγραμματιστές. Αντίθετα το NetBeans, είναι αρκετά πιο κατανοητό και προσιτό. Πρόκειται για δωρεάν διατιθέμενο πρόγραμμα, το οποίο επίσης εξελίσσεται συνεχώς. Στην εφαρμογή μας αποδείχτηκε υπερπολύτιμο και για έναν άλλο λόγο. Δίνει τη δυνατότητα να σχεδιάσουμε τα παράθυρα που θα εμφανίζονται στο χρήστη με τα γραφικά τους, σχεδιάζοντας αυτά ακριβώς τα παράθυρα, σαν απλή «ζωγραφική», προτού ακόμα εντρυφήσουμε στον κώδικα υλοποίησής τους. Είχαμε έτσι τη δυνατότητα να φέρουμε κάθε εικόνα ακριβώς στις απαιτήσεις μας, χωρίς να χρειάζονται δοκιμές επί δοκιμών. Εκτός αυτού, φυσικά πρόκειται για ένα πολύ εύχρηστο πρόγραμμα, το οποίο βοηθά στην άμεση πρόβλεψη και επίλυση των προβλημάτων στον κώδικα που αναπτύσσουμε. Προτείνει τις βέλτιστες διορθώσεις και σημειώνει τα κομμάτια που δημιουργούν πρόβλημα, έτσι ώστε ο προγραμματιστής να μπορεί να τα διορθώσει χωρίς κόπο. 21

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Ανάπτυξη κώδικα στο πρόγραμμα NetBeans 22

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Χρήση εύχρηστων φορμών για τη δημιουργία γραφικών, χωρίς την ανάγκη συγγραφής κώδικα προγραμματισμού 2.2 Βασική ιδέα υλοποίησης - Αρχικός σχεδιασμός Όπως είναι φυσικό, κατά την αρχικό σχεδιασμό της εφαρμογής, το σημείο αναφοράς ήταν το κεντρικό πάνελ (board) του παιχνιδιού, καθώς όλα θα κινούνταν γύρω από αυτό, μιας και αυτό είναι το κεντρικό παράθυρο που ενδιαφέρει τον παίκτη. Αυτό θα έπρεπε να είναι χωρισμένο σε 15x15 τετράγωνα, όπου θα μπορούν να τοποθετηθούν τα γράμματα των λέξεων. Δίπλα από το board θα υπάρχει ένα παράθυρο, στο οποίο θα φαίνονται χρήσιμες πληροφορίες, όπως η βαθμολογία των παικτών, οι λέξεις που τοποθετούνται, οι οδηγίες του παιχνιδιού κλπ. Το τρίτο πλαίσιο που συμπληρώνει το κεντρικό παράθυρο του παιχνιδιού είναι το πλαίσιο όπου ο παίκτης θα βλέπει τα γράμματά του και θα μπορεί να τα αναδιατάξει, ώστε να σχηματίσει πιο εύκολα τις πιθανές λέξεις. Το πρόγραμμα θα συμπληρώνεται από συμπληρωματικά παράθυρα και πλαίσια διαλόγου, όπως η οθόνη καλωσορίσματος, το πλαίσιο εισαγωγής ονόματος και συμπληρωματικών στοιχείων, οι οδηγίες του παιχνιδιού κλπ. Μετά τη σκέψη και το σχεδιασμό σε χαρτί των παραπάνω παραθύρων, ώστε να καθορίσουμε το πώς θέλουμε να εμφανίζονται, έπρεπε να ασχοληθούμε με το σημαντικότερο ίσως κομμάτι της εφαρμογής, το οποίο όμως δεν γίνεται αντιληπτό 23

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ από τον χρήστη-παίκτη. Αυτό έχει να κάνει με τους απαιτούμενους αλγορίθμους. Οι βασικοί αλγόριθμοι που χρειάζονται είναι: Έλεγχος ορθότητας τοποθετημένης λέξης (Παίκτης & Υπολογιστής) Υπολογισμός βαθμολογίας λέξης (Παίκτης & Υπολογιστής) Δημιουργία λέξης (βέλτιστης ή μη) από τα διαθέσιμα γράμματα (Υπολογιστής) Τοποθέτηση λέξης στο board (Υπολογιστής) Η ιδέα και η υλοποίηση όλων των αλγορίθμων θα αναλυθεί εκτενώς. 2.3 Ελληνική έκδοση Σκραμπλ Η ελληνική έκδοση έχει 104 γράμματα: 65 γράμματα που παίρνουν 1 πόντο: Α (12), Ε (8), Η (7), Ι (8), Ν (6), Ο (9), Σ (7), Τα (8) 17 γράμματα που παίρνουν 2 πόντους: Κ (4), Π (4), Ρ (5), Υ (4) 9 γράμματα που παίρνουν 3 πόντους: Λ (3), Μ (3), Ω (3) 4 γράμματα που παίρνουν 4 πόντους: Γ (2), Δ (2) 3 γράμματα που παίρνουν 8 πόντους: Β (1), Φ (1), Χ (1) 4 γράμματα που παίρνουν 10 πόντους: Ζ (1), Θ (1), Χ (1), Ψ (1) 2 λευκά (χρησιμοποιούνται σαν μπαλαντέρ) που δεν παίρνουν κανέναν πόντο 2.4 Δημιουργία λεξικού Όπως είπαμε νωρίτερα το αρχικό λεξικό που χρησιμοποιήσαμε χρειαζόταν κάποιες τροποποιήσεις για να γίνει αξιοποιήσιμο από την εφαρμογή μας. Το αρχείο που χρησιμοποιήσαμε ήταν ένα αρχείο κειμένου με μια λίστα 574.961 λέξεων ταξινομημένων αλφαβητικά. Το μόνο πρόβλημα όμως ήταν ότι οι λέξεις αυτές, επειδή ακριβώς χρησιμοποιούνται σε Σουίτα Εφαρμογών Γραφείου, βρισκόταν σε μορφή που περιείχε τις λέξεις σε «μικρά» γράμματα και όχι σε κεφαλαία, όπως θέλαμε εμείς. Αποφασίσαμε λοιπόν να χρησιμοποιήσουμε ένα πρόγραμμα επεξεργαστή κειμένου όπως το απλό Σημειωματάριο των Windows, αλλά λίγο πιο ενισχυμένο. Το πρόγραμμα αυτό ήταν το «NotePad++», το οποίο είναι ανοιχτού-κώδικα (opensource) [15]. Με το πρόγραμμα αυτό δημιουργήσαμε ένα «πακέτο» (script) πολλαπλής αντικατάστασης. Φτιάξαμε μια λίστα με όλους τους πεζούς χαρακτήρες 24

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ και την αντιστοίχισή τους σε κεφαλαίους, συμπεριλαμβάνοντας και τους τονισμένους, τα διαλυτικά, αλλά και το τελικό «Σ». Ενεργοποιώντας αυτή τη διαδικασία οι λέξεις μετατράπηκαν σε λέξεις μόνο με κεφαλαία γράμματα. Στη συνέχεια, με ένα αντίστοιχο script, αλλάξαμε τη μορφή της λίστας. Επειδή η μορφή σε πλήρη στοίχιση με ένα κενό μεταξύ των λέξεων δεν μας εξυπηρετούσε, αντικαταστήσαμε το κενό με την «εισαγωγή γραμμής». Έτσι καταλήξαμε με μια λίστα λέξεων όπου η κάθε λέξη βρίσκεται σε ξεχωριστή γραμμή στο αρχείο κειμένου. Το γεγονός ότι η αρχική λίστα βρισκόταν ταξινομημένη αλφαβητικά μας βοήθησε ώστε να μη χρειαστεί περαιτέρω επεξεργασία. 2.5 Ανάλυση αρχείων αλγορίθμων μεθόδων Στην παρούσα ενότητα θα αναλυθεί το κύριο μέρος της εφαρμογής, επεξηγώντας τα σημαντικότερα τμήματα του κώδικα που αναπτύχθηκε. Αρχικά θα δούμε τις διακριτές κλάσεις, χωρισμένες σε αρχεία, στη συνέχεια τις μεθόδους και τις δομές της γλώσσας JAVA που χρησιμοποιήσαμε, επεξηγώντας τους λόγους που μας οδήγησαν σε συγκεκριμένες επιλογές έναντι άλλων και τελικά θα αναλύσουμε τους αλγόριθμους που χρησιμοποιήθηκαν. Κλάση SplashScreen.java Με την εκτέλεση του προγράμματος η πρώτη κλάση που εκτελείται είναι η SplashScreen.java από το αρχείο με το ίδιο όνομα. Η συγκεκριμένη κλάση δεν έχει πολλές λειτουργίες, αλλά λίγες και σημαντικές. Αρχικά, αναγνωρίζει την ανάλυση της οθόνης στην οποία εκτελείται το πρόγραμμα. Αυτό γίνεται επειδή για να εκτελεστεί το συγκεκριμένο πρόγραμμα, υπάρχει ως ελάχιστο απαιτούμενο η κάθετη ανάλυση της οθόνης να είναι 590 εικονοστοιχεία (pixels). Θεωρήθηκε κατά τον σχεδιασμό του προγράμματος ότι για την καθαρή απεικόνιση το ελάχιστο μέγεθος του παραθύρου που περιλαμβάνει το Board θα πρέπει να είναι στα 600 εικονοστοιχεία, άρα για να μπορεί να απεικονιστεί αυτό, θέσαμε την συγκεκριμένη κάθετη ανάλυση ως προαπαιτούμενη. Επίσης η συγκεκριμένη κλάση απεικονίζει το αρχικό παράθυρο της εφαρμογής με τον τίτλο, όπως οι περισσότερες εφαρμογές που κυκλοφορούν σήμερα, και δίνει εντολή να εκτελεστεί η επόμενη κλάση Input.java. Τέλος, αρχικοποιεί το λεξικό της εφαρμογής. Αυτή η επιλογή μας θα αναλυθεί πιο κάτω. Κλάση Input.java Η συγκεκριμένη κλάση εμφανίζει το παράθυρο εισαγωγής στοιχείων από τον χρήστη. Στην παρούσα έκδοση της εφαρμογής, ο χρήστης εισάγει απλά το όνομα με 25

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ το οποίο επιθυμεί να παίξει και πατάει το πλήκτρο «Εντάξει» για να συνεχίσει ή «Κλείσιμο», αν, για οποιονδήποτε λόγο, επιθυμεί να τερματίσει την εφαρμογή. Κατά την ανάπτυξη του προγράμματος υπήρχε η σκέψη και για άλλες επιλογές, οι οποίες θεωρήθηκε προτιμότερο να παραλειφθούν στη συγκεκριμένη φάση, μπορούν όμως να προστεθούν σε μελλοντικές εκδόσεις. Η σημαντικότερη ίσως επιλογή, πάνω στην οποία μπορεί να γίνει περαιτέρω ανάλυση, είναι η επιλογή επιπέδου δυσκολίας. Μπορεί κάποιος να αναρωτηθεί, προφανώς, πώς είναι δυνατόν να έχει παραλειφθεί μια τέτοια επιλογή ακόμα και στην αρχική έκδοση αυτού του προγράμματος. Πρόκειται για παιχνίδι βαθμολόγησης λέξεων, άρα θα πρέπει να δίνουμε την επιλογή στον παίκτη να επιλέξει το πόσο «έξυπνος» και «διορατικός» θα είναι ο υπολογιστής αντίπαλος. Μετά από αρκετές δοκιμές, όμως, διαπιστώθηκε ότι ο αντίπαλος έχει ικανοποιητικό επίπεδο δυσκολίας, ίσως και σχετικά δύσκολο για κάποιους. Σίγουρα στο μέλλον μπορεί να προστεθεί και κάποιο πολύ εύκολο ή πολύ δύσκολο επίπεδο δυσκολίας. Η διαδικασία αυτή θα γίνει κατανοητή σίγουρα όταν αναλύσουμε τον αλγόριθμο με τον οποίο αποφασίζει ο υπολογιστής την επόμενη κίνησή του. Επίσης, άλλες δυνατές επιλογές που μπορούν να προστεθούν είναι το αν ο παίκτης θέλει να βλέπει και ο ίδιος τα γράμματα του υπολογιστή με τα οποία προσπαθεί να σχηματίσει λέξεις, όπως επίσης και ο χρόνος τερματισμού του παιχνιδιού. Στην παρούσα έκδοση το παιχνίδι τελειώνει όπως και με τους επίσημους κανόνες, δηλαδή όταν τελειώσουν τα γράμματα και δεν μπορούν να σχηματιστούν νέες λέξεις. Θα πρέπει όμως να υπάρξει και επιλογή για τερματισμό σε συγκεκριμένο αριθμό λέξεων ή αριθμό κινήσεων η ακόμα και σε συγκεκριμένο χρονικό όριο. Μια άλλη λειτουργία που επιτελεί η συγκεκριμένη κλάση είναι η αρχικοποίηση των απαραίτητων πινάκων για την εκτέλεση του προγράμματος. Η αρχικοποίηση αυτών των πινάκων γίνεται σε αυτή τη στιγμή, επειδή οι πίνακες αυτοί θα μεταβάλλονται συνεχώς και, άρα, θέλουμε να δημιουργηθούν με το ξεκίνημα του προγράμματος με αρχικές τιμές που θα θέσουμε εμείς, ώστε να μην υπάρξει πρόβλημα κατά την πρώτη προσπάθεια μεταβολής τους. Όταν ο παίκτης πατήσει το πλήκτρο «Εντάξει», αφού ελεγχθεί ότι έχει εισάγει κάποιο όνομα, ειδάλλως θα προειδοποιηθεί για το λάθος του και θα κληθεί να το διορθώσει, δημιουργούνται τα επόμενα τρία βασικά παράθυρα της εφαρμογής, εκτελώντας τις αντίστοιχες κλάσεις τους. Κλάση MyLettersPanel.java Ευθύνη της συγκεκριμένης κλάσης είναι η απεικόνιση του πάνελ το οποίο περιλαμβάνει τις θέσεις όπου θα εμφανίζονται τα γράμματα του παίκτη και τα οποία θα μπορεί να αναδιατάξει, ώστε να σχηματίσει τις πιθανές λέξεις. Στη συγκεκριμένη κλάση αρχικοποιούνται οι απαραίτητες μεταβλητές, όπως επίσης και το σύνολο των διαθέσιμων γραμμάτων για το παιχνίδι. Υλοποιείται 26

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ δηλαδή σε γλώσσα υπολογιστή ο γνωστός «σάκος» του παιχνιδιού που περιλαμβάνει τα 104 γράμματα, με τα οποία θα παίξουν οι παίκτες. Μία ακόμα λειτουργία είναι η απόδοση των γραμμάτων στους παίκτες με ταυτόχρονη, φυσικά, αφαίρεση από το σύνολο των γραμμάτων. Υπάρχει, ακόμα, το πλήκτρο «Αλλαγή Γραμμάτων», με το οποίο ο παίκτης αλλάζει τα γράμματα, όταν δεν μπορεί να σχηματίσει λέξη, παραδίδοντας τη σειρά του στον αντίπαλο, αλλά και συμπληρώνει τα κενά γράμματα, όταν παίξει επιτυχώς μια λέξη. Επιπροσθέτως, αναπτύσσονται οι μέθοδοι που θα επιτρέπουν στην εφαρμογή να απεικονίζει σωστά τα γράμματα, όσο αυτά θα μετακινούνται. Επειδή η υλοποίηση σε JAVA δημιούργησε αρκετά προβλήματα, η καλύτερη λύση που δόθηκε για την ανανέωση του παραθύρου και την απεικόνιση των αλλαγών στα κουτιά με τα γράμματα, ήταν η ανανέωση με την κίνηση του ποντικιού πάνω στο παράθυρο. Όταν δηλαδή υπάρξει αλλαγή σε κάποιο γράμμα στο συγκεκριμένο πάνελ, δεν μπορεί να ανανεωθεί αυτόματα, αλλά μόνο όταν κινήσουμε το ποντίκι του υπολογιστή πάνω από το πάνελ. Κλάση ScrabbleStatusBox.java Με την συγκεκριμένη κλάση υλοποιείται το παράθυρο πληροφοριών του παιχνιδιού. Εδώ φαίνεται η αθροιστική βαθμολογία των δύο αντιπάλων, όπως και ο αριθμός των αποδεκτών λέξεων που έχουν σχηματίσει, αλλά και η λέξη που σχηματίστηκε κατά την τελευταία κίνηση. Επίσης υπάρχει και το πλήκτρο που οδηγεί στο αρχείο με τις οδηγίες του παιχνιδιού. Ακόμα υπάρχει το πλήκτρο «ΠΑΙΞΕ» που πατά ο παίκτης, όταν τοποθετήσει τη λέξη του στο κεντρικό πάνελ και επιθυμεί να υπολογιστεί η βαθμολογία του, συνεχίζοντας έτσι το παιχνίδι. Φυσικά, υπάρχει και το πλήκτρο τερματισμού και εξόδου από το παιχνίδι. Κλάση ScrabbleBoard.java Με την κλάση αυτή παρουσιάζεται το κεντρικό πάνελ του παιχνιδιού. Η κλάση ScrabbleBoard είναι υπεύθυνη για την εμφάνιση τόσο του πάνελ, όσο και των γραμμάτων που θα τοποθετούνται. Αρχικά με την εμφάνιση του πάνελ χρωματίζονται με χαρακτηριστικά χρώματα τα ειδικά τετράγωνα για να καταδείξουν τις θέσεις που δίνουν περισσότερους βαθμούς στον παίκτη που θα τοποθετήσει σε αυτές τα γράμματά του. Στη συνέχεια, κατά την τοποθέτηση των γραμμάτων, η κλάση με τις μεθόδους της αναλαμβάνει τη σωστή απεικόνιση των νέων γραμμάτων, αλλά και την αφαίρεσή τους και την επιστροφή στον παίκτη, αν δεν είναι αποδεκτή η λέξη. Αυτό γίνεται χρησιμοποιώντας τις εικόνες των γραμμάτων που έχουμε εισάγει στη βιβλιοθήκη της εφαρμογής, ώστε οι χαρακτήρες πάνω στα τετράγωνα να εμφανίζονται σαν πραγματικά τετράγωνα του παιχνιδιού, με τους βαθμούς που αποδίδει κάθε γράμμα. 27

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Κλάση TreeSetDictionary.java Η συγκεκριμένη κλάση επιτελεί μία μοναδική, αλλά και σημαντικότατη εργασία. Είναι υπεύθυνη για τη δημιουργία του λεξιλογίου το οποίο θα αποτελεί τη λίστα με τις αποδεκτές λέξεις για το παιχνίδι. Όπως αναφέραμε νωρίτερα, το αρχικό λεξιλόγιο που χρησιμοποιήσαμε είναι μια λίστα λέξεων που δημιουργήθηκε από το Εθνικό Μετσόβιο Πολυτεχνείο και χρησιμοποιείται στη Σουίτα OpenOffice. Η λίστα όμως αυτή, μιας και πρόκειται για μια μακροσκελή λίστα λέξεων, έπρεπε να μετατραπεί σε μορφή κατάλληλη που να επιτρέπει την ταχύτατη προσπέλαση και αναζήτηση, αφού θα χρησιμοποιείται πολλές φορές σε κάθε κίνηση των παικτών. Κατά την εκτέλεση της κλάσης αυτής λοιπόν, το αρχείο μετατρέπεται σε ένα TreeSet, όπως θα αναλύσουμε παρακάτω. Κλάση Anagrams.java Με την κλάση αυτή αναζητούνται κάθε φορά που παίζει ο υπολογιστής οι αναγραμματισμοί των διαθέσιμων γραμμάτων, ώστε να σχηματιστούν όλες οι πιθανές λέξεις. Κλάση CreateWordsList.java Στην κλάση αυτή ελέγχεται το Board για τις λέξεις που περιέχει. Αυτές τοποθετούνται σε μια λίστα για έλεγχο σε σχέση με το λεξικό. Συγκρίνονται, λοιπόν οι λέξεις αυτές με το λεξικό, κι αν είναι σωστές δίνονται οι βαθμοί στον παίκτη και συνεχίζεται το παιχνίδι. Κλάση CPUTurnToPlay.java Η συγκεκριμένη κλάση είναι υπεύθυνη για την κίνηση που θα αποφασίσει να κάνει ο υπολογιστής. Αρχικά, αναζητά τις θέσεις που μπορούν να τοποθετηθούν νέες λέξεις. Στη συνέχεια χρησιμοποιούνται τα διαθέσιμα γράμματα για το σχηματισμό αναγραμματισμών, τοποθετούνται όλες οι υποψήφιες λέξεις σε λίστα, η οποία μπορεί να ταξινομηθεί με βάση τους βαθμούς που θα αποφέρει στον υπολογιστή, και στη συνέχεια τοποθετείται η λέξη που αποτελεί την τελική επιλογή στο Board, δίνοντας τους βαθμούς στον υπολογιστή. 28

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ ΑΛΓΟΡΙΘΜΟΙ Έλεγχος ορθότητας τοποθετημένης λέξης Κατά την έναρξη του παιχνιδιού δημιουργούνται δυο πίνακες για το Board του παιχνιδιού: ο boardarray και ο boardarrayflag. Και οι δυο έχουν τις διαστάσεις του Board, δηλαδή 15x15. Ο πίνακας boardarray περιέχει τα γράμματα που τοποθετούνται στο ταμπλώ. Ο πίνακας boardarrayflag δείχνει σε ποια τετράγωνα τοποθετήθηκαν γράμματα κατά την τελευταία κίνηση. Δηλαδή, όταν ο παίκτης τοποθετήσει τα γράμματά του, σε κάθε τετράγωνο που αφήνει ένα γράμμα «υψώνεται σημαία», δηλαδή τοποθετείται στο αντίστοιχο κελί του boardarrayflag μια σημαία, ένας προκαθορισμένος χαρακτήρας (για εμάς το θαυμαστικό «!»). Όταν τελειώσει η κίνηση, είτε θετικά με τον παίκτη να παίρνει τους βαθμούς, είτε αρνητικά με λάθος λέξη, άρα να επιστρέφονται τα γράμματα, ο πίνακας αδειάζει, φεύγουν όλες οι «σημαίες», ώστε κατά την επόμενη κίνηση να μην παραμείνουν υπολείμματα προηγούμενων κινήσεων. Πίνακας BoardArray πριν την τοποθέτηση της λέξης μας Μ Γ Α Τ Α Τ Ι 29

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Πίνακας BoardArray μετά την τοποθέτηση της λέξης μας Τ Α Μ Γ Α Τ Α Μ Α Τ Ι Πίνακας BoardArrayFlag πριν την τοποθέτηση της λέξης μας 30

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Πίνακας BoardArrayFlag μετά την τοποθέτηση της λέξης μας!!!! Όταν, λοιπόν, ξεκινήσει ο έλεγχος για τις λέξεις που σχηματίστηκαν κατά την τελευταία κίνηση, θα ελεγχθούν πρώτα τα κελιά του boardarrayflag που έχουν «σημαία». Για κάθε επισημασμένο κελί, θα ελεγχθούν τα διπλανά του (στο αντίστοιχο στο boardarray, όμως) για να διαπιστωθεί αν περιέχουν κάποιο γράμμα. Αν περιέχεται γράμμα, αυτό σημαίνει ότι χρησιμοποιήσαμε κάποιο προϋπάρχον γράμμα για να συμπληρώσουμε τη λέξη μας. Αν δεν υπάρχει γράμμα, αλλά στο boardarrayflag υπάρχει άλλη σημαία, τότε προχωράμε, καθώς κι εκεί έχουμε τοποθετήσει εμείς νέο γράμμα. Όταν φτάσουμε στην τελευταία σημαία και δίπλα υπάρχει κενό, τόσο στον boardarrayflag, όσο και στον boardarray, τότε προκύπτει ότι βρήκαμε την αρχή της λέξης που τοποθετήσαμε. Κάνουμε την ίδια διαδικασία και για το τέλος της λέξης. Όταν βρούμε ολόκληρη την λέξη, την τοποθετούμε σε μια ArrayList την οποία έχουμε ονομάσει wordlist. Ο έλεγχος συνεχίζεται για τις επόμενες λέξεις, γιατί πιθανόν σε μία κίνησή μας να έχουν σχηματιστεί περισσότερες από μια λέξεις. Όταν ευρεθούν όλες οι λέξεις και τοποθετηθούν στην wordlist, οι νέες λέξεις, δηλαδή εξαιρώντας τις λέξεις από τις προηγούμενες κινήσεις, μεταφέρονται σε νέα λίστα, την wordsforcomparison. Οι λέξεις αυτής της λίστας τώρα συγκρίνονται με το λεξικό μας. Αν υπάρχουν όλες, τότε η κίνηση θεωρείται επιτυχημένη και ο παίκτης βαθμολογείται για αυτήν. Αν έστω και μία δεν υπάρχει, τότε η κίνηση θεωρείται λάθος, και επιστρέφονται τα γράμματα στον παίκτη. Υπολογισμός βαθμολογίας λέξης Όταν ο παίκτης κάνει κάποια επιτυχημένη κίνηση, πρέπει να πάρει τους απαραίτητους βαθμούς. Αυτό γίνεται παρατηρώντας τα τετράγωνα στα οποία τοποθέτησε τα γράμματά του. Για να βρούμε ποια είναι αυτά, όπως είδαμε έχουμε 31

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ ήδη δημιουργήσει τον πίνακα boardarrayflag. Άρα βλέποντας τα επισημασμένα κελιά, μπορούμε να δούμε ποια γράμματα έχει τοποθετήσει. Αρχικά βλέπουμε για ποιο γράμμα πρόκειται. Για κάθε γράμμα προσθέτουμε τη βαθμολογία του. Στη συνέχεια ελέγχουμε αν πρόκειται για τετράγωνο που δίνει διπλούς ή τριπλούς βαθμούς στο γράμμα αυτό, χρησιμοποιώντας τις συντεταγμένες του. Ακολούθως, μετά τον έλεγχο ολόκληρης της λέξης, ελέγχουμε αν περιλαμβάνεται τετράγωνο που διπλασιάζει ή τριπλασιάζει τους βαθμούς ολόκληρης της λέξης και δίνουμε τους τελικούς βαθμούς. Αυτή η διαδικασία γίνεται πολύ απλά με ένα Switch-case, ανάλογα δηλαδή με το τετράγωνο που επιλέγουμε δίνουμε τους αντίστοιχους βαθμούς. Δημιουργία λέξης από τα διαθέσιμα γράμματα και τοποθέτησης στο ταμπλώ Εδώ θα αναλυθεί η αρκετά πολύπλοκη διαδικασία, η οποία ακολουθείται για το σχηματισμό λέξης από τον υπολογιστή. Ο υπολογιστής ξεκινά έχοντας στη διάθεσή του τα 7 γράμματα που του έχουν δοθεί. Αρχικά πρέπει να διαπιστώσει σε ποια τετράγωνα μπορεί να τοποθετήσει τα δικά του γράμματα. Δηλαδή να βρει ποια τετράγωνα δεν είναι κατειλημμένα, αλλά ταυτόχρονα είναι παρακείμενα σε τετράγωνα που περιέχουν κάποιο γράμμα, ώστε να συμπληρώσουν μια λέξη. Οι κινήσεις του υπολογιστή γίνονται σε δύο στάδια κάθε φορά, μια για οριζόντια κίνηση και μια για κάθετη. Γι αυτό ξεκινάμε με δυο πίνακες: availablehorizontalpositions και availableverticalpositions. Ελέγχεται, λοιπόν, αρχικά σε ποια τετράγωνα περιέχονται γράμματα, αλλά τα διπλανά τους είναι κενά. Δηλαδή, για τις οριζόντιες θέσεις, ελέγχεται αν για παράδειγμα το κελί (7,7) περιέχει κάποιο γράμμα και ταυτόχρονα το (7,6) και το (7,8) είναι άδεια. Αντίστοιχα για τις κάθετες κινήσεις. Όταν βρεθούν τέτοια τετράγωνα, τότε στους δυο πίνακες που αναφέραμε τοποθετείται «σημαία». Θεωρούμε δηλαδή ότι οι θέσεις με «σημαία» θεωρούνται υποψήφιες για τοποθέτηση λέξης και μπορούν να χρησιμοποιηθούν ως «άγκυρα». Στη συνέχεια, για κάθε «άγκυρα», δηλαδή για κάθε επισημασμένη θέση στο ταμπλώ, θα βρούμε όλους τους δυνατούς αναγραμματισμούς. Αυτό γίνεται ως εξής: η «άγκυρα» αντιστοιχεί σε ένα γράμμα. Το γράμμα αυτό μαζί με τα 7 γράμματα που έχει στη διάθεσή του ο υπολογιστής, δίδονται στην κλάση Anagrams για να σχηματιστούν όλες οι λέξεις. Τη διαδικασία αυτή θα τη δούμε αργότερα. Η λίστα που επιστρέφεται συγκρίνεται με το λεξικό μας. Εδώ θέλουμε την «τομή» των δύο συνόλων, δηλαδή τις λέξεις της λίστας που υπάρχουν στο λεξικό και άρα μπορούν να γίνουν αποδεκτές. Γι αυτό χρησιμοποιούμε τη μέθοδο retainall. Ακολούθως, συνδέουμε κάθε λίστα που δημιουργήθηκε με τη θέση για την οποία δημιουργήθηκε. Δηλαδή οι αναγραμματισμοί που δημιουργήθηκαν χρησιμοποιώντας το γράμμα στη θέση (4,10), τοποθετούνται σε πίνακα στη θέση (4,10). Αυτόν τον νέο πίνακα τον ονομάζουμε positionandanagramshorizontal. 32

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Αντίστοιχα δημιουργούμε και τον πίνακα positionandanagramsvertical. Δηλαδή πρόκειται για πίνακες 15x15 που τα στοιχεία τους είναι λίστες λέξεων. Κάπου εδώ η διαδικασία μπορεί να διαφοροποιηθεί ανάλογα με το αν θέλουμε να κάνουμε ταξινόμηση ως προς τους βαθμούς που δίνει κάθε επιλογή. Στην παρούσα υλοποίηση, προσπεράσαμε αυτό το σημείο. Απλά επιλέγουμε τυχαία μία λέξη από όλες τις πιθανές που έχουμε στη διάθεσή μας για όλες τις πιθανές θέσεις. Δηλαδή επιλέγουμε μία οποιαδήποτε λέξη από οποιαδήποτε θέση. Τώρα ο υπολογιστής προσπαθεί να τοποθετήσει αυτήν τη λέξη. Ακόμα δεν έχει γίνει ο έλεγχος αν είναι δυνατή αυτή η τοποθέτηση, δηλαδή αν υπάρχουν αρκετά κενά τετράγωνα στο συγκεκριμένο σημείο. Ο έλεγχος αυτός θα γίνει κατά την προσπάθεια τοποθέτησης. Κάθε λέξη που υπάρχει στις λίστες που σχηματίστηκαν έχει ένα αναγνωριστικό θέσης. Οι λέξεις βρίσκονται, δηλαδή, στη μορφή «Hor3+12-ΒΟΥΝΟ», που σημαίνει ότι έχουμε την υποψήφια λέξη «ΒΟΥΝΟ» η οποία θα χρησιμοποιήσει την άγκυρα στη θέση (3,12) και θα τοποθετηθεί οριζόντια. Ο υπολογιστής λοιπόν διαβάζει αυτό το αναγνωριστικό και πάει στη συγκεκριμένη θέση. Εκεί κάνει έναν ακόμα έλεγχο. Ελέγχει σε ποια θέση μέσα στη λέξη του βρίσκεται ο «χαρακτήραςάγκυρα». Στο παράδειγμά μας, δηλαδή, ελέγχει ποιο γράμμα από τη λέξη «ΒΟΥΝΟ» βρίσκεται στη θέση (3,12). Έστω ότι είναι το γράμμα «Υ». Άρα τώρα ξέρει πώς θα τοποθετήσει τα υπόλοιπα γράμματα. Αφού το γράμμα «Υ» βρίσκεται στη θέση (3,12), τότε θα πρέπει να τοποθετήσει το «Β» στη θέση (3,10), το «Ο» στη θέση (3,11), το «Ν» στη θέση (3,13) και το «Ο» στη θέση (3,14). Αν για οποιονδήποτε λόγο δεν είναι δυνατή η τοποθέτηση σε αυτές τις θέσεις, είτε γιατί υπάρχει άλλη λέξη ήδη εκεί, είτε γιατί δεν αρκούν τα τετράγωνα, τότε εγκαταλείπεται η προσπάθεια τοποθέτησης της συγκεκριμένης λέξης και επιλέγεται μια άλλη και γίνεται προσπάθεια τοποθέτησής της από την αρχή. Εδώ μπορεί κάποιος να αναρωτηθεί τι γίνεται αν ο υπολογιστής δεν χρησιμοποιήσει μία αλλά 2 ή περισσότερες «άγκυρες», δηλαδή ήδη τοποθετημένα γράμματα. Τότε ο αλγόριθμος, αν διαπιστώσει ότι ένα κελί είναι ήδη κατειλημμένο, ελέγχει αν το γράμμα που καταλαμβάνει το κελί είναι ίδιο με το γράμμα που θέλει να τοποθετήσει σε αυτό. Αν είναι ίδιο συνεχίζει την τοποθέτηση της λέξης αγνοώντας τους πόντους για την συγκεκριμένη θέση. Αν όμως είναι διαφορετικό, αφαιρεί τη λέξη και συνεχίζει με την επόμενη υποψήφια, θεωρώντας την προσπάθεια τοποθέτησης αποτυχημένη. Τελικά, ο υπολογιστής παίρνει τους βαθμούς της λέξης του, με τον ίδιο τρόπο που είδαμε προηγουμένως και για τον παίκτη-άνθρωπο. Δημιουργία αναγραμματισμών Τώρα θα δούμε τον τρόπο με τον οποίο σχηματίζονται οι αναγραμματισμοί, δηλαδή πώς σχηματίζονται όλες οι λέξεις από τα 7+1 διαθέσιμα γράμματα. 33

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Ο αλγόριθμος χρησιμοποιεί την απλή λογική της περιστροφής χαρακτήρων. Δηλαδή κάθε φορά, διατηρούμε σταθερό το πρόθεμα και περιστρέφουμε τους υπόλοιπους χαρακτήρες. Το πρόθεμα αρχίζει ως ένα γράμμα, περιστρέφοντας τα υπόλοιπα 7, μετά γίνεται 2 γράμματα και περιστρέφουμε τα υπόλοιπα 6 κ.ο.κ. Αυτό θα γίνει πιο κατανοητό με ένα σχήμα. [1, 2, 3] 1 2 3 2 3 1 3 1 2 3 2 3 1 2 1 Θα αναλύσουμε τον αλγόριθμο με αριθμούς, για να γίνει πιο κατανοητό. Ας πούμε ότι έχουμε τα στοιχεία 1, 2, 3 και θέλουμε να φτιάξουμε όλους τους πιθανούς αναγραμματισμούς που μπορούν να σχηματιστούν με αυτά τα στοιχεία. Ξεκινάμε διατηρώντας σταθερό το πρώτο στοιχείο «1». Τώρα χρησιμοποιούμε («περιστρέφουμε») τα εναπομείναντα στοιχεία. Στον πρώτο κλάδο χρησιμοποιούμε το «2» και στον δεύτερο το «3». Συνεχίζοντας στον πρώτο κλάδο, το τελευταίο στοιχείο που απομένει είναι το «3». Στον δεύτερο κλάδο το μοναδικό στοιχείο που απομένει είναι το «2». Έτσι, διατηρώντας σταθερό το «1», φτιάξαμε τους αναγραμματισμούς «123» και «132». Προφανώς κάθε στοιχείο χρησιμοποιείται μόνο μια φορά, δηλαδή μετά την τοποθέτησή του, αφαιρείται από το αρχικό σύνολο. Συνεχίζοντας τον αλγόριθμο καταλήγουμε με όλους τους αναγραμματισμούς: «123», «132», «213», «231», «312» και «321». Παρατηρείτε όμως κάτι; Δεν είναι μόνο αυτοί οι πιθανοί αναγραμματισμοί. Αυτοί είναι μόνο οι αναγραμματισμοί που περιέχουν όλα τα στοιχεία του αρχικού συνόλου. Αν δηλαδή είχαμε ως αρχικό σύνολο 8 γράμματα, θα κατασκευάζαμε μόνο λέξεις που να περιέχουν και τα 8 γράμματα. Όμως οι αναγραμματισμοί περιλαμβάνουν και τις λέξεις χρησιμοποιώντας υποσύνολα του αρχικού συνόλου. Στο παράδειγμά μας, δηλαδή, αναγραμματισμοί του αρχικού συνόλου θεωρούνται και οι λέξεις «13», «3», «12», κ.ο.κ. 34

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Αυτό το πρόβλημα μπορεί να λυθεί αν στο αρχικό σύνολο συμπεριλάβουμε έναν επιπλέον χαρακτήρα, τον οποίο θα θεωρήσουμε ως τερματικό χαρακτήρα. Αν, δηλαδή, τροποποιήσουμε τον αλγόριθμο να λειτουργεί κάπως έτσι: [1, 2, 3, Χ] 1 2 3 Χ 2 3 Χ 1 3 Χ 1 2 Χ 3 Χ 2 Χ 3 Χ 1 Χ 2 Χ 1 Χ Χ Χ Χ Χ Χ Χ Ο νέος τρόπος λειτουργίας βασίζεται σε μια πολύ απλή λογική. Τοποθετήσαμε στο αρχικό σύνολο, τον τερματικό χαρακτήρα «Χ». Ο αλγόριθμος ακολουθεί ακριβώς την ίδια διαδικασία με προηγουμένως και χρησιμοποιεί τον τερματικό χαρακτήρα σαν ένα ακόμα στοιχείο του συνόλου. Όμως τώρα έχουμε δώσει εντολή στο πρόγραμμα όταν θα ελέγχει όλες τις λέξεις που θα δημιουργηθούν, κάθε φορά που θα συναντά τον χαρακτήρα «Χ», να σβήνει και να αγνοεί όλους τους χαρακτήρες μετά από αυτόν. Έτσι πλέον καταλήγουμε με τους πιθανούς αναγραμματισμούς: «123», «12», «132», «13», «1», «213», «21», «231», «23», «2», «312», «31», «321», «32» και «3». Αυτοί είναι πραγματικά όλοι οι πιθανοί αναγραμματισμοί που μπορούν να σχηματιστούν με 3 στοιχεία ως αρχικό σύνολο. Αντίστοιχα με αυτόν τον αλγόριθμο μπορούμε να βρούμε όλους τους αναγραμματισμούς με όσα γράμματα και αν θέσουμε ως αρχικό σύνολο. Στο πρόγραμμά μας οι αναγραμματισμοί σχηματίζονται με 8 γράμματα, αλλά ο ίδιος αλγόριθμος, προφανώς, μπορεί να χρησιμοποιηθεί για απεριόριστο αριθμό γραμμάτων. 35

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Βέβαια, όλοι οι αναγραμματισμοί δεν αποτελούν αποδεκτές λέξεις. Γι αυτό και, όπως αναλύσαμε στον προηγούμενο αλγόριθμο δημιουργίας λέξεων, χρησιμοποιούμε την «τομή» των δύο συνόλων, του λεξικού μας και της λίστας που φτιάξαμε με τον αλγόριθμο των αναγραμματισμών, ώστε να απομείνουν μόνο οι λέξεις που υπάρχουν στο λεξικό και είναι αποδεκτές ως κίνηση στο παιχνίδι. ΜΕΘΟΔΟΙ JAVA Εδώ θα αναλύσουμε τις μεθόδους και τις βιβλιοθήκες που η JAVA μας δίνει έτοιμες να χρησιμοποιήσουμε, πρέπει όμως να γίνει κατανοητός ο λόγος που τις χρησιμοποιούμε. Γι αυτό και θα δούμε πώς ακριβώς δουλεύουν. Κλάση ArrayList Η ArrayList είναι ίσως ο πιο βασικός τύπος από τις Συλλογές (Collections) της JAVA. Πρόκειται ουσιαστικά για έναν πίνακα ενισχυμένο και τροποποιημένο. Μοιάζει αρκετά με τη δομή του πίνακα, αλλά αποφεύγει αρκετά από τα προβλήματα που έχουν οι πίνακες. Αρχικά, μια ArrayList αλλάζει το μέγεθός της μόνο όταν πραγματικά χρειάζεται. Αν φτιάξουμε έναν πίνακα με 100 στοιχεία, τον γεμίσουμε, αλλά στη συνέχεια χρειαστεί να προσθέσουμε ένα ακόμα, το 101 ο, τότε αυτό δε γίνεται. Το μόνο που μπορούμε να κάνουμε είναι να δημιουργήσουμε έναν νέο πίνακα με 101 στοιχεία, να αντιγράψουμε τα προηγούμενα 100 σε αυτόν και να τοποθετήσουμε και το νέο στοιχείο. Με μια ArrayList όμως αυτό δεν αποτελεί πρόβλημα, μιας και δεν υπάρχει όριο στο πόσα στοιχεία μπορούμε να προσθέσουμε. Όταν υπάρχει ανάγκη να προσθέσουμε ένα ακόμα στοιχείο, τότε μπορούμε να το προσθέσουμε. ΥΛΟΠΟΙΗΣΗ ΜΕ ΠΙΝΑΚΑ Αρχικός Πίνακας 5 Στοιχείων Νέο Στοιχείο Α Β Γ Δ Ε Ζ 36

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Δημιουργία νέου πίνακα 6 Στοιχείων Αντιγραφή στοιχείων από τον παλιό πίνακα στον νέο Α Β Γ Δ Ε Τελικός πίνακας με το νέο στοιχείο Α Β Γ Δ Ε Ζ ΥΛΟΠΟΙΗΣΗ ΜΕ ARRAYLIST Αρχική ArrayList Α Β Γ Δ Ε 37

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Τελική ArrayList με το νέο στοιχείο Α Β Γ Δ Ε Ζ Επίσης, σε μια ArrayList μπορούμε να προσθέσουμε κάποιο στοιχείο στη μέση της λίστας. Με έναν πίνακα αν θέλουμε να προσθέσουμε ένα στοιχείο στην 2η θέση, πρέπει να μετακινήσουμε τα στοιχεία που βρίσκονταν από τη θέση 2 και κάτω κατά μία θέση ώστε να δημιουργήσουμε χώρο για το νέο στοιχείο. Αντίθετα, με την ArrayList όλα γίνονται αυτόματα. Εισαγωγή στοιχείου σε ArrayList Ακόμα, μια ArrayList επιτρέπει τη διαγραφή ενός στοιχείου και της θέσης του. Προφανώς και από έναν πίνακα μπορούμε να διαγράψουμε ένα στοιχείο. Όμως η θέση που αυτό καταλάμβανε παραμένει και είναι κενή, σε αντίθεση με την ArrayList. 38

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Διαγραφή στοιχείου από ArrayList Με τις μεθόδους της η ArrayList μας επιτρέπει να κάνουμε διαδικασίες που θα ήταν πιο πολύπλοκες με μια άλλη δομή. Μπορούμε με τη μέθοδο contains(object element), για παράδειγμα, να ελέγξουμε αν υπάρχει σε μια οποιαδήποτε θέση ένα συγκεκριμένο στοιχείο που αναζητούμε. Μπορούμε επίσης με τη μέθοδο get(int index) να ζητήσουμε ένα στοιχείο από μια συγκεκριμένη θέση ή με τη μέθοδο indexof(object element) να βρούμε σε ποια θέση βρίσκεται ένα συγκεκριμένο στοιχείο. Η προσθήκη στοιχείων σε μια ArrayList γίνεται σε χρόνο O(n). TreeSet Πρόκειται για μια συλλογή την οποία χρησιμοποιούμε για την αποθήκευση του λεξικού μας. Είναι ένα απλό δέντρο στο οποίο τα στοιχεία ταξινομούνται αυτόματα με λογική αλληλουχία. Στην περίπτωσή μας με αλφαβητική ταξινόμηση. Η ταχύτητα αναζήτησης, προσθήκης και αφαίρεσης στοιχείων είναι log(n). Αυτό κάνει το TreeSet αρκετά γρήγορο για την τοποθέτηση μιας λίστας με ήδη ταξινομημένα στοιχεία, όπως είναι το αρχικό λεξικό μας, μιας και οι λέξεις είναι ήδη ταξινομημένες αλφαβητικά. 39

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Εμείς στην εφαρμογή μας χρησιμοποιούμε αρχικά τη μέθοδο add(element) για να προσθέσουμε κάθε λέξη που υπάρχει στη λίστα του λεξικού μας και στη συνέχεια τη μέθοδο contains(element) για να κάνουμε τους ελέγχους αν υπάρχει κάθε συγκεκριμένη λέξη που ψάχνουμε. Όπως είπαμε, η αναζήτηση αυτή γίνεται πολύ γρήγορα και αυτό θα φανεί και από τις μετρήσεις που θα δείξουμε αργότερα. HashSet Πρόκειται για μια ακόμα συλλογή, παρόμοια με το TreeSet, με τη διαφορά, όμως, ότι τα στοιχεία δεν είναι ταξινομημένα, αλλά τους αποδίδεται ένα αριθμητικό αναγνωριστικό, το οποίο χρησιμοποιείται για την ταχύτατη αναζήτηση των στοιχείων αυτών. Χρησιμοποιείται κυρίως όταν τα στοιχεία που προσθέτουμε δεν είναι ταξινομημένα, ούτε μας ενδιαφέρει να τα ταξινομήσουμε αργότερα. 40

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Κλάση StringBuilder Για να σχηματίσουμε τις λέξεις που θα χρησιμοποιήσουμε για την αναζήτηση στο λεξικό, χρησιμοποιούμε την κλάση StringBuilder. Αυτή μας δίνει τη δυνατότητα να φτιάχνουμε τη λέξη μας γράμμα-προς-γράμμα και μπορούμε να προσθέσουμε και να αφαιρέσουμε ένα γράμμα από οποιοδήποτε σημείο μέσα στη λέξη, πράγμα αρκετά χρήσιμο στην εφαρμογή μας. Ταυτόχρονα μπορούμε να χρησιμοποιούμε τη λέξη σε κάθε στάδιο για τον έλεγχό μας, να αλλάζουμε ένα γράμμα για να ξανακάνουμε έλεγχο κ.ο.κ. Swing To Swing είναι ένα «πακέτο» της JAVA, το οποίο μας δίνει τη δυνατότητα να ξεφύγουμε από το μαύρο παράθυρο του γνωστού DOS και να σχεδιάσουμε εφαρμογές που να έχουν παράθυρα, μενού και άλλα παρόμοια στοιχεία. Άλλωστε 41

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ είναι και ο λόγος που, όπως αναφέραμε στην αρχή, επιλέξαμε τη γλώσσα JAVA για την ανάπτυξη της εφαρμογής μας. Με το Swing μας δίνεται η δυνατότητα να αναπτύξουμε ένα λεγόμενο Γραφικό Περιβάλλον Διεπαφής Χρήστης (Graphical User Interface - GUI). 42

ΚΕΦΑΛΑΙΟ 2 ΕΦΑΡΜΟΓΗ Στην εφαρμογή μας χρησιμοποιούμε τις κλάσεις JFrame, JButton, JPanel, JLabel. Πρόκειται ουσιαστικά για τις απεικονίσεις που χρησιμοποιούμε. Το JFrame είναι αυτό που οριοθετεί το κάθε παράθυρο που εμφανίζεται στην οθόνη. Είναι το πλαίσιο μέσα στο οποίο τοποθετούνται όλα τα γραφικά στοιχεία. Το JPanel είναι ένας τύπος που περιέχει όλα τα πλαίσια κειμένου, κουμπιά κλπ. Τα JLabel τα χρησιμοποιούμε για να απεικονίσουμε κείμενο και φωτογραφίες, ενώ τα JButton 43