Το μάθημα απαιτεί κάποιος να έχει εγκαταστήσει και να γνωρίζει πως να ξεκινήσει τον μεταφραστή. Συνήθως κάποιος μαθαίνει προγραμματισμό μαζί με κάποιον που ξέρει κάτι περισσότερο, τουλάχιστον στα πρώτα βήματα.
Μπορεί κανείς να δει στις πηγές το Μαθαίνω Προγραμματισμό, το πρώτο κεφάλαιο (έχει αρκετές εικόνες), για να πάρει τις πρώτες ιδέες, για το πως γράφουμε ένα πρόγραμμα στον διορθωτή (editor) της Μ2000.
Στη θεωρία τώρα:
Ένα πρόγραμμα στη Μ2000 γράφεται σε ένα τμήμα. Η σύνταξή του είναι απλή:
Τμήμα Άλφα {
Τύπωσε "Γράμματα ίσου πάχους"
}
Άλφα
Οι μπλε λέξεις είναι οι γνωστές λέξεις (οδηγίες ή εντολές) για τον μεταφραστή της γλώσσας! Λέμε για μεταφραστή διότι έχουμε ένα κείμενο το οποίο μεταφράζεται σε ενέργειες, σε πράγματα που συμβαίνουν στον υπολογιστή μας!
Η εντολή Τμήμα δημιουργεί ένα τμήμα με ένα όνομα, εδώ το Άλφα. Μέσα στις αγκύλες βάζουμε το πρόγραμμα που θα εκτελεστεί όταν καλέσουμε το τμήμα. Η κλήση του τμήματος γίνεται με το όνομά του. Οι τόνοι στα ελληνικά ονόματα αφαιρούνται, καθώς και κεφαλαία/μικρά είναι το ίδιο. Έτσι το Άλφα και το ΑΛΦΑ και το Αλφα είναι το ίδιο πράγμα. Αυτό γίνεται και για τις εντολές και για τα ονόματα που δίνουμε σε κάτι που σημαίνει κάτι. Σε ονόματα ετικετών (που σημαδεύουν κώδικα) οι τόνοι, τα μικρά και τα μεγάλα κάνουν τα ονόματα διαφορετικά.
Το πρόγραμμά μας έχει μια εντολή, την Τύπωσε και δίπλα της έχει κάτι που το λέμε συμβολοσειρά, δηλαδή μια σειρά με σύμβολα (γράμματα, αριθμοί, οτιδήποτε) τα οποία βρίσκονται ανάμεσα σε δυο διπλά εισαγωγικά. Η συμβολοσειρά λέγεται και "σταθερό αλφαριθμητικό". Σταθερό εδώ σημαίνει ότι στο πρόγραμμά μας δεν θα αλλάξει, δηλαδή κάθε φορά που θα εκτελεστεί η Τύπωσε θα έχει αυτό το αλφαριθμητικό, ή με άλλη έκφραση: αυτή την τιμή αλφαριθμητικού.
Στο μυαλό του προγραμματιστή μένει τώρα ότι κάθε φορά που θα βάλω την οδηγία ή εντολή Άλφα θα εμφανίσει ένα συγκεκριμένο μήνυμα. Αυτό που δεν βλέπουμε εδώ είναι ότι θα γίνει και αλλαγή γραμμής στην οθόνη μας. Έτσι αν δώσουμε τρεις φορές την εντολή: Άλφα : Άλφα : Άλφα θα πάρουμε αυτό:
Γράμματα ίσου πάχους
Γράμματα ίσου πάχους
Γράμματα ίσου πάχους
Στη Μ2000 είναι ότι μπορούμε να γράψουμε τμήματα μέσα σε τμήματα! Ότι είναι μέσα σε ένα τμήμα είναι "γνωστό" στο τμήμα και "άγνωστο" στο τμήμα που περιέχεται και επίσης "άγνωστο" στα τμήματα που το ίδιο περιλαμβάνει. Εδώ συζητάμε για τη θέαση των τμημάτων. Τα τμήματα που δεν περιέχονται σε άλλα τμήματα είναι θεατά από παντού και λέγονται Γενικά (καθολικά ή σφαιρικά θα το δούμε σε άλλες γλώσσες).
Ότι ονόματα δημιουργούμε σε ένα τμήμα είναι "δικά του", είναι τοπικά (σε αντίθεση με αυτό που λέμε γενικό), εκτός αν το δηλώσουμε ως γενικό. Εδώ δεν θα δούμε αυτή την περίπτωση.
Εντός του Άλφα δεν μπορούμε να καλέσουμε το Άλφα (όχι με τον απλό τρόπο γράφοντας το όνομά του), γιατί δεν το γνωρίζει (ακόμα και γενικό τμήμα να έχουμε η Μ2000 αποκλείει την αναδρομή σε κλήση με το όνομα του τμήματος).
Αν ρίξουμε μια γρήγορη ματιά στο πρόγραμμα παρακάτω θα δούμε ότι με μαύρο χρώμα είναι τα άγνωστα στο διερμηνευτή ονόματα:
YinYang
Σχήμα1
Όνομα_Αρχείου$
Φ
Το (1) είναι όνομα τμήματος, δηλαδή είναι πρόγραμμα. Το (2) έχει ένα σχήμα (το πως το έχει δεν μας ενδιαφέρει τώρα). Το (3) είναι μια μεταβλητή που κρατάει το αλφαριθμητικό (σταθερή τιμή: "yin and yang.emf"). Το (4) είναι μια αριθμητική μεταβλητή και κρατάει τον "αριθμό χειριστή αρχείου". Η εντολή Άνοιξε παράγει έναν αριθμό και όταν θέλουμε να δώσουμε (επειδή εδώ είναι για εξαγωγή, λέμε δίνουμε) λέμε σε ποιο αρχείο με τον αριθμό αρχείου Φ. (είναι πρακτικό).
Το (3) θα μπορούσαμε να μην το χρησιμοποιήσουμε και όπου το έχουμε τώρα στο κώδικα να το αλλάξουμε με την σταθερή τιμή: "yin and yang.emf". Για πρακτικούς λόγους εδώ βάζουμε την μεταβλητή. Κάνει δυο δουλειές: Κρατάει τη τιμή αλφαριθμητικού και με το όνομά της μας λέει τι είναι!
Ο καλύτερος τρόπος να δει κανείς ένα πρόγραμμα είναι να το χαλάσει επιλεκτικά! Δηλαδή να βάλει το // ή το \\ ή το ' ή το ΣΗΜ πριν από μια εντολή για να τη κάνει σημείωση (άρα να μην εκτελεστεί).
Σε επίπεδο επαγγελματικό, ο ικανός προγραμματιστής βρίσκει γρήγορα τα λάθη του βάζοντας σε κάποια σημεία του κώδικα διακοπές εκτέλεσης για θέαση τιμών (να δει τι αλλάζει σε σχέση με αυτό που έχει σκεφτεί ότι θα γίνει). Ο χρόνος εκσφαλμάτωσης (διόρθωσης λαθών) είναι περίπου τα 7/10 του συνολικού χρόνου συγγραφής του προγράμματος. Δηλαδή αν κάτι θέλει τρεις ώρες για να γραφτεί, θα θέλει άλλες επτά για να διορθωθεί! Έτσι το να κάνει κανείς λάθος δεν είναι κάτι πρωτόγνωρο ή κάτι που κάνουν μόνο οι νέοι. Όλοι κάνουν λάθη γιατί κάθε φτασμένος προγραμματιστής πάντα καταπιάνεται με κάτι της δυνατότητάς του ή και περισσότερο (πάντα θα είναι δύσκολο). Οτιδήποτε άλλο λέγεται συντήρηση λογισμικού. Εδώ για παράδειγμα συντήρηση λογισμικού θα ήταν να αλλάξουμε το τίτλο, πχ το Yin and Yang να γίνει Γιν και Γιανγκ. Δηλαδή απλά πράγματα που δεν αλλάζουν την ουσία του προγράμματος.
Κάποιοι μιλάνε για αλγόριθμο = προγραμματισμός = αλγοριθμική σκέψη. Είναι ένας τρόπος να πλανάται ο κόσμος με ορισμούς. Το πρόγραμμα που βλέπουμε εδώ δεν εκτελεί κανένα ονομαστό αλγόριθμο, παρά μια ακολουθία εντολών. Το ενδιαφέρον στο κώδικα είναι ένα μπλοκ εντολών που εκτελείται κάθε 60 χιλιοστά του δευτερολέπτου. Δείτε την εντολή Κάθε 1000/60 { } (δείτε τις αγκύλες που περιέχουν το μπλοκ εντολών). Τα 60 και 1000 λέγονται σταθερές αριθμητικές τιμές, ενώ το 1000/60 αποτελεί μια θέση Αριθμητικής Έκφρασης (ή παράστασης). Η εντολή Κάθε απαιτεί μια αριθμητική παράμετρο σε χιλιοστά του δευτερολέπτου, ακριβώς μετά το όνομα της και ένα μπλοκ εντολών. Για να βγούμε από το μπλοκ πρέπει να κάνουμε Έξοδο με την εντολή Έξοδος. Με το 1000 θα λέγαμε κάθε ένα δευτερόλεπτο, ενώ το 1000/60 λέει κάθε 1/60 του δευτερόλεπτου (αφού το 1000 είναι 1 δευτερόλεπτο). Αν κάνουμε λάθος και δώσουμε το 60/1000 τότε έχουμε κάτω από ένα χιλιοστό δευτερολέπτου (ο διερμηνευτής δεν αφήνει να πάει ο χρόνος κάτω από 5 χιλιοστά, δηλαδή αυτορυθμίζεται).
Επίσης υπάρχει και ένα άλλο μπλοκ που λέγεται σχέδιο και μέσα σε αυτό υπάρχουν δυο άλλα με ίδιο όνομα εντολής Πάχος. Το πρώτο συντάσσεται ως εξής Σχέδιο { } ως ΌνομαΜεταβλητής (έχει και παραλλαγή που δεν θα δούμε εδώ). Οι εντολές γραφικών εντός του μπλοκ πάνε σε ένα αρχείο το οποίο κρύβεται μέσα σε ένα αντικείμενο "Διάρθρωση Μνήμης" το οποίο έχει μια έκταση μνήμης. Αυτό το αρχείο το γράφουμε στο δίσκο στο τέλος του προγράμματος. Επίσης το χρησιμοποιούμε για να το αναπαράγουμε στην Οθόνη μας με την εντολή Εικόνα.
Το μπλοκ Πάχος Αριθμητική_Έκφραση { } κάνει εντός του μπλοκ να τα γραφικά να χρησιμοποιούν το Πάχος που ορίζουμε στην Αριθμητική έκφραση (ενός Pixel). Στα σχέδια οι μονάδες λέγονται twips, όπου 1440 twips είναι μια ίντσα (στον εκτυπωτή, ενώ στην οθόνη έχουμε τη λογική ίντσα, κάτι που δεν ισούται με το μήκος με τη πραγματική ίντσα).
(Προσθήκη 15/12/2025)
Παράξενα Ονόματα/Θέματα
Pixel: Εικονοστοιχείο. Ένα τετραγωνάκι (συνήθως, αλλά μπορεί να είναι παραλληλόγραμμο) στη οθόνη μας που παίρνει μόνο μια τιμή χρώματος. Μια οθόνη με πολύ μικρά μικρά Pixel σημαίνει ότι σε μια ίντσα (2,54 εκατοστά) έχουμε πολλά εικονοστοιχεία δηλαδή γράφεται περισσότερη πληροφορία. Μια οθόνη μπορεί να έχει πολλά εικονοστοιχεία, αλλά λόγω μεγέθους να μην έχει μικρά Pixel. Γενικά οι οθόνες σχεδιάζονται για να έχουν την καλύτερη απόδοση σε μια απόσταση όπου τα Pixel να είναι μικρά! (όσο πιο μακριά σταθούμε τόσο πιο μικρά θα γίνονται τα Pixel).
Ράστερ: Μια εικόνα εμφανίζεται στην οθόνη με Pixels. Αν έχουμε ένα σχήμα κύκλου τότε αναγκαστικά θα πρέπεινα σχηματιστεί με Pixel. Αν πλησιάσουμε κοντά στην οθόνη θα δούμε τον κύκλο να έχει "δοντάκια", τις άκρες των εικονοστοιχείων. Αν πάρουμε την εικόνα του κύκλου και την μεγεθύνουμε θα μεγαλώσουν και τα δοντάκια. Αυτό το λέμε πιξέλιασμα! Για να γλιτώσουμε από αυτό θα πρέπει να δώσουμε την εντολή κύκλου στο νέο μέγεθος έτσι ώστε να πάρουμε μεγαλύτερο σχέδιο για ίδιας ποιότητας ράστερ. Η ποιότητα του ράστερ έχει να κάνει με το μέγεθος του εικονοστοιχείου, και τον αριθμό των χρωμάτων/εντάσεων χρώματος. Στην οθόνη έχουμε 24bit χρώμα, οπότε παραβλέπουμε το χρώμα. Μας ενδιαφέρει μόνο το μέγεθος εικονοστοιχείου.
Διανυσματική Εικόνα: Εκτός από τις εικόνες που αποτελούνται από εικονοστοιχεία έχουμε και τις διανυσματικές. Αυτές έχουν το σχέδιο και δεν έχουν το Ράστερ, το οποίο θα αποκτήσουν όταν εμφανίσουμε την εικόνα στη οθόνη, στο μέγεθος που θέλουμε. Έτσι μπορούμε να έχουμε διάφορα μεγέθη και το ράστερ να βγαίνει ανάλογα. Με αυτό τον τρόπο δεν πιξελιάζει η εικόνα! Τις διανυσματικές εικόνες τις λέμε και σχέδια. Ορισμένες φορές μια διανυσματική εικόνα μπορεί να περιέχει ένα ράστερ (δηλαδή μια τελική εικόνα) και σε αυτή την περίπτωση η εμφάνιση στην οθόνη (rendering) μπορεί να δείξει προβλήματα. Για παράδειγμα μια εικόνα έχει άσπρες και μαύρες γραμμές παράλληλες, και μικραίνουμε το σχέδιο στην εμφάνιση, τότε ο τρόπος εμφάνισης μπορεί να εξαφανίσει τις γραμμές και όλη η εικόνα να βγει μαύρη ή άσπρη. Οι γραμμές γίνονται τόσο μικρές που ο αλγόριθμος που αποφασίζει για το ποιο χρώμα θα μπει στο εικονοστοιχεία πιάνει το ένα από τα δύο (πχ το άσπρο).
Ανάμειξη χρωμάτων: Στη Μ2000 όταν έχουμε μια εικόνα (ράστερ, εικονοστοιχεία) και την μικραίνουμε τότε το χρώμα θα προκύψει από τα γειτονικά εικονοστοιχεία. Όταν έχουμε διάφανη εικόνα (δες την εντολή ΔΙΑΦΑΝΟ), τότε δεν ισχύει η ανάμειξη χρωμάτων (θέλουμε το διάφανο να παραμένει διάφανο). Αυτό έχει ως συνέπεια όταν μεγεθύνουμε το διάφανο (sprite) να φαίνονται τα εικονοστοιχεία του μεγαλύτερα! Γενικά εδώ δεν μας πειράζει γιατί μπορούμε να έχουμε διαφορετικές εικόνες ανάλογα με το μέγεθος του διάφανου (sprite).
Απλή δημιουργία κίνησης: Στην πιο απλά μορφή η δημιουργία κίνησης έχει δυο πράγματα, ένα σταθερό φόντο και ένα κινητό στοιχείο εικόνας. Η εντολή ΚΡΑΤΗΣΕ κρατάει ότι έχουμε εμφανίσει στην οθόνη. Η εντολή ΑΦΗΣΕ ανανεώνει την οθόνη με την εικόνα που έχουμε κρατήσει. Το κόλπο εδώ είναι ο χειρισμός με την ΑΝΑΝΕΩΣΗ, όπου αν δώσουμε έναν αριθμό λέμε πότε θα γίνει η επόμενη ανανέωση του παραθύρου, και μέχρι τότε βάζουμε αυτά που θέλουμε, δηλαδή το φόντο και το κινητό στοιχείο στη νέα θέση. Το παράθυρο μας δείχνει μια εικόνα (η τρέχουσα) ενώ μια άλλη εικόνα ετοιμάζεται μέχρι να γίνει ανανέωση (αυτόματα βάσει ενός χρονιστή). Η εντολή ΑΝΑΝΕΩΣΗ 1000 λέει κάνε τώρα την αλλαγή της τρέχουσας με αυτή που έχω φτιάξει και περίμενα ένα δευτερόλεπτο για την επόμενη. Όμως μπορούμε πιο σύντομα να δώσουμε πάλι αυτή την εντολή. Έτσι εμφανίζουμε το παράθυρο με το ρυθμό που θέλουμε. Ο ρυθμός λέγεται Frames per Second (FPS) και εδώ έχει να κάνει με την ανανέωση του παράθυρου με την νέα εικόνα.
Στο παράδειγμα το κινητό είναι το σχέδιο που εμφανίζουμε με περιστροφή (αλλαγή γωνίας). Επίσης όταν πατάμε το αριστερό πλήκτρο του ποντικιού εκτελούμε την ΚΡΑΤΗΣΕ και έτσι γράφουμε στο φόντο (αφού κάνουμε το νέο φόντο αυτό με το σχέδιο).
Προχωρημένη δημιουργία κίνησης:
Εδώ δεν αναφερθούμε εκτεταμένα με την δημιουργία κίνησης. Έχουμε δυο δυνατότητες:
Α) να έχουμε τα διάφανα να μπαίνουν με μια σειρά Α->Β->Γ ενώ εξάγουμε το φόντο που πατάνε. Έτσι σε κάθε ανανέωση πρώτα σβήνουμε από το Γ προς το Α βάζοντας το κρατημένο μικρό φόντο και μετά ξεκινάμε πάλι τα Α->Β->Γ στις νέες θέσεις. Επίσης τα διάφανα μπορούν να έχουν μάσκες, εικόνες με 256 διαβαθμίσεις του γκρι, από άσπρο μέχρι μαύρο, όπου δηλώνουν το ποσοστό διαφάνειας ανά εικονοστοιχείο. Μπορούμε να επιλέγουμε μέγεθος και γωνία (με ή χωρίς μάσκα).
Β) να χρησιμοποιήσουμε τους παίκτες (θέλει καλή κάρτα γραφικών για μεγάλα σχήματα), όπου αναλαμβάνει το λειτουργικό σύστημα να τα εμφανίσει πάνω από την οθόνη (δηλαδή τα εικονοστοιχεία δεν βρίσκονται στην οθόνη), και έτσι δεν χρειάζεται να κρατάμε και να αφήνουμε το φόντο. Οι παίκτες δεν δέχονται μάσκες, αλλά έχουν μόνο διάφανα 100% στοιχεία. Μπορούν όμως να έχουν διάφορα μεγέθη και να εμφανίζονται υπό γωνία.
// για να το κατεβάσουμε κάνουμε κλικ στο σύνδεσμο και το κατεβάζουμε στο φάκελο που βάζει η Μ2000 τα προγράμματα. Με την εντολή ΣΥΣΤΗΜΕ ΚΑΤ$ ανοίγει ο explorer των windows με τον φάκελο, και με κλικ στο μονοπάτι γυρίζει σε ...C:\Users\UserNameABC\AppData\Roaming\m2000
// για να το φορτώσουμε γράφουμε ΦΟΡΤΩΣΕ πρωτο και πατάμε enter (το φόρτωσε βγαίνει και με το Ctrl+F στα ελληνικά (CTRL+L για το LOAD)
// για να το εκτελέσουμε γράφουμε α και πατάμε το enter
// για να το διορθώσουμε γράφουμε σ α και πατάμε το enter
// αν κάνουμε διόρθωση με Esc βγαίνουμε στη γραμμή εντολών και με CTRL+A σώνουμε στο ίδιο αρχείο τις αλλαγές. Ή με μια ΣΩΣΕ κατι_αλλο πατάμε enter και σώνουμε με όνομα κατι_αλλο.gsb
Τμήμα YinYang {
Οθόνη 5,0
Φόντο 0, 5
Διπλά
Τύπωσε Πάνω
Δρομέας 0,0
Αναφορά 2, "阴阳 Yin and yang 음양"
Κανονικά
Σχέδιο {
Κύκλος Γέμισμα 0, 3000,1, 0
Κύκλος Γέμισμα 15, 3000,1,0, πι/2, -πι/2
Βήμα 0, -1500
Κύκλος Γέμισμα 15, 1500,1,15
Πάχος 4 {
Κύκλος Γέμισμα 0, 500,1,0
}
Βήμα 0, 3000
Κύκλος Γέμισμα 0, 1500,1,0
Πάχος 4 {
Κύκλος Γέμισμα 15, 500,1,15
Βήμα 0, -1500
Κύκλος 3000,1,0
}
} ως Σχήμα1
Θέση 6000, 5000-1500
Εικόνα Σχήμα1, 6000
Θέση 2000, 5000
Εικόνα Σχήμα1, 3000
Θέση 2000+1500, 5000+1500
κράτησε
Δείκτη.Μορφή Κρύψε
ι=0
Κάθε 1000/60 {
Αν ενκομ$=" " η Δείκτης=2 Τότε exit
Άφησε
Θέση δείκτης.χ, δείκτης.ψ
Εικόνα Σχήμα1, 3000, ,ι : ι+=5:Αν ι>355 Τότε ι=0
Ανανέωση 1000
Αν Δείκτης=1 Τότε κράτησε
}
Ανανέωση 25
Δείκτη.Μορφή Δείξε
Όνομα_Αρχείου$="yin and yang.emf"
Άνοιξε Όνομα_Αρχείου$ για εξαγωγή ως #Φ
Δώσε #Φ, Σχήμα1, 1
Κλείσε #Φ
Σύστημα "mspaint", Παράθεση$(Κατ$+Όνομα_Αρχείου$)
// Αν υπάρχει το inkscape το ανοίγει!
inkscape$=@ΒρεςΠρόγραμμα("inkscape")
Αν inkscape$<>"" τότε Σύστημα inkscape$+" "+ Παράθεση$(Κατ$+Όνομα_Αρχείου$)
Συνάρτηση ΒρεςΠρόγραμμα(αυτό$)
Όρισε τοπικό σύνδεση "ADODB.Connection"
Μέθοδος σύνδεση, "open", "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
Τοπική μάσκα_εύρεσης$={SELECT System.ItemPathDisplay
FROM SystemIndex
WHERE System.FileName = '@@@.exe'
}
Μέθοδος σύνδεση, "execute", Αλλαγή$("@@@", αυτό$, μάσκα_εύρεσης$) ως νέο εγγραφές
Με.Αντικείμενο εγγραφές, "eof" ως νεο εγγραφές.τέλος, "fields" ως νέο πεδίο_εγγραφής()
=""
Αν όχι εγγραφές.τέλος τότε =πεδίο_εγγραφής(0)
Τέλος Συνάρτησης
}
YinYang
Το πρόγραμμα YinYang κάνει τα παρακάτω:
Εμφανίζει το σχήμα γιν-γιανγκ σε δυο μεγέθη με περιστροφή το μικρότερο στην οθόνη του υπολογιστή μας.
Εμφανίζει τίτλο με ελληνικά και κινέζικα, με αναλογική γραφή (το i στο Yin έχει μικρό πάχος σε σχέση με το Υ)
Εξαφανίζει τον δείκτη του ποντικιού και στη θέση του εμφανίζει το σχέδιο να περιστρέφεται!
Αν πατήσουμε το αριστερό πλήκτρο του ποντικιού βάφουμε με αυτό το σχήμα!
Με το δεξί πλήκτρο τερματίζουμε τη σχεδίαση.
Εξαγωγή του σχήματος σε πρόγραμμα όπως η Ζωγραφική. Αυτό γίνεται όταν τερματίσει η σχεδίαση.
Εξαγωγή του σχήματος στο InkScape αν υπάρχει.
Εδώ έχουμε δυο εικόνες με την εξαγωγή του προγράμματος