Εκφώνηση άσκησης. Η Κρεμάλα σαν παιχνίδι. Ανάλυση. Μέρος Α Αναφoρά, ανάλυση τακτικής. Υλοποίηση του παιχνιδιού «Κρεμάλα»



Σχετικά έγγραφα
Αριστείδης Παλιούρας Ανακαλύψτε το Scratch 2

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Να περιγραφεί η δομή επανάληψης Αρχή_επανάληψης Μέχρις_ότου

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

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

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

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

Αβδέλαρου Κωνσταντίνα

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

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

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

Διάγραμμα Ροής. Σελίδα 1 από 10

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

ΔΙΑΓΩΝΙΣΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ:- Γ ΛΥΚΕΙΟΥ ΤΜΗΜΑΤΑ: ΓΟ4 ΓΟ7 (ΖΩΓΡΑΦΟΥ) ΓΟ5 ΓΟ6 (ΧΟΛΑΡΓΟΣ) HM/NIA: 15/1/2017

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. i. Η συνθήκη α > β ή α <= β α) είναι πάντα Αληθής β) είναι πάντα Ψευδής γ) δεν υπολογίζεται δ) τίποτα από τα προηγούμενα

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Δ ΕΣΠΕΡΙΝΩΝ

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

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

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

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

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

Μάντεψε τον Αριθμό. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Οδηγίες

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Ονοµατεπώνυµο «οδηγού»:... Ονοµατεπώνυµο «παρατηρητή»:... 1 η ραστηριότητα ιαθέσιµος χρόνος: 30 λεπτά

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

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

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Παρατηρήσεις για την δομή Όσο..επανάλαβε( ΣΟΣ)

Επαναληπτικό διαγώνισμα στην Α.Ε.Π.Π - 18 / Απριλίου / 2010 ΘΕΜΑ 1

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false.

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Slalom Race Computer Game on Scratch

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

Λειτουργικά Συστήματα

1. Μία συνάρτηση δεν μπορεί να έχει παραπάνω από μία παραμέτρους.

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

Μάντεψε τον Αριθμό. Φύλλο Εργασίας. Οδηγίες

Mπαρμπούτι. Φύλλο Εργασίας. Τυχαιότητα

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

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα

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

Δομημένος Προγραμματισμός

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

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2017 A ΦΑΣΗ

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

Επαναληπτικές Διαδικασίες

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Η Δομή Επανάληψης. Εισαγωγή στην δομή επανάληψης Χρονική διάρκεια: 3 διδακτικές ώρες

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

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

ΚΕΝΤΡΙΚΗ ΟΡΓΑΝΩΤΙΚΗ ΕΠΙΤΡΟΠΗ 8 ου ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ 1996 ΠΡΟΚΑΤΑΡΚΤΙΚΗ ΦΑΣΗ ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΘΕΜΑΤΑ ΓΥΜΝΑΣΙΟΥ

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

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΕΠΠ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ / Γ3 Γ4 ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΝΟΕΜΒΡΙΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : ΕΞΙ (6)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομές Επανάληψης. Εισαγωγή στη C++

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στην πληροφορική

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

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

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

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

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

Γράψτε ένα πρόγραμμα που θα προσομοιώνει τη ρίψη ενός νομίσματος και θα εμφανίζει στην οθόνη Κορώνα» ή «Γράμματα».

1. Ουρά α. Απώθηση 2. Στοίβα β. Εξαγωγή γ. Ώθηση δ. Εισαγωγή

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

Μάντεψε τον Αριθμό. Έχω Ένα Μυστικό. Το Βρήκα;

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: ΘΕΜΑ Α

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

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

A. Να αναφέρετε επιγραμματικά τους λόγους για τους οποίους ανατίθεται σε έναν υπολογιστή η επίλυση ενός προβλήματος.

Γλώσσα Προγραμματισμού C

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΜΟΝΟ ΝΕΟ ΣΥΣΤΗΜΑ ΕΣΠΕΡΙΝΩΝ

Δομή Επανάληψης. 3. Επανέλαβε την κίνηση του αυτοκινήτου ώσπου αυτό να ακουμπήσει στο κόκκινο χρώμα.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

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

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

μεταβλητής Χ Χ ΑΛΗΘΗΣ Χ Χ 7 > 4 Χ ΨΕΥ ΗΣ Μονάδες 10 ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ - ΕΣΠΕΡΙΝΩΝ

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

1. Ποιους μαθησιακούς στόχους θα προσδιορίζατε στα πλαίσια της διδακτικής δραστηριότητας;

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Εξετάσεις Προσομοίωσης 24/04/2019

Transcript:

ΚΡΕΜΑΛΑ Project 7 1

Εκφώνηση άσκησης Υλοποίηση του παιχνιδιού «Κρεμάλα» Το Project αυτό συνίσταται στην κατασκευή ενός προγράμματος σεναρίου κελύφους, που θα υλοποιεί το γνωστό παιχνίδι «Κρεμάλα» με δυνατότητα τυχαίας επιλογής λέξης από αρχείο λέξεων. Η Κρεμάλα σαν παιχνίδι Η κρεμάλα είναι ένα παιχνίδι μεταξύ δύο παιχτών που παίζεται με χαρτί και μολύβι. Ο ένας παίχτης σκέφτεται μια λέξη και ο άλλος προσπαθεί να την βρει μαντεύοντας τα γράμματα της ή και απευθείας την λέξη. Η μυστική λέξη που έχει σκεφτεί ο πρώτος παίχτης, αντιπροσωπεύεται από μια σειρά από παύλες φανερώνοντας τον αριθμό των γραμμάτων. Εάν ένας παίχτης μαντέψει σωστά ένα γράμμα, τότε αυτό γράφεται σε όλες τις σωστές του θέσεις αντικαθιστώντας τις παύλες. Εάν το γράμμα που πρότεινε ο παίχτης δεν υπάρχει στην λέξη, τότε ο άλλος παίχτης σχεδιάζει και ένα κομμάτι του σκίτσου ενός κρεμασμένου ανθρώπου. Το παιχνίδι τελειώνει όταν: Ο παίχτης μαντέψει όλα τα γράμματα της κρυφής λέξης ή απευθείας την λέξη Ο άλλος παίχτης συμπληρώσει το σκίτσο. Ανάλυση Μέρος Α Αναφoρά, ανάλυση τακτικής Στο πρώτο μέρος της ανάλυσης θα αναλύσουμε την εκφώνηση του προγράμματος που μας έχει ζητηθεί να αναπτύξουμε, θα καθορίζουμε τα ζητούμενα του και θα σχεδιάζουμε έναν πρόχειρο αλγόριθμο υλοποίησής του προγράμματος. Η εκφώνηση μας ζήτα να αναπτύξουμε το παιχνίδι κρεμάλα στο περιβάλλον κελύφους του λειτουργικού συστήματος Linux. Αμέσως ένα πρόβλημα που προκύπτει είναι η αναπαράσταση του σκίτσου της κρεμάλας καθώς το κέλυφος δεν υποστηρίζει εικόνες καθαρά με την έννοια της εικόνας. Υποστηρίζει όμως χαρακτήρες, σύμβολα και αριθμούς. Έτσι θα σχεδιάσουμε το σκίτσο της κρεμάλας με χαρακτήρες. Όπως γνωρίζουμε, σε κάθε λανθασμένη εισαγωγή χαρακτήρα για την ανεύρεση της μυστικής λέξης, θα πρέπει να συμπληρώνεται και ένα σχέδιο, μέχρις ότου να ολοκληρωθεί το σκίτσο. Θα πούμε λοιπόν ότι ο χρήστης θα έχει δικαίωμα να εισάγει μέχρι και δέκα λανθασμένους χαρακτήρες. Έτσι θα χωρίσουμε και το σκίτσο μας σε δέκα διαφορετικά κομμάτια τα οποία θα αποθηκεύσουμε 2

αντίστοιχα σε δέκα διαφορετικά αρχεία κειμένου. Κάθε φορά που ο χρήστης θα εισάγει λάθος χαρακτήρα, θα εμφανίζεται στην οθόνη και η αντίστοιχη εικόνα. Για παράδειγμα, αν εισάγει για πέμπτη φορά έναν λάθος χαρακτήρα θα εμφανιστεί το παρακάτω σκίτσο: / / ########### αν εισάγει για όγδοη φορά έναν λάθος χαρακτήρα θα εμφανιστεί το παρακάτω: / / (=) /\ / \ ########### Αυτές οι εικόνες είναι αποθηκευμένες σε μορφή κειμένου στον φάκελο images. Στην κρεμάλα μας η κρυφή λέξη θα επιλέγεται τυχαία από ένα λεξικό, δηλαδή ένα αρχείο με διαθέσιμες για την κρεμάλα, λέξεις. Εκτελώντας το πρόγραμμα θα μετράμε το πλήθος των λέξεων και θα παράγουμε έναν τυχαίο αριθμό μικρότερο πάντα από το πλήθος αυτό. Ο αριθμός θα αντιπροσωπεύει την θέση στην οποία βρίσκεται η λέξη που θα επιλεχθεί από το λεξικό. Στη συνέχεια το πρόγραμμα θα μας ζητήσει να εισάγουμε έναν χαρακτήρα προς ανεύρεση της μυστικής λέξης. Μια δομή επανάληψης θα ελέγχει αν ο χαρακτήρας υπάρχει στη μυστική λέξη και αναλόγως ή θα τον εμφανίζει στην οθόνη στη θέση στην οποία θα πρέπει να είναι μέσα στη λέξη, ή θα σχεδιάσει και ένα 3

κομμάτι του σκίτσου. Κάθε λάθος εισαγωγή χαρακτήρα θα αναγράφεται και στην οθόνη για αποφυγή μελλοντικής εισαγωγής του ίδιου χαρακτήρα. Η παραπάνω εκτέλεση του κώδικα θα γίνεται μέσα σε μια δομή επανάληψης η οποία θα εκτελείτε το πολύ δέκα φορές, όσες και οι διαθέσιμες λανθασμένες εισαγωγές χαρακτήρα. Στην περίπτωση όπου ο χρήστης μαντέψει την μυστική λέξη πριν το πέρας των επαναλήψεων η ροή του προγράμματος θα σταματά και αμέσως το πρόγραμμα θα τερματίζεται με αντίστοιχο συγχαρητήριο μήνυμα. Αν ο χρήστης δεν καταφέρει να μαντέψει την λέξη μετά το πέρας των δέκα επαναλήψεων, το πρόγραμμα θα τερματιστεί με αντίστοιχο μήνυμα το οποίο θα αναγράφει την μυστική λέξη και ότι ο χρήστης έχασε. Πριν προχωρήσουμε στην υλοποίηση του προγράμματος πρέπει να προσέξουμε ότι υπάρχει περίπτωση ο χρήστης να μην εισάγει απλά έναν χαρακτήρα αλλά ένα αλφαριθμητικό Έτσι θα δημιουργήσουμε μια δομή επανάληψης μέσα στην οποία θα γίνεται η εισαγωγή του χαρακτήρα. Η δομή θα επαναλαμβάνεται μέχρις ότου ο χρήστης να εισάγει έναν χαρακτήρα και μόνο. Ας προχωρήσουμε στην υλοποίηση ενός πρόχειρου ψευδοκώδικα που θα περιγράφει τις παραπάνω λειτουργίες. ΠΡΟΓΡΑΜΜΑ ΚΡΕΜΑΛΑ φακελος_εικονων=./images αρχειο_λεξεων=./words random=τυχαιος_αριθμος λεξη=τυχαια_λεξη_απο_αρχειο ΟΣΟ ( λανθασμενες_επιλογες < 10 ) ΕΠΑΝΕΛΑΒΕ ΕΜΦΑΝΙΣΕ εικονα ΔΙΑΒΑΣΕ χαρακτηρα ΟΣΟ ( ο χαρακτηρας εισαγωγης δεν είναι χαρακτηρας ) ΕΠΑΝΕΛΑΒΕ ΕΜΦΑΝΙΣΕ Λαθος εισαγωγή ΔΙΑΒΑΣΕ χαρακτηρα ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ κάθε ψηφίο της λέξης ΕΠΑΝΕΑΒΕ ΑΝ ( ο χαρακτήρας ισουται με χαρακτηρα της λεξης ) ΤΟΤΕ ΕΜΦΑΝΙΣΕ τον χαρακτήρα στην θέση του στην λέξη ΤΕΛΟΣ_ΑΝ 4

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ ( ο χρήστης βρηκε την λέξη ) ΤΟΤΕ ΕΜΦΑΝΙΣΕ ΝΙΚΗΣΕΣ ΤΕΡΜΑΤΙΣΕ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ ( ο χρηστης δεν βρηκε την λεξη ) ΤΟΤΕ ΕΜΦΑΝΙΣΕ ΕΧΑΣΕΣ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΚΡΕΜΑΛΑ Μέρος Β Ανάλυση του κώδικα Στο δεύτερο μέρος της ανάλυσης, θα αναλύσουμε τον κώδικα του προγράμματος μας. Για καλύτερη κατανόηση θα σπάσουμε τον κώδικα σε μικρά κομμάτια τα οποία θα αναλύσουμε και σχολιάσουμε. Κομμάτι 1 #!/bin/bash WORDS=./words IMAGES=./images if [! -r ${WORDS} ]; then echo "${WORDS} does not exist or is not readable" && exit 1 Στην αρχή του κώδικα μας καθορίζουμε την διαδρομή στην οποία βρίσκονται οι εικόνες μας, καθώς και το όνομα του λεξικού στο οποίο περιέχονται οι υποψήφιες μυστικές λέξεις. Στην συνέχεια ελέγχουμε αν όντως το αρχείο που δώσαμε υπάρχει και αναλόγως ή συνεχίζεται η εκτέλεση του προγράμματος, ή τερματίζεται με κατάλληλο μήνυμα. 5

Κομμάτι 2 WORDSLN=$( wc -l ${WORDS} awk '{ print $1}' ) RANDOMN=$( awk -v l=$wordsln 'BEGIN { srand(); r = rand() * l; printf( "%d", ( r + 1 ) ) }' ) WORD=$( awk -v l=$randomn 'BEGIN { RS=""; FS="\n" } { print $l }' $WORDS) WORD_LENGTH=${#WORD} Στη συνέχεια μετράμε το πλήθος των λέξεων οι οποίες βρίσκονται στο λεξικό και δημιουργούμαι έναν τυχαίο αριθμό, μικρότερο πάντα από το πλήθος των λέξεων, τον οποίο και αποθηκεύουμε στην μεταβλητή RANDOMN. Έπειτα επιλέγουμε την μυστική μας λέξη απο το λεξικό με βάση τον τυχαίο αριθμό και την αποθηκεύουμε στην μεταβλητή WORD. Τέλος στην μεταβλητή WORD_LENGTH αποθηκεύουμε το μήκος της λέξης. Κομμάτι 3 for i in $( seq 0 $(( $WORD_LENGTH )) ) do CHAR_PIN[$i]=$(echo "${WORD}" cut -c$(($i+1)) ) Εδώ αποθηκεύουμε τους χαρακτήρες της μυστικής λέξης έναν προς έναν στον πίνακα CHAR_PIN. Κομμάτι 4 i=0 while [ $i -lt $WORD_LENGTH ]; do STR_GUESSES[$i]="_" let "i++" Στη συνέχεια δημιουργούμε έναν πίνακα ονόματι STR_GUESSES μεγέθους ίδιου με το μήκος της μυστικής λέξης και τον γεμίζουμε με κάτω παύλες (_). Είναι ο πίνακας ο οποίος θα εμφανίζεται και 6

κατά την εκτέλεση του προγράμματος στην θέση της μυστικής λέξης. Κομμάτι 5 GUESSED="" flag=0 GUESSES=10 while [ $GUESSES -gt 0 ] ; do clear cat ${IMAGES}/${GUESSES} echo -e "\n\nyou have ${GUESSES} chance(s) remaining!" echo -e "\nyou have guessed so far:\n\t $GUESSED" echo -e "\n${str_guesses[@]}" echo -e "\n\nenter a character" read char Αφού αρχικοποιήσουν κάποιες μεταβλητές που θα μας χρειαστούν στην συνέχεια, ανοίγουμε τον πρώτο βρόγχο επανάληψης ο οποίο μετράει τις λανθασμένες εισαγωγές χαρακτήρα. Έπειτα καθαρίζουμε την οθόνη και εμφανίζουμε την πρώτη μας εικόνα, πόσες λανθασμένες εισαγωγές έχει το δικαίωμα να κάνει ο χρήστης ακόμη και ποιους χαρακτήρες έχει εισάγει ήδη. Έπειτα διαβάζουμε από το πληκτρολόγιο έναν χαρακτήρα και τον αποθηκεύουμε στην μεταβλητή char. Κομμάτι 6 while [ ${#char} -gt 1 ]; do echo "Wrong input" echo -e "\n\nenter a character" read char Στην συνέχεια ελέγχουμε αν η μεταβλητή char είναι όντως χαρακτήρας ελέγχοντας απλά το πλήθος των χαρακτήρων της μεταβλητής char. Αν δεν είναι χαρακτήρας, εμφανίζεται κατάλληλο μήνυμα λάθους και διαβάσματος καινούργιου χαρακτήρα. Ο βρόγχος εκτελείτε μέχρις ότου ο χρήστης εισάγει χαρακτήρα. Αν η μεταβλητή char είναι χαρακτήρας συνεχίζεται ομαλά η εκτέλεση του προγράμματος. 7

Κομμάτι 7 i=0 found=0 while [ $i -lt $WORD_LENGTH ]; do if [ $char = ${CHAR_PIN[$i]} ]; then STR_GUESSES[$i]=$char found=1 let "i++" Εδώ ελέγχουμε αν ο χαρακτήρας εισαγωγής περιέχεται πουθενά στην μυστική μας λέξη. Αν ναι τότε αντικαθιστούμε (στην αντίστοιχη θέση του χαρακτήρα της λέξης) τον χαρακτήρα με παύλα στον πίνακα πού εμφανίζει στην οθόνη την μυστική λέξη. Έπειτα αλλάζουμε την τιμή της μεταβλητής found η οποία παίζει το ρόλο της σημαίας. Κομμάτι 8 if [ $found -eq 1 ]; then let "GUESSES++" GUESSED=${GUESSED}$char Σε αυτό το block εντολών ελέγχουμε μέσω της σημαίας found αν ο χαρακτήρας εισαγωγής υπήρχε στην μυστική λέξη. Αν ναι τότε αυξάνουμε τον μετρητή που μετράει πόσες προσπάθειες έχουμε. Αυτό έχεις ως αποτέλεσμα όταν μαντέψουμε σωστά έναν χαρακτήρα να παγώνει την αντίστροφη μέτρηση των διαθέσιμων λανθασμένων εισαγωγών χαρακτήρα. Τέλος προσθέτουμε τον χαρακτήρα εισαγωγής στην μεταβλητή GUESSED η οποία εμφανίζει στην οθόνη του χαρακτήρες που έχουμε εισάγει μέχρι τώρα. Κομμάτι 9 TEMP=$(echo ${STR_GUESSES[@]} sed 's/ //g') if [ $TEMP = $WORD ]; then echo "The word is: $WORD" echo "YOU WON" break 8

Εδώ αποθηκεύουμε προσωρινά τον πίνακα με τις παύλες που εμφανίζει στην οθόνη μας την μυστική λέξη στην μεταβλητή TEMP. Έπειτα ελέγχουμε αν η μεταβλητή TEMP είναι ίση με την μυστική λέξη. Αν είναι ίσες σημαίνει ότι ο χρήστης έχει μαντέψει σωστά πριν το πέρας των δέκα προσπαθειών την μυστική λέξη και έπειτα από την εμφάνιση των κατάλληλων μηνυμάτων, το πρόγραμμα τερματίζεται. Κομμάτι 10 if [ $GUESSES -eq 0 ] ; then echo "Game over!! " echo "The word was: $WORD" Τέλος, έξω από την δομή επανάληψης, ελέγχουμε αν όντως η επανάληψη εκτελέστηκε δέκα φορές. Αυτό σημαίνει ότι ο χρήστης δεν κατάφερε να μαντέψει σωστά την μυστική λέξη και έτσι μετά την εμφάνιση κατάλληλων μηνυμάτων αποτυχίας, το πρόγραμμα τερματίζεται από μόνο του. Ολοκληρωμένος και σχολιασμένος κώδικας #!/bin/bash #Το παιχνίδι κρεμάλα σε περιβάλλον κελύφους WORDS=./words IMAGES=./images #Ελέγχουμε αν το αρχείο λέξεων υπάρχει και είναι προσπελάσιμο if [! -r ${WORDS} ]; then echo "${WORDS} does not exist or is not readable" && exit 1 #Μετράμε τις λέξεις που βρίσκονται στο αρχείο words WORDSLN=$( wc -l ${WORDS} awk '{ print $1}' ) #Δημιουργούμε έναν τυχαίο αριθμό, πάντα μικρότερο από τον αριθμό των λέξεων μας 9

RANDOMN=$( awk -v l=$wordsln 'BEGIN { srand(); r = rand() * l; printf( "%d", ( r + 1 ) ) }' ) #Επιλέγουμε την λέξη, με βάση τον τυχαίο αριθμό WORD=$( awk -v l=$randomn 'BEGIN { RS=""; FS="\n" } { print $l }' $WORDS) #Βρίσκουμε το μέγεθος της λέξης WORD_LENGTH=${#WORD} #Αποθηκεύουμε τους χαρακτήρες έναν προς ένα στον πίνακα CHAR_PIN for i in $( seq 0 $(( $WORD_LENGTH )) ) do CHAR_PIN[$i]=$(echo "${WORD}" cut -c$(($i+1)) ) i=0 #Γεμίζουμε τον πίνακα STR_GUESSES με κάτω παύλες (_) while [ $i -lt $WORD_LENGTH ]; do STR_GUESSES[$i]="_" let "i++" GUESSED="" flag=0 GUESSES=10 #Επανέλαβε όσες και οι διαθέσιμες προσπάθειες while [ $GUESSES -gt 0 ] ; do #Εμφάνηση εικόνας και πληροφοριών της υπάρχουσας κατάστασης 10

clear cat ${IMAGES}/${GUESSES} echo -e "\n\nyou have ${GUESSES} chance(s) remaining!" echo -e "\nyou have guessed so far:\n\t $GUESSED" echo -e "\n${str_guesses[@]}" echo -e "\n\nenter a character" read char #Έλεγχος για το κατα πόσο η μεταβλητή char είναι χαρακτήρας while [ ${#char} -gt 1 ]; do echo "Wrong input" echo -e "\n\nenter a character" read char i=0 found=0 #Έλεγχος για το αν ο χαρακτήρας περιέχεται στην μυστική λέξη while [ $i -lt $WORD_LENGTH ]; do if [ $char = ${CHAR_PIN[$i]} ]; then STR_GUESSES[$i]=$char found=1 let "i++" #Αν ο χαρακτήρας περιέχεται στην μυστική λέξη επανέφερε τον μετρητή if [ $found -eq 1 ]; then let "GUESSES++" #Πρόσθεσε τον χαρακτήρα στου χαρακτήρες που έχουν εισαχθεί μέχρι τώρα 11

GUESSED=${GUESSED}$char #Έλεγχος για το αν ο χρήστης έχει μαντέψει σωστά την μυστική λέξη TEMP=$(echo ${STR_GUESSES[@]} sed 's/ //g') if [ $TEMP = $WORD ]; then echo "The word is: $WORD" echo "YOU WON" break let "GUESSES--" #Έλεγχος για το αν έγιναν 10 επαναλήψεις, άρα ο χρήστης έχασε. if [ $GUESSES -eq 0 ] ; then echo "Game over!!" echo "The word was: $WORD" Εκτέλεση προγράμματος Παρακάτω παραθέτω μερικές εικόνες με μια σύντομη περιγραφή από την εκτέλεση του προγράμματος. 12

Σε αυτή την εικόνα απομένουν στον χρήστη ακόμη 8 προσπάθειες, έχει βρεί σωστά τους χαρατήρες t,h,a και έχει εισάγει μέχρι τώρα τους χαρακτήρες a,v,h,f και t. 13

Εδώ ο χρήστης έχει μαντέψει σωστά τα γράμματα της λέξης με μόλις τέσσερις λανθασμένες υποθέσεις. 14

Σε αυτή την περίπτωση ο χρήστης δεν κατάφερε να μαντέψει σωστά την μυστική λέξη και έτσι έχασε. Βιβλιογραφία Wikipedia Σημειώσεις μαθήματος Λειτουργικών Συστημάτων 2 15