14η συνάντηση Λαβύρινθος
Τετάρτη, 20 Φεβρουαρίου 2013, 11:27 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

Συνέχεια του προβλήματος του λαβυρίνθου



13η συνάντηση Το τέλος του λαβυρίνθου
Τετάρτη, 13 Φεβρουαρίου 2013, 10:15 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

Το ρομπότ ακολουθεί μια μαύρη γραμμή. Η γραμμή αυτή κάποτε τελειώνει. Πως καταλαβαίνει το ρομπότ, ότι τελείωσε η μαύρη γραμμή;

Παράμετροι α) γνωστό η άγνωστο μήκος β) αυτόνομο ή ημιαυτόνομο ρομπότ



Animation στο Scratch
Δευτέρα, 11 Φεβρουαρίου 2013, 8:23 πμ
Κάτω από: Scratch  |  Αφήστε ένα σχόλιο

Φύλλο Εργασίας για Animation



12η συνάντηση Ιδέες για κατασκευές
Τετάρτη, 6 Φεβρουαρίου 2013, 9:37 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

Στη σημερινή συνάντηση θα δοκιμάσουμε διαφορετικές κατασκευές, οι οποίες θα μας βοηθήσουν στη δημιουργία ρομπότ με βραχίονες.

Για την κατασκευή του βασικού ρομπότ πατήστε εδώ.

Γι ατην τοποθέτηση του βραχίονα πιρούνι και των αισθητήρων πατήστε τον  σύνδεσμο για αναλυτικές οδηγίες.



Περιγραφή εντολών NXT
Τρίτη, 5 Φεβρουαρίου 2013, 7:06 πμ
Κάτω από: Instructions,Robotics  |  Αφήστε ένα σχόλιο

Σύντομη περιγραφή όλων των εντολών του λογισμικού LEGO Mindstorms Edu NXT  (NXT – G) – (του Γιώργου Κυριακού) (GR)



11η συνάντηση Μέτρηση Ταχύτητας
Τετάρτη, 23 Ιανουαρίου 2013, 11:48 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

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

Μέθοδολογία εργασίας.

Χωρίζουμε το πρόβλημα σε απλούστερα προβλήματα

1. Το ρομπότ βρίσκεται μέσα στη λευκή περιοχή και σταματά αναγνωρίζοντας τη μαύρη γραμμή τερματισμού.
Χρειαζόμαστε μια δομή επανάληψης UNTIL με έλεγχο μέσω αισθητήρα ανάκλασης

2. Έχοντας λύσει το προηγούμενο, μετράμε το χρόνο διάσχισης της περιοχής.
Χρειαζόμαστε ένα counter χρόνου.

3. Μετράμε μέσω  των μοιρών περιστροφής την απόσταση που διασχίσαμε.
Χρειαζόμαστε μετρητή περιστροφών και το μαθηματικό τύπο που μετατρέπει τις μοίρες σε μήκος τόξου.

4. Διαιρούμε την απόσταση δια του χρόνου και βρίσκουμε την ταχύτητα.

5. Τοποθετούμε το ρομπότ στη μαύρη γραμμή αφετηρίας, την οποία πρέπει να διασχίσει το ρομπότ οπότε και θα ξεκινήσει να μετρά χρόνο και μοίρες.
Δουλεύουμε όμοια με βήμα 1. Χρειάζεται να κάνουμε reset τους counter.

6. Τοποθετούμε το ρομπότ πριν τη μαύρη γραμμή αφετηρίας, την οποία και θα πρέπει να συναντήσουμε κινούμενοι προς τα εμπρός και να ξεκινήσει να μετράει ο χρόνος.
Δουλεύουμε όμοια με βήμα 1.



10η συνάντηση Μεταβλητές Τελεστές
Τετάρτη, 16 Ιανουαρίου 2013, 9:05 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

Δραστηριότητα εμπέδωσης μεταβλητών, τελεστών και δομής ελέγχου

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

Πρόσθετη Δραστηριότητα

Δημιουργήστε δύο αριθμητικές μεταβλητές, την randomA και τη randomB. Η δραστηριότητα είναι όμοια με την προηγούμενη όμως τώρα εμφανίζεται στην οθόνη η μικρότερη τιμή.



9η συνάντηση Μεταβλητές
Τετάρτη, 9 Ιανουαρίου 2013, 11:11 πμ
Κάτω από: Robotics  |  Αφήστε ένα σχόλιο

Στη σημερινή δραστηριότητα, το ρομπότ καλείται να μετρήσει πόσες φορές θα πατηθεί ο αισθητήρας πίεσης σε συγκεκριμένο χρόνο και να το καταγράψει στην οθόνη.

Βήμα 1: Ορίζουμε μια αριθμητική μεταβλητή π.χ. την bumps_counter, όπου θα αποθηκεύεται ο αριθμός των χτυπημάτων στον αισθητήρα πίεσης.

Βήμα 2: Τοποθετούμε μια δομή επανάληψης για τον ορισμό του χρόνου μέσα στον οποίο θα γίνεται η μέτρηση των χτυπημάτων.

______Μέσα στη loop τοποθετούμε μια δομή ελέγχου – switch, η οποία ελέγχει αν έχει πατηθεί ο αισθητήτας πίεσης.

______________Αν ναι,  τότε στην προηγούμενη τιμή της bumps_counter προστίθεται 1 και προβάλλεται στον οθόνη.

Στην επόμενη συνάντηση

Δραστηριότητα: Αλυσίδα παραγωγής

Σ’ ένα εργοστάσιο, τα αντικείμενα που ελέγχονται από την αλυσίδα ελέγχου ποιότητας ξεκινά, πατώντας το κουμπί πίεσης.

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

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



Δραστηριότητα 4 – MoleMash-2
Τετάρτη, 19 Δεκεμβρίου 2012, 3:28 πμ
Κάτω από: App_inventor  |  Αφήστε ένα σχόλιο

MoleMash-2

Το κυνήγι του τυφλοπόντικα 2

Τι θα φτιάξετε

Download Refined Version (Book Chapter PDF)

Αυτό το εγχειρίδιο σας παρουσιάσει πως θα υλοποιήσετε ένα παιχνίδι παρόμοιο με το παιχνίδι Whac-A-MoleTM. Πιο συγκεκριμένα, ο σκοπός είναι να χτυπήσετε έναν τυφλοπόντικα που εμφανίζεται τυχαία σε μία από τις 5 προκαθορισμένες τρύπες. Κάθε φορά που το πετυχαίνετε, το σκορ σας αυξάνεται κατά ένα βαθμό.

Με σκοπό να τονιστούν οι νέες δυνατότητες του App Inventor — η καρτέλα Advanced και το Sprite Z-layering — αυτή η εφαρμογή έχει μία διαφορετική προσέγγυση από το κανονικό εγχειρίδιο Mole Mash, το οποίο δεν χρειάζεται να έχετε διαβάσει για να κάνετε το παρόν. Πρέπει, ωστόσο, να σας είναι οικείες οι αρχές του App Inventor — με τη χρήση του Component Designer για να φτιάξετε μία διεπαφή χρήστη και με τη χρήση του Blocks Editor να καθορίσετε τους χειριστές συμβάντων. Αν δεν σας είναι οικείες οι αρχές, δοκιμάστε ένα από τα βασικά εγχειρίδια πριν ξεκινήσετε.

Εισαγωγή

Το εγχειρίδιο περιλαμβάνει:

  1. Δημιουργία μίας λίστας από στοιχεία
  2. Χρήση της λειτουργίας από την ενότητα Advanced του Blocks Editor για να πάρετε και να ορίσετε τις ιδιότητες των αυθαίρετων στοιχείων
  3. Συμβάντα του παιχνιδιού που ελέγχονται από το στοιχείο Clock
  4. Χρήση Sprite Z-layering για να σιγουρευτείτε ότι ένα sprite (ImageSprite ή Ball) μπροστά από κάποιο άλλο

Ας ξεκινήσουμε

Συνδεθείτε στην ιστοσελίδα του App Inventor και ξεκινήστε ένα νέο project. Ορίστε την επιλογή του στοιχείου της οθόνης Title σε ένα κατάλληλο όνομα, όπως “Mole Mash”. Ανοίξτε το Blocks Editor και συνδέστε το κινητό τηλέφωνο. Κατεβάστε τα παρακάτω αρχεία εικόνων (created by Yun Miao) πατώντας δεξί κλικ πάνω τους, και προσθέστε τα στο project πατώντας στο κουμπί “Add…” στην κατηγορία Media.

Στήνοντας τα Components

Η διεπαφή χρήστη θα περιέχει συνολικά 6 ImageSprites: 5 τρύπες που δεν μετακινούνται και 1 τυφλοπόντικας, ο οποίος μετακινείται πάνω στις τρύπες. Χρησιμοποιήστε τον σχεδιαστή component για να δημιουργήσετε τη διεπαφή χρήστη. Όταν τελειώσετε, πρέπει να είναι παρόμοιο με την εικόνα που ακολουθεί. Μην ανησυχείτε για την ομοιόμορφη ευθυγράμμιση των τρυπών. Θα καθορίσετε τις τοποθεσίες τους μέσω των ιδιοτήτων X και Y. Επιπρόσθετες οδηγίες θα βρείτε κάτω από την εικόνα.

Δημιουργήστε τα ακόλουθα στοιχεία τραβώντας τα από το Palette στο Viewer.

Τύπος Component Κατηγορία Palette Όνομα που θα δώσετε Σκοπός του Component
Canvas Basic GameCanvas Το περιβάλλον του παιχνιδιού
ImageSprite (5) Animation Hole1 … Hole5 Οι τρύπες από τις οποίες μπορεί να εμφανιστεί ο τυφλοπόντικας
ImageSprite Animation Mole Ο τυφλοπόντικας
HorizontalArrangement Screen Arrangement ScoreArrangement Η ένδειξη του σκορ
Label Basic ScoreTextLabel Κρατάει το κείμενο “Score: “
Label Basic ScoreValueLabel Κρατάει το σκορ (αριθμό που χτυπήθηκε ο τυφλοπόντικας)
Clock Basic MoleClock Ελέγχει την κίνηση του τυφλοπόντικα
Sound Media Buzzer Δόνηση όταν αγγίζεται ο τυφλοπόντικας

Κάντε τις παρακάτω αλλαγές στις ιδιότητες των στοιχείων:

Component Action
Canvas1 Ορίστε το BackgroundColor σε πράσινο (Green). Ορίστε το Width σε 320 pixels. Ορίστε το Height σε 320 pixels.
Hole1 Ορίστε το X με 20 και το Y με 60 (αριστερά πάνω).
Hole2 Ορίστε το X με 130 και το Y με 60 (κέντρο πάνω).
Hole3 Ορίστε το X με 240 και το Y με 60 (δεξιά πάνω)
Hole4 Ορίστε το X με 75 και το Y με 140 (κάτω αριστερά).
Hole5 Ορίστε το X με 185 και το Y με 140 (κάτω δεξιά).
Mole Ορίστε το Picture σε “mole.png”. Ορίστε το Z σε 2, έτσι ο τυφλοπόντικας εμφανίζεται μπροστά από το άλλο ImageSprite s, που έχει την προκαθορισμένη τιμή Z με 1.
ScoreTextLabel Ορίστε το Text σε “Score: “.
ScoreTextValue Ορίστε το Text σε “0”.

Μην ανησυχείτε τώρα για τον ορισμό της ιδιότητας Picture για τις τρύπες. Θα ορίσουμε την ιδιότητα στον Blocks Editor.

Προσθήκη συμπεριφοράς στα Components

Ακολουθεί μία σύνοψη με το τι χρειάζετε να κάνουν τα blocks:

  1. Δημιουργία μεταβλητών:
    1. holes: μία λίστα από τρύπες
    2. currentHole: η τρύπα που ο τυφλοπόντικας βγαίνει αυτή τη στιγμή
  2. Όταν η εφαρμογή αρχίσει:
    1. Συμπληρώστε την λίστα με τις τρύπες.
    2. Ορίστε την ιδιότητα Picture κάθε τρύπας σε “hole.png”.
    3. Καλέστε την διαδικασία MoveMole (παρακάτω).
  3. Δημιουργήστε μία διαδικασία με όνομα MoveMole:
    1. Αναθέστε στο currentHole μία τυχαία τρύπα από την λίστα holes.
    2. Μετακινήστε τον τυφλοπόντικα στο σημείο που δείχνει η currentHole.
  4. Στην MoleClock θα καλείτε την MoveMole κάθε φορά που ο μετρητής χρόνου (timer) goes off (every second).
  5. Υλοποιήστε έναν χειριστή που κάνει τα ακόλουθα όταν ο τυφλοπόντικας δέχεται άγγιγμα:
    1. Αυξήστε κατά ένα το σκορ.
    2. Κάντε το τηλέφωνο να δονηθεί σύντομα.
    3. Καλέστε την MoveMole.

Για να συνεχίσετε, ανοίξτε το Blocks Editor.

Δημιουργώντας μεταβλητές

Δημιουργήστε τις μεταβλητές holes και currentHole. Τώρα, θα τους δώσουμε ανούσιες αρχικές τιμές. Θα δώσουμε τις πραγματικές αρχικές τιμές στο χειριστή συμβάντων Screen1.Initialize, το οποίο τρέχει όταν η εφαρμογή ξεκινάει. (Για τεχνικούς λόγους, τα components δεν μπορούν να αναφερθούν στα def blocks, τα οποία τρέχουν πριν αρχίσει η εφαρμογή.) Ακολουθεί μία εικόνα και μία λίστα από τα blocks που θα χρειαστείτε:

Block type Drawer Σκοπός
def variable as (holes) Definition Κρατάει μία λίστα .
make a list Lists Δημιουργείστε μία λίστα, για να συμπληρωθεί όταν το πρόγραμμα αρχίσει.
def variable as (currentHole) Definition Κρατάει την παρούσα τρύπα που βρίσκετε ο τυφλοπόντικας.
number (0) Numbers Παρέχει μία απαραίτητη αρχική τιμή για το currentHole.

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

Ξεκινώντας την εφαρμογή

Το πρώτο συμβάν που προκύπτει σε οποιοδήποτε πρόγραμμα του Screen1.Initialize, γι αυτό θα βάλλουμε αρχικό κώδικα σε αυτόν τον χειριστή. Ειδικότερα, θα προσθέσουμε τα στοιχεία της τρύπας στην λίστα με τις τρύπες, ορίστε την ιδιότητα του Picture κάθε τρύπας σε “hole.png”, και καλέστε την MoveMole. Από την στιγμή που δεν έχουμε γράψει ακόμα την MoveMole, θα δημιουργήσουμε μία άδεια διαδικασία με αυτό το όνομα, η οποία θα συμπληρωθεί αργότερα.

Παρακάτω ακολουθεί μία εικόνα και ένας πίνακας των blocks που χρειάζεται να δημιουργήσετε. Σημειώστε ότι το “Any ImageSprite” βρίσκεται στην καρτέλα “Advanced” στα δεξιά των “Built-In” και “My Blocks” στον Blocks Editor.

Block type Drawer Σκοπός
Screen1.Initialize Screen1 Καθορίστε τί θα συμβεί όταν η εφαρμογή θα αρχίσει.
add items to list Lists Προσθέστε τις ακόλουθες τιμές στην …
holes My Definitions …στην λίστα με τις τρύπες:
component Hole1 Hole1 -πάνω αριστερά τρύπα
component Hole2 Hole2 -στην κέντρο πάνω τρύπα
component Hole3 Hole3 -στην πάνω δεξιά τρύπα
component Hole4 Hole4 -στην κάτω αριστερά τρύπα
component Hole5 Hole5 -στην κάτω δεξιά τρύπα
foreach Control Καθορίστε ότι θέλουμε …
name (hole) Definitions …μία μεταβλητή με όνομα “hole”…
holes My Definitions …που αναλαμβάνει κάθε τιμή της λίστας.
ImageSprite.Picture Any Image Sprite Θέστε την ιδιότητα Picture του …
value hole My Definitions …ImageSprite να αναφέρεται από την μεταβλητή hole …
text (hole.png) Text …στην εικόνα της άδειας τρύπας.
to procedure (MoveMole) Definition Δημιουργήστε μία διαδικασία, που θα συμπληρωθεί αργότερα, για την μετακίνηση του τυφλοπόντικα.
MoveMole My Definitions Καλεί την MoveMole για να γίνει η πρώτη τοποθέτηση του τυφλοπόντικα.

Σύγκρινε το block foreach με τα ισοδύναμα blocks τα είναι απαραίτητα:

Το αριστερό σύνολο έχει λιγότερα blocks, με μικρότερη επαναληψημότητα, και αυτό έχει σαν αποτέλεσμα να ελαχιστοποιούνται οι άσκοπες εντολές copy-and-paste κάνοντάς το ευκολότερο σε αλλαγές, για παράδειγμα, αν το όνομα της εικόνας έχει αλλάξει.

Μετακίνηση του τυφλοπόντικα

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

Block type Drawer Σκοπός
set currentHole to My Definitions Αποθήκευσε την…
call pick random item Lists …τυχαία επιλεγμένη…
holes My Definitions …τρύπα.
call Mole.MoveTo Mole Μετακίνησε τον τυφλοπόντικα στην…
ImageSprite.X Advanced/ImageSprite ..συντεταγμένη x της…
currentHole My Definitions …επιλεγμένης τρύπας…
ImageSprite.Y Advanced/ImageSprite …και την συντεταγμένη y …
current Hole My Definitions …της επιλεγμένης τρύπας.

Πρέπει, τώρα, να καθορίσουμε ότι η διαδικασία MoveMole πρέπει να καλείται κάθε φορά που ο χρονομετρητής της MoleClock εξαντλείται. Χρειαζόμαστε μόνο 2 blocks για να το ολοκληρώσουμε:

Block type Drawer Σκοπός
MoleClock.Timer MoleClock Όταν εξαντλείται ο χρονομετρητής…
call MoveMole My Definitions … μετακίνησε τον τυφλοπόντικα.

Registering Touches

Τέλος, χρείαζεται να καθορίσουμε τι συμβαίνει όταν ο τυφλοπόντικας αγγίζεται. Συγκεκριμένα, θέλουμε να:

  1. Αυξάνεται το σκορ.
  2. Δονείται το τηλέφωνο σύντομα.
  3. Μετακινείται ο τυφλοπόντικας.

Μπορούμε εύκολα να το μεταφράσουμε σε blocks:

Block type Drawer Σκοπός
Mole.Touched Mole Όταν αγγίζεται ο τυφλοπόντικας…
set ScoreValueLabel.Text to ScoreValueLabel …ενημερώστε το ορατό σκορ σε…
number (1) Math …1 [και]…
ScoreValueLabel.Text ScoreValueLabel …το προηγούμενο σκορ.
call Buzzer.Vibrate Buzzer Κάντε το τηλέφωνο να δονηθεί για …
number (100) Math …100 milliseconds.
call MoveMole My Definitions Μετακίνησε τον τυφλοπόντικα σε μία νέα τοποθεσία.

Τελικό Πρόγραμμα

Παραλλαγές

Παρακάτω θα βρείτε κάποιες παραλλαγές που ίσως σας ενδιαφέρουν να υλοποιήσετε:

  • Προσθέστε ένα κουμπί Reset για να επιστρέψετε το σκορ πάλι στο 0.
  • Έχοντας το σκορ να εξαρτάται όχι μόνο από τα χτυπήματα αλλά επίσης και από τον αριθμό των αποτυχιών και των τυφλοπόντικων που απέδρασαν.
  • Αυξήστε την ταχύτητα κίνησης του παιχνιδιού αν ο παίκτης τα πάει καλά, ή μειώστε την σε αντίθετη περίπτωση.
  • Προσθέστε ένα δεύτερο τυφλοπόντικα με ένα δεύτερο χρονομετρητή.

Μπορείτε να δείτε πως θα υλοποιήσετε τις πρώτες δύο παραλλαγές στο αυθεντικό εγχειρίδιο Mole Mash.

Ανασκόπηση

Παρακάτω είναι κάποιες ιδέες που παρουσιάζονται σε αυτό το εγχειρίδιο:

  • Τοποθετώντας στοιχεία σε μία λίστα ( List.)
  • Παρουσιάζοντας μία λειτουργία σε κάθε στοιχείο του List με την χρήση του block foreach και τα χαρακτηριστικά Advanced.
  • Τοποθετώντας ένα ImageSprite πάνω σε ένα άλλο, με την χρήση των ιδιοτήτων Z για τον έλεγχο του ποιό πάει μπροστά.
  • Χρησιμοποιώντας το στοιχείο Clock για τον έλεγχο του παιχνιδιού.
  • Δημιουργώντας μία διαδικασία και καλώντας την it από πολλαπλά σημεία.

© Μετάφραση: Νινιδάκης Στυλιανός, Τμήμα Επιστήμης Υπολογιστών Π.Κ., στo πλαίσιo της πρακτικής άσκησης στο Πρότυπο Πειραματικό Γυμνάσιο Ηρακλείου 2012.  Επιμέλεια: Ψαρουδάκης Νικόλαος, Συντονιστής Πρακτικής Άσκησης, Πρότυπο Πειραματικό Γυμνάσιο Ηρακλείου. Πηγή: http://appinventor.mit.edu



Δραστηριότητα 2 – PaintPot (Μέρος 2)
Τρίτη, 11 Δεκεμβρίου 2012, 12:32 μμ
Κάτω από: App_inventor  |  Αφήστε ένα σχόλιο

Αρχικά

Σιγουρευτείτε ότι έχετε ολοκληρώσει την διαδικασία Set Up και έχετε φορτώσει ολοκληρωμένο το project σας από το PaintPot Μέρος 1.

Συνεχίστε από το τέλος του Μέρους 1, με ανοιχτό το project σας στο App Inventor. Χρησιμοποιήστε το κουμπί Save As για να κάνεις ένα αντίγραφο του PaintPot ώστε να δουλεύεις σε μία νέα έκδοση χωρίς να επηρεάζει την κανονική. Ονόμασε το αντίγραφο “PaintPotV2” (χωρίς κενά). Μετά την αποθήκευση, θα πρέπει να δείτε το PaintPotV2 στο Designer.

Δημιουργία μεταβλητών

Το μέγεθος των κουκίδων που ζωγραφίζονται πάνω στον καμβά εντοπίζεται στον χειριστή συμβάντων when DrawingCanvas.Touched όπου call Drawing.DrawCircle καλείται με r, την ακτίνα του κύκλου, ίσο με 5. Για να αλλάξετε το πάχος, το μόνο που χρειάζεται να κάνετε είναι να χρησιμοποιήσετε διαφορετικές τιμές για το r. Χρησιμοποιήστε r = 2 για μικρές κουκίδες και r = 8 για μεγαλύτερες.

Ξεκινήστε με την δημιουργία μεταβλητών για αυτές τις τιμές:

  1. Ανοίξτε το Blocks Editor αν δεν είναι ήδη ανοιχτό και συνδέστε την συσκευή. Το τηλέφωνό σας πρέπει να δείχνει τα κουμπιά και τον καμβά που φτιάξατε προηγουμένα.
  2. Στο Blocks Editor, στην καρτέλα Built-In, ανοίξτε την κατηγορία Definitions. Τραβήξτε ένα block def variable. Αλλάξτε το κείμενο “variable” σε “small”. Ένα κίτρινο παράθυρο προειδοποίησης θα εμφανιστεί στο block. Αν πάτε το δείκτη του ποντικιού πάνω θα δείτε ένα προειδοποιητικό μήνυμα που θα σας εξηγεί ότι το block έχει μία ασύνδετη υποδοχή.
  3. Πρέπει να συνδέσετε την υποδοχή του block με έναν αριθμό που υποδεικνύει την τιμή για το “small” — θέστε το 2 σαν τιμή. Για να παράξετε το αριθμητικό block, πληκτρολογείστε τον αριθμό 2. Ένα μενού θα εμφανιστεί, που θα σας εμφανίζει όλα τα πιθανά blocks που εσωκλείουν το “2” στο όνομά τους. Πατήστε στο πρώτο, που είναι το number 2 μόνο του, και ένα αριθμητικό block με την τιμή 2 θα εμφανιστεί. Συνδέστε το με το def variable block. Το κίτρινο παράθυρο θα εξαφανιστεί, επειδή η ασύνδετη υποδοχή συμπληρώθηκε.

Εδώ είναι τα βήματα της ακολουθίας:

Τώρα έχετε ορίσει μία μεταβλητή με όνομα small της οποίας η τιμή είναι 2.
Παρομοίως με το small, δηλώστε μία μεταβλητή big, με τιμή 8.
Τέλος, δηλώστε μία μεταβλητή dotsize και δώστε την αρχική τιμή 2.

Ίσως αναρωτηθείτε αν είσαι σωστότερο προγραμματιστικά style να αρχικοποιήσουμε την τιμή της dotsize με αυτή της small, δηλαδή 2. Θα ήτας ευσταθής, εκτός από ένα λεπτό προγραμματιστικό σημείο: Κάνοντας αυτό θα προσκρούσουμε στην υπόθεση ότι η small έχει ήδη μία τιμή την στιγμή που η dotsize θα έδινε την τιμή της. Στο App Inventor, δεν μπορείτε να κάνετε υποθέσεις για την σειρά του ποιό def block θα εκτελεστεί. Σε γενικές γραμμές, φυσικά, θα έπρεπε να προσδιορίσετε την σειρά με την οποία παίρνουν τιμές οι μεταβλητές. Μπορείτε να το κάνετε αυτό τοποθετώντας όλες τις τιμές όταν η εφαρμογή αρχικοποιείται, με την χρήση του συμβάντος αρχικοποίησης του Screen. Το εγχειρίδιο Quiz Me δίνει ένα παράδειγμα αρχικοποίησης.

Χρήση των μεταβλητών

Τώρα γυρίστε στον χειριστή συμβάντων αφής που φτιάξατε στο Μέρος 1 και αλλάξτε το block call to DrawCircle με τέτοιο τρόπο ώστε να χρησιμοποιεί την τιμή της dotsize και όχι πάντα με την τιμή 5.

Στο Blocks Editor, μετβείτε στην καρτέλα My Blocks, και ανοίξτε την καρτέλα My Definitions. Θα πρέπει να δείτε έξι νεά blocks, δύο για καθένα από τις τρείς μεταβλητές:

  • ένα block global … που παράγει την τιμή της μεταβλητής
  • ένα block set global … που δίνει στην μεταβλητή μία νεά τιμή.

Αυτά τα blocks δημιουργούνται αυτόματα, παρομοίως με τον τρόπο που τα blocks για τα x και y δημιουργήθηκαν όταν δηλώσατε τον χειριστή when DrawingCanvas.Touched στο μέρος 1 του εγχειριδίου.
Το “Global” σημαίνει “global variable”, σε αντίθεση με τα ορίσματα του event-handler,
του οποίου τα blocks φέρουν την σήμανση “value”. Η διαφορά είναι ότι οι τιμές ορισμάτων είναι προσβάσιμες μόνο από τον κορμό του event handler, ενώ οι global μεταβλητές από όλο το πρόγραμμα.

  • Πηγαίνετε στον χειριστή when MyCanvas.Touched και αντικαταστήστε τον αριθμό 5 στο call DrawCircle με την global dotsize από την κατηγορία MyDefinitions.

Αλλάζοντας τις τιμές των μεταβλητών

Τώρα κατασκευάστε έναν τρόπο να αλλάζει το μέγεθος της κουκίδας σε μικρό (2) ή μεγάλο (8). Κάντε το με την χρήση των κουμπιών.

  1. Στο Designer, τραβήξτε ένα στοιχείο HorizontalArrangement στο Viewer κάτω από το στοιχείο DrawingCanvas. Ονομάστε το στοιχείο “BottomButtons”.
  2. Τραβήξτε το υπάρχον ButtonWipe στο BottomButtons.
  3. Drag two more button components from the Palette into BottomButtons, placing them next to ButtonWipe.
  4. Ονομάστε τα κουμπιά “ButtonBig” και “ButtonSmall”, και ορίστε το Text τους σε “Big dots” και “Small dots”, αντίστοιχα.
  5. Στο Blocks Editor κάτω από το My Blocks, δημιουργείστε έναν χειριστή συμβάντων when … Clicked για το ButtonSmall που αλλάζει την μεταβλητή dotsize που διατηρεί την τιμή του small. Για να αλλάξετε την dotsize κάντε χρήση του block set global dotsize to από την κατηγορία MyDefinitions και συνδέστε στην υποδοχή του block global small
  6. Κάντε έναν παρόμοιο χειριστή συμβάντων για το ButtonBig.

Οι δύο click event handlers πρέπει να μοιάζουν με αυτό:

Τελειώσαμε! Μπορείται να σχεδιάσετε στο PaintPot και να χρησιμοποιήσετε τα νέα κουμπιά για να σχεδιάσετε μεγάλες ή μικρές κουκίδες. Σημειώστε ότι τραβόντας το δάχτυλό σας παράγεται ακόμα μία λεπτή γραμμή. Αυτό γίνεται επειδή οι αλλάγές που μόλις κάναμε δεν επηρρεάζουν το πως καλείται το DrawLine

Ορίστε το τελικό πρόγραμμα στο Designer:

και στο Blocks Editor:

Μία δυσλειτουργία που θα μπορούσατε να λύσετε: Το πρόγραμμα που μόλις φτιάξατε έχει μία μικρή δυσλειτουργία. Αν αρχίσετε να σχεδιάζετε πριν πατήσετε κάποιο από τα κουμπιά, το χρώμα θα είναι μαύρο. Ωστόσο, μετά που επιλέγετε ένα χρώμα, δεν υπάρχει τρόπος να ξαναγυρίσετε στο μαύρο. Σκεφτείτε πώς μπορείτε να το διορθώσετε αυτό.

© Μετάφραση: Νινιδάκης Στυλιανός, Τμήμα Επιστήμης Υπολογιστών Π.Κ., στo πλαίσιo της πρακτικής άσκησης στο Πρότυπο Πειραματικό Γυμνάσιο Ηρακλείου 2012.  Επιμέλεια: Ψαρουδάκης Νικόλαος, Συντονιστής Πρακτικής Άσκησης, Πρότυπο Πειραματικό Γυμνάσιο Ηρακλείου. Πηγή: http://appinventor.mit.edu



Αλλαγή μεγέθους γραμματοσειράς
Αντίθεση