Τρίτη, 22 Μαρτίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 28ο

Το κεφάλαιο αυτό δεν αναφέρεται στα παράθυρα χρήστη αλλά στην κονσόλα, τη βασική οθόνη της Μ2000. Στο σχέδιο παρακάτω οι φόρμες χρήστη βρίσκονται στο κέντρο ("Φόρμες επιστρέφουν γεγονότα..."). Για αυτές θα δούμε στο επόμενο κεφάλαιο. 


16.9 Χρήση Επιπέδων

Είδαμε στο 16.3 περί Οθόνης και Περιθωρίου, ότι είναι δυο επίπεδα και μπορούμε να γράφουμε στο καθένα. Είδαμε την Τύπος που περιορίζει τις διαστάσεις της Οθόνης.

Τύπος 12
Τύπωσε "Αυτά είναι δωδεκάρια γράμματα"
Τύπωσε "Χαρακτήρες ανά γραμμή:";πλάτος
Τύπωσε "Γραμμές Χαρακτήρων:";ύψος

ή μπορούμε να ορίσουμε μέγεθος οθόνης (μπορούμε να βάλουμε μεγαλύτερο από το μέγεθος της πραγματικής οθόνης και να την μετακινούμε προγραμματιστικά)

Τύπος 12, 8000, 6000
Τύπωσε "Αυτά είναι δωδεκάρια γράμματα"
Τύπωσε "Χαρακτήρες ανά γραμμή:";πλάτος
Τύπωσε "Γραμμές Χαρακτήρων:";ύψος

Το περιθώριο τώρα είναι μαύρο. Μπορούμε να φροντίσουμε να αλλάξει:

Περιθώριο 12 {
      Οθόνη 1
}

Μπορούμε να ορίσουμε μέγεθος γραμμάτων και για το περιθώριο και να γράψουμε σε αυτό και πριν φύγουμε από αυτό να γράψουμε στο Επίπεδο (στη βασική οθόνη)

Τύπος 12, 8000, 6000
Τύπωσε "Αυτά είναι δωδεκάρια γράμματα"
Τύπωσε "Χαρακτήρες ανά γραμμή:";πλάτος
Τύπωσε "Γραμμές Χαρακτήρων:";ύψος
Περιθώριο 12 {
      Οθόνη 1
      Τύπωσε "Αυτά είναι δωδεκάρια γράμματα"
      Τύπωσε "Χαρακτήρες ανά γραμμή:";πλάτος
      Τύπωσε "Γραμμές Χαρακτήρων:";ύψος
      Επίπεδο {
            Τύπωσε "Οκ"
      }
      Τύπωσε "Οκ.."
}
Τύπωσε "Οκ..."


Όποτε θέλουμε να γράψουμε ή να σχεδιάσουμε  στο περιθώριο βάζουμε το μπλοκ Περιθώριο {}. Όποτε θέλουμε να γράψουμε ή να σχεδιάσουμε στο Επίπεδο (το βασικό) βάζουμε το Επίπεδο {}. Εξ ορισμού ξεκινάμε από το Επίπεδο.

16.10 Μετακίνηση Επιπέδου


Το βασικό επίπεδο μπορούμε να το κρύψουμε με την Σβήσε, να το αλλάξουμε και να το επαναφέρουμε με την Άναψε. Μπορούμε να το κινήσουμε με την Κίνηση και μπορούμε να διαβάζουμε τη θέση του με την Κίνηση.Χ και Κίνηση.Υ


Σβήσε
Τύπος
12, 8000, 6000
Περιθώριο 12 {
      Φόντο 1,5
}
Τύπωσε "Οκ..."
Χτέρμα=κίνηση.χ
Κίνηση -χ.σημεία
α$=κομ$
Άναψε
Κάθε 1000/60 {
      Κίνηση κίνηση.χ+πλάτος.σημείου*4
      Αν Χτέρμα<=κίνηση.χ Τότε έξοδος
}

 

16.11 Δείκτης Ποντικιού

Ο δείκτης πάνω από το επίπεδο μπορεί να αλλάζει.

Τύπος 12, 8000, 6000
Περιθώριο 12 {
      Φόντο 1,5
      Δείκτη.Μορφή 2 ' σταυρός
}
Τύπωσε "Οκ..."
Δείκτη.Μορφή Κρύψε
α$=κομ$
Περιθώριο {Δείκτη.Μορφή 1}
Δείκτη.Μορφή 1 ' κανονικό


Μπορούμε να κρύβουμε το δείκτη με την Κρύψε, ενώ με την Δείξε ή με επιλογή δείκτη να τον εμφανίσουμε ξανά. Εκτός από τις προεπιλεγμένες τιμές του δείκτη από 0 έως 15 έχουμε τη δυνατότητα να δώσουμε αρχείο με εικόνα του δείκτη, αρχείο με  ico.Πάμε στο (browser-> sort by alphabet-> 2001) ή από εδώ!
http://www.iconarchive.com/show/2001-space-odyssey-icons-by-zyotism.html

....και κατεβάζουμε τα εικονίδια, σε zip αρχείο για XP (Size: 457.4 KB), απ΄όπου ανοιγουμε το zip αρχείο αντιγράφουμε τα εικονίδια και μετά πάμε στο φάκελο χρήστη (εκεί είμαστε από την αρχή, αλλα μπορεί να έχει αλλαχτεί), και μετά ζητάμε από το Σύστημα να μας ανοίξει το κατάλογο αυτόν στον explorer. Οπότε εκεί αντιγράφουμε τα εικονίδια

Κατάλογος Χρήστη
Σύστημα Κατ$


Τώρα δίνουμε την εντολή για να πάρει το εικονίδιο Δείκτη.Μορφή κατ$+"HAL-9000.ico"

Οι μορφές αριθμητικά έχουν νούμερα από 0 έως 15 και το 99 που δηλώνει το δηλωμένο από αρχείο εικονίδιο.

16.12 Θέση Δείκτη

Ο δείκτης αλλάζει  θέση όταν μετακινούμε το ποντίκι, αλλά αλλάζει και αν μετακινήσουμε το επίπεδο κάτω από το δείκτη. Υπάρχουν όμως δυο ζευγάρια τιμών, το σχετικό και το απόλυτο. Το απόλυτο είναι η θέση του δείκτη σε σχέση με την πάνω αριστερή γωνία του περιθώριου, ενώ το σχετικό είναι η θέση του δείκτη σε σχέση με την πάνω αριστερή γωνία του  επιπέδου.
Η θέση του επιπέδου αλλάζει με την εντολή Κίνηση, ενώ δεν κινούμε το δείκτη η σχετική του θέση αλλάζει, αλλά όχι η απόλυτη!
\\ Κεντράρει το επίπεδο στο παράθυρο
Κίνηση Κέντρο
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ
Κίνηση Κίνηση.Χ+1000, Κίνηση.Υ+200
\\ περιμένουμε ένα δευτερόλεπτο
Αναμονή 1000
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ
Κίνηση Κίνηση.Χ-1000, Κίνηση.Υ-200
\\ περιμένουμε ένα δευτερόλεπτο
Αναμονή 1000
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ

16.13 Μετακίνηση Παραθύρου

Τώρα θα μετακινήσουμε το παράθυρο, και θα δούμε με ακίνητο το ποντίκι τι αλλάζει! Η εντολή λέγεται Κίνηση.π και η τρέχουσα θέση της πάνω αριστερής γωνίας είναι τα Κίνηση.πΧ και Κίνηση.πΥ, τα οποία έχουν για 0,0 (ή αρχή των αξόνων όπως λέμε) την πάνω αριστερή γωνία της οθόνης.
\\ Δεν υπάρχει εντολή για κεντράρισμα στο παράθυρο
\\ γίνεται αυτόματα νε το ; στο τέλος της εντολής Παράθυρο
Κίνηση.π 0,0
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ
Κίνηση.π Κίνηση.πΧ+1000, Κίνηση.πΥ+200
\\ περιμένουμε ένα δευτερόλεπτο
Αναμονή 1000
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ
Κίνηση.π Κίνηση.πΧ-1000, Κίνηση.πΥ-200
\\ περιμένουμε ένα δευτερόλεπτο
Αναμονή 1000
Τύπωσε Δείκτης.Χ, Δείκτης.Υ
Τύπωσε ΔείκτηςΑ.Χ, ΔείκτηςΑ.Υ

16.14 Καθορισμός Παραθύρου


Η εντολή Παράθυρο στο βασικό παράθυρο αλλάζει το παράθυρο της εφαρμογής μαζ'ί με το επίπεδο. Σε άλλα επίπεδα και σε άλλα παράθυρα που φτιάχνει η εφαρμογή, η εντολή δίνει το μέγεθος του παραθύρου. Μόνο το βασικό παράθυρο έχει τα επιπλέον επίπεδα όπως το βασικό και 32 ακόμα που χρησιμοποιούνται ως πρόσθετα.
\\ ειδική περίπτωση, αλλάζει και το βασικό επίπεδο
\\ αφού πρώτα κάνει το παράθυρο στη μέγιστη διάσταση
\\ που πιάνει όλη την οθόνη, με θέση πάνω γωνίας το 0,0
\\ και μετά εφαρμόζει το Τύπος 12
Παράθυρο 12,0
Τύπωσε "12άρια Γράμματα"
Αναμονή 1000
Παράθυρο 12,10000,6000
Κίνηση.π 3000,1000
Αναμονή 1000
Παράθυρο 12,10000,6000;   \\ κεντραρισμένο, δες το ;
Αναφορά "Δώσε [Παράθυρο 12,0] για να έχεις πλήρη οθόνη!"

16.15 Μετακίνηση Παραθύρου με το Δείκτη (Πρόγραμμα)


Όσο πατάμε οποιοδήποτε πλήκτρο του ποντικιού μετακινούμε το παράθυρο.

Ενώ Δείκτης=0 {
      Αναμονή 10
}
Χ=Δείκτης.Χ
Υ=Δείκτης.Υ
Κάθε 10 {
      Αν Δείκτης=0 τότε έξοδος
      Κίνηση.Π Κίνηση.ΠΧ+(Δείκτης.Χ-Χ), Κίνηση.ΠΥ+(Δείκτης.Υ-Υ)
}


Δοκιμάστε και με την εντολή αυτή ως πρώτη:

Παράθυρο 12, 10000,8000

Η μεταβλητή μόνο ανάγνωσης Δείκτης δίνει 1 ή 2 ανάλογα να είναι το αριστερό ή το δεξί πλήκτρο του ποντικιού.

16.16 Αλλαγές στο Παράθυρο με την εντολή Φόρμα

Είδαμε το χειρισμό του παραθύρου με τη Τύπος και Παράθυρο. Υπάρχει άλλη μια εντολή η οποία επενεργεί με διαφορετικό τρόπο στο μέγεθος του βασικού επιπέδου, και στο περιθώριο. Ενώ οι προηγούμενες εντολές καθόριζαν το μέγεθος (Τύπος) των γραμμάτων, με συγκεκριμένο δηλαδή ύψος γράμματος, η εντολή φόρμα έχει άλλη προσέγγιση. Το μέγεθος των γραμμάτων είναι το ζητούμενο και όχι το δεδομένο.
Στο παράδειγμα θέλουμε μια "κονσόλα" 40Χ20 χαρακτήρων, αλλά όχι όσο χωράει στην οθόνη, αλλά με βάσει το μέγεθος των γραμμάτων από αυτά που δίνουν το 80Χ40 στη τρέχουσα οθόνη.(Αυτό το παράδειγμα θα τρέξει σε οποιαδήποτε οθόνη). Στην αρχή επιλέγω χαρακτηριστικά της κονσόλας μου, όπως φόντο (με την εντολή Οθόνη), πένα, γραμματοσειρά, διάστιχο, φαρδιά κα πλάγια.
Η εντολή Φόρμα χωρίς παράμετρο, κόβει το παράθυρο στα μέτρα της οθόνης. Η ίδια εντολή με το ελληνικό ερωτηματικό επαναφέρει σε πλήρη οθόνη το παράθυρο, και βάζει το βασικό επίπεδο στο κέντρο. Οπότε για να κεντράρουμε το βασικό επίπεδο δίνουμε Φόρμα : Φόρμα ;
\\ πλήρη οθόνη με 12άρια γράμματα Tahoma
\\ και διάστιχο 0 (η τιμή αλλάζει ανά 30 twips)
Οθόνη 5
Πένα 14
Γραμματοσειρά "Tahoma"
Διάστιχο 0 : Φαρδια 0 : Πλάγια 0
Παράθυρο 12, 0
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Αναμονή 3000
Φόρμα 80, 40
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Περιθώριο { } \\ παίρνει το χρώμα από την βασική οθόνη - αυτό γίνεται μια φορά!
Αναμονή 1000
Περιθώριο { Φόντο 1, 5 } \\ κάθετη διαβάθμιση από μπλε σε ματζέντα
Αναμονή 5000
Φόρμα 80,20;
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Αναμονή 2000
Φόρμα
Περιθώριο { Φόντο 1, 5 }
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Αναμονή 2000
Φόρμα 40,20
Περιθώριο { Φόντο 1, 5 }
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Αναμονή 1000
Φόρμα ;   \\ ανάκτηση του περιθωρίου σε πλήρη οθόνη, και φόρμα 40Χ20 στο κέντρο.
Περιθώριο { Φόντο 1, 5 }
Τύπωσε μορφή$("Πλάτος σε χαρακτήρες={0}, Ύψος σε γραμμές χαρακτήρων={1}", Πλάτος, Ύψος)
Και το πρόγραμμα μετακίνησης με αυτόματο κεντράρισμα:
Παράθυρο 12, 10000,8000
Ενώ Δείκτης=0 {
      Αναμονή 10
}
Χ=Δείκτης.Χ
Υ=Δείκτης.Υ
Κάθε 10 {
      Αν Δείκτης=0 τότε έξοδος
      Κίνηση.Π Κίνηση.ΠΧ+(Δείκτης.Χ-Χ), Κίνηση.ΠΥ+(Δείκτης.Υ-Υ)
}
Φόρμα ; : Φόρμα
 

16.17 Στόχοι και Επίπεδα


Υπάρχουν 32 επίπεδα με νούμερα από 1 έως 32. Σε κάθε επίπεδο μπορούμε να έχουμε στόχους. Οι στόχοι όταν ενεργοποιούνται καλούν γενικά τμήματα ή δίνουν άμεσες εντολές που γνωρίζει η γραμμή εντολών. Τα επίπεδα και οι στόχοι ανήκουν στο βασικό παράθυρο.
Τα επίπεδα χρησιμοποιούνται για να δείξουν επιλογές ή πληροφορίες χωρίς να ενοχλούν την βασική οθόνη.
Οι στόχοι φτιάχνονται ανεξάρτητα σε κάθε επίπεδο, και στο βασικό και στο περιθώριο. Εδώ φτιάχνουμε ένα νήμα για να μετακινεί το επίπεδο 1. Θα μπορούσαμε να χρησιμοποιήσουμε την Κύριο.Έργο, αλλά εδώ χρησιμοποιούμε την Κάθε { }.
Κάθε στόχος έχει μια μεταβλητή χειρισμού. Στο επόμενο τεύχος θα δούμε μερικά παραδείγματα των στόχων. Εδώ απλά χρειάζεται να αναφερθεί ότι το σύστημά τους υπήρχε από την πρώτη έκδοση της γλώσσας. Αντί ο στόχος να εκπέμπει μήνυμα, σαρώνεται, δηλαδή διαβάζεται ο χειρισμός του ποντικιού και βρίσκει, το περιβάλλον, ποιος στόχος ενεργοποιήθηκε και καλεί το πρόγραμμά του, στο διάστημα της σάρωσης.
Μπορούμε να κάνουμε αλλαγές στους στόχους με την Αλλαγή, και εδώ έχουμε ονόματα παραμέτρων! Μόνο αυτή η εντολή το έχει! Τα στοιχεία εδώ που ονομάζουμε τα γράφουμε σε μια γραμμή χωρίς ονόματα, με την Στόχος.
Με βοήθεια Στόχος βλέπουμε τι παραμέτρους παίρνουν οι στόχοι. Γενικά οι στόχοι σχηματίζονται σε περιοχές που οριθοθετούνται από χαρακτήρες. Η πάνω αριστερή γωνία είναι θέση του δρομέα όταν φτιάχνουμε το στόχο. Οι στόχοι δεν μετακινούνται αλλά μια εντολή Τύπος τους σβήνει. Όπως και η εντολή Στόχοι Νέοι που σβήνει του στόχους από όλα τα επίπεδα. Αν θέλουμε ένας στοχος με μεταβλητή ελέγχου ΕΔ να μην "ακούει" δίνουμε το Στόχος ΕΔ, 0
Μπορούμε να επιλέξουμε τη θέση της φράσης (βάσει του αριθμητικού πληκτρολογίου, το 5 είναι το κέντρο) στην αρχή (και αυτό δεν αλλάζει). Μπορούμε να αλλάζουμε φόντο, πλαίσιο, χρώμα φράσης (πένα), φράση, αλλά και οδηγία. Η οδηγία τρέχει στο αρχικό αντικείμενο εκτέλεσης, αυτό της γραμμής εντολών (πριν καλέσουμε ένα τμήμα). Εκτελείται από τον μεταφραστή γραμμής που δεν υποστηρίζει επαναλήψεις. Μπορούμε όμως να καλέσουμε ένα γενικο τμήμα και να αλλάξουμε γενικές μεταβλητές.
Αλλαγή ΕΔ, Φράση "οκ"
Αλλαγή ΕΔ, Φόντο 2
Αλλαγή ΕΔ, Πλαίσιο 15
Αλλαγή ΕΔ, Πένα 15, Πλαίσιο 7, Φόντο 3, Φράση "ΟΛΑ ΚΑΛΑ"
Αλλαγή ΕΔ, Οδηγία "ΟΘΟΝΗ"
Το γράφουμε σε ένα τμήμα έστω Δ

Τμημα Α {
      Τμημα Β {
            Επιπεδο 1 {
                  Γραμματοσειρα "ARIAL"
                  Φαρδια 1
                  Παραθυρο 12, 7000,1500
                  Οθονη 2
                  Αναφορα "Επίπεδο 1"
                  Κίνηση 100,2000
                  Άναψε
            }
      }
      \ Παράδειγμα με τρεις στόχους σε διαφορετικά επίπεδα
      Αναψε
      Ενταση 50
      Παραθυρο 12,10000, 8000;
      Φαρδια 1
      ΕΣ=0
      Τυπος 12, Χ.Σημεια-2000, 2000
      Οθονη 1
      Κινηση 2000,4000
      Περιθωριο {
      \ Στόχος σε περιθώριο
            Φαρδια 0
            Οθονη 6
            Αναφορα "Περιθώριο"
            Δρομεας 1,2
            Τυπωσε Γραμματοσειρα$
            Δρομεας 13,4
            Στόχος ΕΔ,"ΜΠΙΠ",12,1,13,5,104,"ΚΛΙΚ ΕΔΩ"
      }
      \ Στόχος στο κανονικό επίπεδο
      ΕΔ1=0
      Αναφορα "Βασικό Επίπεδο"
      Δρομεας 1,2
      Τυπωσε Γραμματοσειρα$
      Δρομεας 13,3
      Στόχος ΕΔ1,"ΜΠΙΠ",12,1,13,5,106,"ΚΛΙΚ ΕΔΩ"
      Κάλεσε Β
      Επιπεδο 1 {
            \ Στόχος στο επίπεδο 1 (δες το τμήμα Β που το έφτιαξε)
            ΕΔ2=0
            Δρομεας 1,2
            Τυπωσε Γραμματοσειρα$
            Δρομεας 13,3
            Στόχος ΕΔ2,{ΜΠΙΠ: Πληκτρολόγιο "!"},12,1,13,5,105,"ΚΛΙΚ ΕΔΩ"
            Νημα {
                  \\  το νήμα δημιουργήθηκε στο επίπεδο 1, οπότε το γνωρίζει αυτό
                  \\ και τρέχει πάντα στο επίπεδο αυτό!
                  Αλλαγή ΕΔ2, Φόντο Τυχαίος(1,4)
                  Κίνηση Τυχαιος(4000), Τυχαιος(4000)
            } Ως Λ
      }
      \ Κάθε ενάμιση δευτερόλεπτο το Επίπεδο 1 θα αλλάζει θέση
      \ Πρέπει να κάνουμε κλικ στο στόχο του επιπέδου 1 για να
      \ Τερματίσει το πρόγραμμα!
      Νημα Λ Καθε 1500
      Καθε 100 {
            \  Εδώ είναι το κεντρικό τμήμα που εκτελείται τουλάχιστον 0.1 δευτερόλεπτα
            \ Αν και η Σαρωσε απασχολεί το σύστημα για 0.3 το τμήμα καθυστερεί χωρίς πρόβλημα
            Σαρωσε 0.3
            \ Αν πιέσουμε κάποιο πλήκτρο τότε προκαλείται έξοδος
            Αν Ενκομ$<>"" Τοτε Εξοδος
      }
      \\ καθαρισμός
      Νημα Λ Σβησε
      \\ η Παίκτης 0 σβήνει όλα τα επίπεδα-παίκτες
      \\ λέγονται και παίκτες διότι γίνονται διαφάνεις (sprites)
      Παικτης 0
      Στόχοι Νεοι
}

Α  ' εδώ καλούμε το Α

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου