Κυριακή 28 Νοεμβρίου 2021

Κάρελ Το Ρομπότ Έκδοση 2

Νέα έκδοση.

Αφαιρέθηκε η εικόνα του Καρελ, και τα hardware sprites, και μπείκε μια συνάρτηση που φτιάχνει το σχέδιο του Καρελ, και δουλεύουμε με software sprites (σκοπεύω να τα βάλω σε παραθυρική εφαρμογή και εκεί δεν παίζουν τα hardware sprites - μόνο στη κονσόλα). Η συνάρτηση έγινε πάνω στην εικόνα του ρομπότ (την εμφάνιζα στη κονσόλα), με επαναλήψεις εκτέλεσης μέχρι να βγει το επιθυμητό! Μετά έγινε και ο εμπλουτισμός με λειτουργία φλιπ (δείτε πόσο εύκολα μπορούμε να αλλάξουμε τιμές και να έχουμε το καθρέφτισμα του σχεδίου). Επιπλέον χρωματίζουμε το ρομπότ (Στο πρόγραμμα σε κάθε εκκίνηση γίνεται επιλογή τυχαίου χρώματος από σύνολο χρωμάτων).

Επίσης διοθρώθηκαν προβλήματα αναγνώρισης περασμάτων στον κόσμο. Τώρα λειτουργεί όπως σχεδιάστηκε. Για να γίνει αυτό όχι μόνο έπρεπε να βρεθούν οι κατάλληλες συνθήκες για κάθε προσανατολισμό αλλά και να διορθωθεί το γεγονός Κόσμος_ΔεξιάΕμπόδιο όπου έλλειπε κάτι για να ολοκληρωθεί! Αλλάχτηκε και το αντικείμενο Κόσμος, και σε ότι έχει να κάνει με την αναγνώριση των συνθηκών (αν μπορεί να κινηθεί το ρομπότ στο κόσμο) αλλά και γενικότερα, μπήκε και ένα ακόμα γεγονός για αρχικοποίηση μεταβλητών αν θέλουμε να αλλάξουμε το Κόσμο και να τον σχεδιάσουμε ξανά.

Σε σχέση με την εμφάνιση του Κόσμου, τώρα βλέπουμε στις εικόνες ότι δουλεύει ενώ υπάρχει υδατογράφημα. Στη προηγούμενη έκδοση τα beepers έσβηναν με άσπρο κύκλο ενώ τώρα σβήνουν όπως γράφονται με Xor.

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

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

Έγινε μια ωραιοποίηση της εφαρμογής με διαφάνειες πίσω από κείμενο, με γράμματα με περιγράμματα και σκιάσεις. Έχει πολλές δυνατότητες η Μ2000. Είναι ένα σχεδιαστικό πρόγραμμα, εκτός από μια γλώσσα προγραμματισμού!

Δείτε στις εικόνες με διαφορετικές αναλογίες. Μπορούμε να αλλάζουμε τις αναλογίες της κονσόλας με μια εντολή Παράθυρο 12, 18000, 9000;  λέμε στο περιβάλλον ότι θέλουμε 12άρια γράμματα, με πλάτος κονσόλας 18000 twips και ύψος 9000 twips. Η Παράθυρο 12, 0 ανοίγει σε πλήρη οθόνη στο νούμερο 0 μόνιτορ, ενώ η Παράθυρο 12, 1 ανοίγει στο δεύτερο μόνιτορ. Το περιβάλλον της Μ2000 δουλεύει σε υπολογιστές με πολλά μόνιτορ.





Αδειασε
Συνάρτηση ΚάρελΣχέδιο(χρ=1, παχ ως μακρύς=11, φλιπ=0){
Αν παχ<1 τότε παχ=1
Αν φλιπ Τότε
μχ1=1
μχ=512
Οχ=0
Αλλιώς
Οχ=-πλάτος.σημείου*20
μχ1=-1
μχ=0
Τέλος Αν
πλ=-πλάτος.σημείου*μχ1
Σχέδιο πλάτος.σημείου*512, ύψος.σημείου*512 {
Πένα 0 {Πάχος 1 {
Θέση Οχ+πλάτος.σημείου*(μχ-263*μχ1),ύψος.σημείου*(37+50+312)
Πολύγωνο 0, 0, ύψος.σημείου*70, πλ*106, 0, 0, -ύψος.σημείου*48, -πλ*52, 0, 0, -ύψος.σημείου*22 , -πλ*54, 0
}}
Πένα 0 {Πάχος 1 {
Θέση Οχ+πλάτος.σημείου*(μχ-147*μχ1),ύψος.σημείου*(263)
Πολύγωνο 0, -πλ*82, 0, 0, ύψος.σημείου*96, πλ*43, 0,0, -ύψος.σημείου*53, πλ*39, 0, 0, -ύψος.σημείου*43
}}
Πένα 0 {Πάχος παχ {
Θέση Οχ+πλάτος.σημείου*(μχ-147*μχ1),ύψος.σημείου*(37)
Χρώμα {
Πολύγωνο 11, 0 , ύψος.σημείου*312, πλ*50, ύψος.σημείου*50, πλ*220, 0, 0, -ύψος.σημείου*294, -πλ*68, -ύψος.σημείου*68, -πλ*202, 0
Θέση Οχ+πλάτος.σημείου*(μχ-208*μχ1),ύψος.σημείου*(85)
Πολύγωνο 5, πλ*130, 0, 0, ύψος.σημείου*180, -πλ*130, 0, 0 , -ύψος.σημείου*180
};
Θέση Οχ+πλάτος.σημείου*(μχ-147*μχ1),ύψος.σημείου*37
Χρώμα {
Πολύγωνο χρ, 0 , ύψος.σημείου*312, πλ*50, ύψος.σημείου*50, πλ*220, 0, 0, -ύψος.σημείου*294, -πλ*68, -ύψος.σημείου*68, -πλ*202, 0
Θέση Οχ+πλάτος.σημείου*(μχ-208*μχ1),ύψος.σημείου*(85)
Πολύγωνο 5, πλ*130, 0, 0, ύψος.σημείου*180, -πλ*130, 0, 0 , -ύψος.σημείου*180
}
Θέση Οχ+πλάτος.σημείου*(μχ-268*μχ1),ύψος.σημείου*334
Χάραξε πλ*70
}}
} ως Αλφα
=Αλφα
}
Τμήμα ΤιτλοςΜεΣκιά (α$){
οΦαρδια=Φαρδια
Παχ=κλίμαξ.χ δια 8000+1
Φαρδιά 1: Διπλά:Δρομέας 0, 1:Θέση !
ΠόσοΨ=Θέση.Ψ
Θέση 0,0:Πένα , 150 ' αδιαφάνεια 150/255*100%
Βάψε κλίμαξ.χ, ΠόσοΨ, #002200, #008800
Πένα ,255
Δρομέας 0, 0
Σχέδιο κλίμαξ.χ, ΠόσοΨ {
Πένα #00aa00 {Πάχος Παχ {Χρώμα #ccffbb {
Αναφορά 2, α$
}}}
} ως Τιτλος1
Σχέδιο κλίμαξ.χ, ΠόσοΨ {
Πένα 0 {Χρώμα #002200 {Πάχος Παχ {
Αναφορά 2, α$
}}}
} ως Τιτλος1.Σκια
Για ι=1 έως 10 {
θέση -κλιμαξ.χ/2+Πλάτος.Σημείου*ι,Ύψος.Σημείου*ι
Εικόνα Τίτλος1.Σκια, κλίμαξ.χ*2, ΠόσοΨ*1.5
}
θέση -κλιμαξ.χ/2,0
Εικόνα Τίτλος1, κλίμαξ.χ*2, ΠόσοΨ*1.5
Φαρδια οΦαρδια
}
Κάρελ=ΚάρελΣχέδιο(1)
Φόρμα 60, 28:Φόντο 15, 15:Θέση κλίμαξ.χ/2, κλίμαξ.ψ/2
Διάφανο  Καρελ, 5,15,κλιμαξ.χ/ εικόνα.χ(Κάρελ)*80,, 1
Πένα , 240:Φόντο 15, 15:Πένα ,255 ' το κάνουμε υδατογράφημα!
Διαφυγή Όχι
Αδειασε
ΤιτλοςΜεΣκιά "Κάρελ το Ρομπότ"
Τύπωσε:Κανονικά
Κύλιση Χώρισμα 2 ' οπως το Οθόνη , 2 αλλά δεν καθαρίζει την οθόνη και δεν μεταθέτει τον δρομέα.
// μέχρι εδώ φτιάξαμε τα βασικά, τώρα ετοιμάζουμε τις κλάσεις μας!
Γενική Απαρίθμηση Προσανατολισμός {ΒΟΡΕΙΑ, ΑΝΑΤΟΛΙΚΑ, ΝΟΤΙΑ, ΔΥΤΙΚΑ}
Γενική Απαρίθμηση Πρόσβαση {ΕΚΤΟΣ_ΠΙΝΑΚΑ=-1, ΚΑΘΑΡΟ, ΕΜΠΟΔΙΟ, ΚΑΤΩΑΚΡΟ, ΑΚΡΟ, ΔΕΞΙΑΚΡΟ}
Γενική Απαρίθμηση Τσαντα {ΔΕΝ_ΥΠΑΡΧΕΙ_ΚΑΤΙ=0, ΥΠΑΡΧΕΙ_ΚΑΤΙ=-1}
Κλάση ΡΟΜΠΟΤ {
Βλέπει=ΑΝΑΤΟΛΙΚΑ, Εχει=ΔΕΝ_ΥΠΑΡΧΕΙ_ΚΑΤΙ, Πόσα_Εχει=0
ΘέσηΧ=0, ΘέσηΥ=0
Τμήμα ΚάνεΑριστερά {
Επίλεξε Με .Βλέπει
Με ΝΟΤΙΑ
.Βλέπει<=ΑΝΑΤΟΛΙΚΑ
Με ΔΥΤΙΚΑ
.Βλέπει<=ΝΟΤΙΑ
Με ΒΟΡΕΙΑ
.Βλέπει<=ΔΥΤΙΚΑ
Με ΑΝΑΤΟΛΙΚΑ
.Βλέπει<=ΒΟΡΕΙΑ
Τέλος επιλογής
}
}
Κλάση ΚΟΣΜΟΣ {
γεγονότα "Αρχή", "ΑλλαγήΓραμμής", "ΔεξιάΚενό", "ΔεξιάΚάτι", "ΔεξιάΕμπόδιο"
Ιδιωτικό:
Πίνακες Κ(), Μ()
μεγΧ=0, μεγΥ=0
Δημόσιο:
Τμήμα ΚαθάρισεΕμπόδιο (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Κ(Χ,Υ)=ΚΑΘΑΡΟ
}
Τμήμα ΒάλεΕμπόδιο (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Κ(Χ,Υ)=ΕΜΠΟΔΙΟ
}
Τμήμα ΒαλεΔΕΞΙΑΚΡΟ (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Κ(Χ,Υ)=ΔΕΞΙΑΚΡΟ
}
Τμήμα ΚΑΘΕΤΟΑΚΡΟ (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Κ(Χ,Υ)=ΚΑΤΩΑΚΡΟ
}
Τμήμα ΒάλεΑΚΡΟ (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Κ(Χ,Υ)=ΑΚΡΟ
}
Τμήμα ΒάλεΚάτι (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Μ(Χ,Υ)++
}
Τμήμα ΠάρεΚάτι (Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
Αν .Μ(Χ,Υ)>0 τότε .Μ(Χ,Υ)--
}
Τμήμα ΒάλεΚενό (Χ ως ακέραιος, Υ ως ακέραιος){
Αν Χ<1 Η Χ>.μεγΧ Η Υ<1 Η Υ>.μεγΥ Τότε Έξοδος
.Μ(Χ,Υ)=0
}
Συνάρτηση ΈχειΚατι(Χ ως ακέραιος, Υ ως ακέραιος) {
Αν Χ<1 ή Χ>.μεγΧ ή Υ<1 ή Υ>.μεγΥ Τότε Εξοδος
=.Μ(Χ, Υ)>0
}
Συνάρτηση Βόρεια(&Χ ως ακέραιος, ως ακέραιος) {
ΑΝ Υ=1 Τότε
Αλλιώς.Αν Χ=1 ή Χ=.ΜεγΧ Τότε
Υ-- : =Αληθής
Αλλιώς.ΑΝ .Κ(Χ,Υ-1)=ΔΕΞΙΑΚΡΟ Η .Κ(Χ-1,Υ-1)=ΚΑΘΑΡΟ Η .Κ(Χ,Υ-1)=ΚΑΘΑΡΟ Τότε
Υ-- : =Αληθής
Αλλιώς.Αν .Κ(Χ,Υ-1)=ΑΚΡΟ ΤΌΤΕ
Υ-- : =Αληθής
Τελος Αν
}
Συνάρτηση Ανατολικά(&Χ ως ακέραιος, ως ακέραιος) {
Αν Χ=.μεγΧ Τότε
Αλλιώς.Αν Υ=1 ή Υ=.ΜεγΥ Τότε
Χ++:=Αληθής
Αλλιώς.Αν (.Κ(Χ,Υ)<>ΕΜΠΟΔΙΟ ΚΑΙ .Κ(Χ,Υ)<>ΔΕΞΙΑΚΡΟ) Η .Κ(Χ,Υ-1)=ΚΑΘΑΡΟ Τότε
Χ++:=Αληθής
Τελος Αν
}
Συνάρτηση Νότια(&Χ ως ακέραιος, ως ακέραιος){
Αν Υ=.μεγΥ Τότε
Αλλιώς.Αν Χ=1 ή Χ=.ΜεγΧ Τότε
Υ++ : =Αληθής
Αλλιώς.ΑΝ .Κ(Χ,Υ)=ΔΕΞΙΑΚΡΟ Η .Κ(Χ-1,Υ)=ΚΑΘΑΡΟ Η .Κ(Χ,Υ)=ΚΑΘΑΡΟ Τότε
Υ++ : =Αληθής
Αλλιώς.Αν .Κ(Χ,Υ)=ΑΚΡΟ ΤΌΤΕ
Υ++ : =Αληθής
Τελος Αν
}
Συνάρτηση Δυτικά(&Χ ως ακέραιος, ως ακέραιος){
ΑΝ Χ=1 Τότε
Αλλιώς.Αν Υ=1 ή Υ=.ΜεγΥ Τότε
Χ-- : = Αληθής
Αλλιώς.Αν (.Κ(Χ-1,Υ)<>ΕΜΠΟΔΙΟ ΚΑΙ .Κ(Χ-1,Υ)<>ΔΕΞΙΑΚΡΟ) Η .Κ(Χ-1,Υ-1)=ΚΑΘΑΡΟ Τότε
Χ-- : = Αληθής
Τελος Αν
}
Συνάρτηση ΚοίταΜπροστά(Ρομπότ ως *ΡΟΜΠΟΤ, ΝαΠάει ως Λογικός=Ψευδής) {
κάνε ακέραιο θΧ, θΥ, Προσαν, ΟΚ
Για Ρομπότ {
θΧ=.ΘέσηΧ
θΥ=.ΘέσηΥ
Προσαν=.Βλέπει
}
Επίλεξε Με Προσαν
Με ΒΟΡΕΙΑ
ΟΚ=.Βόρεια(&θΧ, &θΥ)
Με ΑΝΑΤΟΛΙΚΑ
ΟΚ=.Ανατολικά(&θΧ, &θΥ)
Με ΝΟΤΙΑ
ΟΚ=.Νότια(&θΧ, &θΥ)
Με ΔΥΤΙΚΑ
ΟΚ=.Δυτικά(&θΧ, &θΥ)
Τέλος επιλογής
Αν ΟΚ Και ΝαΠάει Τότε
Για Ρομπότ {
.ΘέσηΧ=θΧ
.ΘέσηΥ=θΥ
}
Τέλος Αν
=ΟΚ
}
Συνάρτηση ΚοίταΔεξιά(Ρομπότ ως *ΡΟΜΠΟΤ) {
κάνε ακέραιο θΧ, θΥ, Προσαν
Για Ρομπότ {
θΧ=.ΘέσηΧ
θΥ=.ΘέσηΥ
Προσαν=.Βλέπει
}
Επίλεξε Με Προσαν
Με ΔΥΤΙΚΑ
=.Βόρεια(&θΧ, &θΥ)
Με ΒΟΡΕΙΑ
=.Ανατολικά(&θΧ, &θΥ)
Με ΑΝΑΤΟΛΙΚΑ
=.Νότια(&θΧ, &θΥ)
Με ΝΟΤΙΑ
=.Δυτικά(&θΧ, &θΥ)
Τέλος επιλογής
}
Συνάρτηση ΚοίταΑριστερά(Ρομπότ ως *ΡΟΜΠΟΤ) {
κάνε ακέραιο θΧ, θΥ, Προσαν
Για Ρομπότ {
θΧ=.ΘέσηΧ
θΥ=.ΘέσηΥ
Προσαν=.Βλέπει
}
Επίλεξε Με Προσαν
Με ΑΝΑΤΟΛΙΚΑ
=.Βόρεια(&θΧ, &θΥ)
Με ΝΟΤΙΑ
=.Ανατολικά(&θΧ, &θΥ)
Με ΔΥΤΙΚΑ
=.Νότια(&θΧ, &θΥ)
Με ΒΟΡΕΙΑ
=.Δυτικά(&θΧ, &θΥ)
Τέλος επιλογής
}
Συνάρτηση ΚοίταΠίσω(Ρομπότ ως *ΡΟΜΠΟΤ) {
κάνε ακέραιο θΧ, θΥ, Προσαν
Για Ρομπότ {
θΧ=.ΘέσηΧ
θΥ=.ΘέσηΥ
Προσαν=.Βλέπει
}
Επίλεξε Με Προσαν
Με ΝΟΤΙΑ
=.Βόρεια(&θΧ, &θΥ)
Με ΔΥΤΙΚΑ
=.Ανατολικά(&θΧ, &θΥ)
Με ΒΟΡΕΙΑ
=.Νότια(&θΧ, &θΥ)
Με ΑΝΑΤΟΛΙΚΑ
=.Δυτικά(&θΧ, &θΥ)
Τέλος επιλογής
}
Τμήμα Εμφάνισε {
αν .μεγΧ=0 ή .μεγΥ=0 τότε εξοδος
Κάλεσε Γεγονός "Αρχή"
για ι=1 έως .μεγΥ-1
για κ=1 έως .μεγΧ
Επίλεξε Με .Κ(κ, ι)
Με >=ΕΜΠΟΔΙΟ
Κάλεσε Γεγονός "ΔεξιάΕμπόδιο", .Κ(κ, ι)
Με ΚΑΘΑΡΟ
Κάλεσε Γεγονός "ΔεξιάΚενό"
Τέλος Επιλογής
Αν .Μ(κ, ι)>0 Τότε Κάλεσε Γεγονός "ΔεξιάΚάτι"
επόμενο
Κάλεσε Γεγονός "ΑλλαγήΓραμμής"
επόμενο
για κ=1 έως .μεγΧ
Κάλεσε Γεγονός "ΔεξιάΚενό"
Αν .Μ(κ, ι)>0 Τότε Κάλεσε Γεγονός "ΔεξιάΚάτι"
Επόμενο
Κάλεσε Γεγονός "ΑλλαγήΓραμμής"
}
Κλάση:
Τμήμα Κόσμος (Χ ως ακέραιος, Υ ως ακέραιος){
Πίνακας .Κ(1 εως Χ,1 εως Υ)=ΚΑΘΑΡΟ
Πίνακας .Μ(1 εως Χ,1 εως Υ)=0
.μεγΧ<=Χ
.μεγΥ<=Υ
}
}
Κάνε ΧΠ=20, ΥΠ=10
Πίνακας Πόσα(1 έως ΧΠ, 1 έως ΥΠ)
Ομάδα ΜεΓεγονότα Κόσμος=Κόσμος(ΧΠ, ΥΠ)
Κάνε Φόντο1=5, ΓραμμηΧρ=7, Τοίχος=1, ΚάτιΧρ=4
ΓΩ=0 ' ΓΩΝΙΑ ΕΠΙΠΡΟΣΘΕΤΗ ΓΙΑ ΚΙΝΗΣΗ


// Συναρτήσεις εξυπηρέτησης γεγονότων
Συνάρτηση Κόσμος_Αρχή {
αρχηΓραμμήςΧ=θέση.Χ : αρχηΓραμμής=θέση.Υ : ΓραμμήΚ=1
}
Συνάρτηση Κόσμος_ΑλλαγήΓραμμής {
Θέση αρχηΓραμμήςΧ, αρχηΓραμμής+Α*ΓραμμήΚ
Κελί=0 : Οριζόντιο=Ψευδές : ΓραμμήΚ++
}
// ιδιωτικό τμήμα
Τμήμα Γραμμούλες {
Αν ΓραμμηΚ=1 Τότε
Θέση χ, ψ : Χαράξε 0, Α/2, ΓραμμηΧρ
Αλλιώς.Αν ΓραμμήΚ=ΥΠ Τότε
Θέση χ, ψ : Χαράξε 0, -Α/2-ύψος.σημείου, ΓραμμηΧρ
Αλλιώς
Θέση χ, ψ -Α/2 : Χαράξε 0, Α, ΓραμμηΧρ
Τέλος Αν
Αν Κελί=1 Τότε
Θέση χ, ψ : Χαράξε Α/2, 0, ΓραμμηΧρ
Αλλιώς.Αν Κελί=ΧΠ τότε
Θέση χ, ψ : Χαράξε -Α-πλάτος.σημείου, 0, ΓραμμηΧρ
Αλλιώς
Θέση χ-Α/2, ψ : Χαράξε Α, 0, ΓραμμηΧρ
Τέλος Αν
}
Συνάρτηση Κόσμος_ΔεξιάΚενό {
Βήμα Α : Κελί++
τοπικη χ=θεση.χ, ψ=θέση.ψ
Κάλεσε Τοπικά Γραμμούλες
θέση χ, ψ : Οριζόντιο=Ψευδές
Αν Υπάρχει(Προηγούμενη, Κελι) Τότε Αφαίρεση Προηγούμενη, Κελι:θέση χ, ψ
}
Συνάρτηση Κόσμος_ΔεξιάΚάτι {
// γράφει με XOR (δεύτερο γράψιμο σβήνει)
Χρώμα ! ΚάτιΧρ { Κύκλος Γέμισμα ΚάτιΧρ, Α/8, 1, ΚάτιΧρ}
}
Συνάρτηση Κόσμος_ΔεξιάΕμπόδιο {
Διάβασε Νέο Τι
Βήμα Α:Κελί++:τοπικη χ=θεση.χ, ψ=θέση.ψ
Κάλεσε Τοπικά Γραμμούλες
θέση χ, ψ
Αν Οριζόντιο και Τι<ΑΚΡΟ τότε
Αν Κελί<ΧΠ τότε θέση χ-Α*.5, ψ+Α*.5 : Πάχος 4 {Χάραξε Α, 0, Τοίχος} :θέση χ, ψ
Αλλιώς
Οριζόντιο=Αληθές
Τέλος αν
Αν Τι=ΑΚΡΟ Τότε
Αν Δεν Υπάρχει(Προηγούμενη, Κελι) Τότε Προσθήκη Προηγούμενη, Κελί
Αλλιώς.Αν Υπάρχει(Προηγούμενη, Κελι) Τότε
Αν Τι<>ΚΑΤΩΑΚΡΟ τότε
Αν ΓραμμήΚ<ΥΠ τότε
θέση χ+Α*.5, ψ-Α*.5 : Πάχος 4 {Χάραξε 0, Α, Τοίχος} : θέση χ, ψ
Αλλιώς
Αφαίρεση Προηγούμενη, Κελι
Τέλος αν
Τέλος Αν
Αλλιώς
Προσθήκη Προηγούμενη, Κελί
Τέλος αν
}


// Ετοιμασία Κόσμου
για ι=1 έως 19
Κόσμος.ΒάλεΕμπόδιο ι, 5
επόμενο
Κόσμος.ΒάλεΑκρο 2, 5
για ι=2 εως 8
Κόσμος.ΒάλεΕμπόδιο 8, ι
επόμενο
Κόσμος.ΚάθετοΑκρο  9, 2 : Κόσμος.ΚάθετοΑκρο 9, 3 : Κόσμος.ΒαλεΑκρο 9, 2
Κόσμος.ΒάλεΕμπόδιο 10, 2 : Κόσμος.ΒάλεΕμπόδιο 13, 2 : Κόσμος.ΚάθετοΑκρο 11, 3
Κόσμος.ΒαλεΔεξίΑκρο  13, 3 : Κόσμος.ΒαλεΑκρο 10, 4 : Κόσμος.ΚάθετοΑκρο 10, 5
Κόσμος.ΒαλεΑκρο 9, 4 : Κόσμος.ΒάλεΆκρο 11, 3 : Κόσμος.ΚάθετοΑκρο 11, 4
Κόσμος.ΚάθετοΑκρο  8, 3 : Κόσμος.ΚάθετοΑκρο 8, 5 : Κόσμος.ΒάλεΕμπόδιο 7, 4
Κόσμος.ΚάθετοΑκρο  7, 5 : Κόσμος.ΒάλεΕμπόδιο 6, 4 : Κόσμος.ΚάθετοΑκρο 6, 5
για ι=2 έως 8
Κόσμος.ΒάλεΕμπόδιο 12, ι :Κόσμος.ΒάλεΕμπόδιο 15, ι
επόμενο
Κόσμος.ΒάλεΑκρο 12, 2 : Κόσμος.ΒάλεΑκρο 12, 5 : Κόσμος.ΒάλεΆκρο 13, 5
Κόσμος.ΚάθετοΆκρο 15, 5
για ι=1 έως ΧΠ-1
Κόσμος.ΒάλεΕμπόδιο ι, 1 : Κόσμος.ΒάλεΕμπόδιο ι, ΥΠ-1
επόμενο


για ι=1 έως ΥΠ-1
Κόσμος.ΒάλεΕμπόδιο 1, ι : Κόσμος.ΒάλεΑκρο 5, ι
αν ι>1 και ι<ΥΠ-1 Τότε
Κόσμος.ΒάλεΕμπόδιο 18, ι : Κόσμος.ΒάλεΔεξίΆκρο 19, ι
τέλος αν
επόμενο
Κόσμος.ΒάλεΑκρο 18, 2 : Κόσμος.ΚάθετοΑκρο 18, 9 : Κόσμος.ΒάλεΔεξίΑκρο 19, 5
Κόσμος.ΒάλεΑκρο 15, 1 : Κόσμος.ΚάθετοΑκρο 14, 3 : Κόσμος.ΚάθετοΑκρο 13, 2
Κόσμος.ΒάλεΑκρο 13, 3 : Κόσμος.ΒάλεΕμπόδιο 3, 4 : Κόσμος.ΒάλεΕμπόδιο 3, 6


Σκοπός=30
για ι=1 έως Σκοπός
Επανέλαβε
πουΧ=Τυχαίος(2, ΧΠ-1) : πουΥ=Τυχαίος(2, ΥΠ-1)
Μέχρι Όχι Κόσμος.ΕχειΚάτι(πουΧ, πουΥ)
Κόσμος.ΒάλεΚάτι πουΧ, πουΥ : Πόσα(πουΧ, πουΥ)=1
επόμενο
Κατάσταση Προηγούμενη
Κάνε Οριζόντιο=Ψευδές, Κελί=0, ΓραμμήΚ=1, Κάρελ$="", ΚάρελΔυτικά$=""
Κάνε ΎψοςΣεΧαρακτήρες, Μείωση=1, Περίγραμμα=1, ΕπΧρ=11
ΎψοςΣεΧαρακτήρες=Ύψος-1-2-2-3
// μια γραμμή κενή πριν τον Κόσμο
// 2 γραμμές οι οδηγίες, 2 γραμμές ο τίτλος και 3 γραμμές το κάτω μέρος.
// το υπόλοιπο θα το έχουμε για τον Κόσμο! *ίσως είναι περισσότερες οι κάτω..όπως ταιριάξει!
Επανάλαβε
Α=Οροφ(ΎψοςΣεΧαρακτήρες/ΥΠ*κλίμαξ.ψ/Ύψος / ύψος.Σημείου/(κλιμαξ.ψ/κλίμαξ.χ*3)*Μείωση)
Α*= ύψος.Σημείου*2
Περίγραμμα=Οροφ(14000/Α) : ΠλάτοςΣεTwips=Α*(ΧΠ+1)
ΎψοςΣεΧαρακτήρες=Οροφ(Α*ΥΠ/κλίμαξ.ψ*Ύψος)
Αν ΎψοςΣεΧαρακτήρες<=(Υψός-1-2-2-3) Τότε έξοδος
Μείωση*=.8
Πάντα
Κάνε ΚάρελΔυτικά
ΕπΧρ=Τυχαίος(9, 14)
Κάρελ=ΚάρελΣχέδιο(ΕπΧρ, Περίγραμμα)
ΚάρελΔυτικά=ΚάρελΣχέδιο(ΕπΧρ, Περίγραμμα, 1)
μεγ=οροφ(Α/Εικόνα.Υ(Κάρελ)*100)
Τύπωσε
Θέση ! ' μετατροπή από συντεταγμένες χαρακτήρων σε γραφικών
Θέση (Κλίμαξ.Χ-ΠλάτοςΣεTwips)/2 /// , θέσηΥ
Κάνε ρχ, ρψ, αρχηΓραμμήςΧ, αρχηΓραμμής
ρχ=θέση.Χ+Α:ρψ=θέση.Υ:αρχηΓραμμήςΧ=θέση.Χ:αρχηΓραμμής=θέση.Υ
Κόσμος.Εμφάνισε
Δρομέας !'0, 2+ ΎψοςΣεΧαρακτήρες
Δρομέας 0:Φαρδιά 0:Πλάγια 1
Πένα 0 {
Αναφορά {Αριστερό Πλήκτρο Ποντικιού: ο Κάρελ πάει Μπροστά,  Δεξί Πλήκτρο Ποντικιού: ο Κάρελ στρίβει Αριστερά
Α: Ο Κάρελ παίρνει αν υπάρχει κάτι, Χ: αφήνει αν έχει κάτι στο σάκο,  Esc: Έξοδος
}
}
Πλάγια 0:Φαρδιά 1
// Καθαρίζουμε τη λίστα Προηγούμενη
Προηγούμενη=Λιστα:Γρ=Γραμμή:Θέση !
Α1=Θέση.χ:Α2=θέση.Ψ
// φτιάχνουμε το φόντο πίσω από τις συνθήκες
Πένα , 200:Βάψε κλίμαξ.χ, Κλίμαξ.ψ-Θέση.Ψ, #008800, #002200, 1 :Πένα ,255
θέση Α1, Α2
// θα το βάλουμε στο Π$
Π$="": ΠλάτοςΨ=Κλίμαξ.ψ-Θέση.Ψ: Αντέγραψε κλίμαξ.χ, ΠλάτοςΨ στο Π$
Κύλιση Χώρισμα Γρ
Πένα 14:παλιόΧ=1:παλιόΥ=1
Βάλε Διαφάνεια$: Πέτα ' αδειάζουμε τυχόν παλιά εικόνα. Η Διαφάνεια$ διαβάζεται μια φορά!
// Δείχνουμε το Ρομπότ εδώ!
ΔείξεΡομποτ(1,1, ΑΝΑΤΟΛΙΚΑ)
ΚίνησηΣτο(1,1,ΧΠ ,1, Ανατολικά)
ΚίνησηΣτο(ΧΠ ,1, ΧΠ ,ΥΠ, Νότια)
ΚίνησηΣτο( ΧΠ ,ΥΠ,1 ,ΥΠ, Δυτικά)
ΚίνησηΣτο(1,ΥΠ ,1,1, Βόρεια)
ΔείξεΡομποτ(1,1, ΑΝΑΤΟΛΙΚΑ)
// Φτιάχνουμε το αντικείμενο ΚαρελΡομπότ
ΚαρελΡομπότ->Ρομποτ()
Για ΚαρελΡομπότ {
.Βλέπει=ΑΝΑΤΟΛΙΚΑ
.ΘέσηΧ=1
.ΘέσηΥ=1
}
παλιόΧ=1:παλιόΥ=1
ΘέσηΣ=Γραμμή:Συνθήκες()
Ανανέωση 20
Σύνολο=0
// Κύρια Επανάληψη - Εδώ είναι το πρόγραμμα της επίδειξης!
// Μηδενίζουμε τον χρονομετρητή!
Αναλυτής
Καθε 1000/30 {
Αν Σύνολο=Σκοπός Τότε Έξοδος
Αν Πατημένο(27) τότε έξοδος
Αν Πατημένο(65) Τότε
Αν Κόσμος.ΈχειΚάτι(παλιόΧ, παλιόΥ) Τότε
Ανανέωση 10000
Αν Πόσα(παλιόΧ, παλιόΥ)=1 τότε
ΒάλεΚενό(παλιόΧ, παλιόΥ, ΚαρελΡομπότ=>Βλέπει)
Τέλος Αν
Πόσα(παλιόΧ, παλιόΥ)--
Κόσμος.ΠάρεΚάτι παλιόΧ, παλιόΥ
Για ΚαρελΡομπότ {
.Εχει=ΥΠΑΡΧΕΙ_ΚΑΤΙ
.Πόσα_Εχει++
Σύνολο=.Πόσα_Εχει
}
Συνθήκες()
Ανανέωση 20
Τέλος Αν
Αλλιώς.Αν Πατημένο(88) Τότε
Αν ΚαρελΡομπότ=>Εχει=ΥΠΑΡΧΕΙ_ΚΑΤΙ Τότε
Ανανέωση 10000
Αν Πόσα(παλιόΧ, παλιόΥ)=0 τότε
ΒάλεΚάτι(παλιόΧ, παλιόΥ, ΚαρελΡομπότ=>Βλέπει)
Τέλος Αν
Πόσα(παλιόΧ, παλιόΥ)++
Κόσμος.ΒάλεΚάτι παλιόΧ, παλιόΥ
Για ΚαρελΡομπότ {
.Πόσα_Εχει--
Αν .Πόσα_Εχει=0 Τότε .Εχει=ΔΕΝ_ΥΠΑΡΧΕΙ_ΚΑΤΙ
}
Συνθήκες()
Ανανέωση 20
Τέλος Αν
Αλλιώς.Αν Πατημένο(1) τότε
Αν Κόσμος.ΚοίταΜπροστά(ΚαρελΡομπότ, Αληθές) τότε
Για ΚαρελΡομπότ{
ΚίνησηΣτο(παλιόΧ, παλιόΥ, .ΘέσηΧ, .ΘέσηΥ, .Βλέπει)
(παλιόΧ, παλιόΥ) = (.ΘέσηΧ, .ΘέσηΥ)
}
Συνθήκες()
Ανανέωση 20
τελος αν
Αλλιώς.Αν Πατημένο(2) τότε
Ανανέωση 10000
Για ΚάρελΡομπότ {
.ΚάνεΑριστερά
ΔείξεΡομπότΕικόνα(.Βλέπει)
}
Συνθήκες()
Ανανέωση 20
αναμονή 300
Τέλος αν
}
Διάφανο Διαφάνεια$
Αν Σύνολο=Σκοπός Τότε
Οθόνη
Χρόνος=Στρογγ(Φόρτος/1000, 3)
Τύπωσε "Τα μάζεψες σε: ";Χρόνος;" δευτερόλεπτα"
Τέλος Αν
Διαφυγή Ναι
Δρομέας 0,0
Κύλιση Χώρισμα 0
Τέλος


// Βοηθητικές Ρουτίνες
Ρουτίνα ΚίνησηΣτο(Χ,Υ, Χ1, Υ1, Έτσι)
τοπική μ=Μεγάλο.Σειράς(Απολ(Χ1-Χ), Απολ(Υ1-Υ))*4
αν μ=0 τότε
ΔείξεΡομποτ(Χ1, Υ1, Έτσι)
αλλιώς
τοπικη ΥΥ=(Υ1-Υ)/μ, ΧΧ=(Χ1-Χ)/μ
ΓΩ=0
ενώ μ>0
Αναμονή 10
Ανανέωση 5000
Υ+=ΥΥ : Χ+=ΧΧ
Διάφανο Διαφάνεια$
Θέση ρχ+Α*(Χ-1), ρψ+Α*(Υ-1)
ΓΩ=ΑΝ(μ υπολ 2=1->0, 15)
ΔείξεΡομπότΕικόνα(Έτσι)
μ--
Τέλος ενώ
Τέλος αν
Τέλος Ρουτίνας
Ρουτίνα ΔείξεΡομποτ(Χ, Υ, Έτσι)
παλιόΧ=Χ
παλιόΥ=Υ
Θέση ρχ+Α*(Χ-1), ρψ+Α*(Υ-1)
ΔείξεΡομπότΕικόνα(Έτσι)
Τέλος Ρουτίνας
Ρουτίνα ΔείξεΡομπότΕικόνα(Πώς)
Διάφανο Διαφάνεια$
Επίλεξε Με Πώς
Με ΒΟΡΕΙΑ
Διάφανο Κάρελ,5, 90+ΓΩ, μεγ
Με ΑΝΑΤΟΛΙΚΑ
Διάφανο Κάρελ, 5,ΓΩ, μεγ
Με ΔΥΤΙΚΑ
Διάφανο ΚάρελΔυτικά, 5, ΓΩ, μεγ
Με ΝΟΤΙΑ
Διάφανο ΚάρελΔυτικά, 5, 90+ΓΩ, μεγ
Τέλος Επιλογής
Τέλος Ρουτίνας
Ρουτίνα ΒάλεΚάτι(Κελί, ΓραμμήΚ, Έτσι)
τοπικη χ1=θεση.χ, ψ1=θέση.ψ
Διάφανο Διαφάνεια$
Θέση αρχηΓραμμήςΧ+Α*Κελί, αρχηΓραμμής+Α*(ΓραμμήΚ-1)
Κελί++
Κάλεσε τοπικά Κόσμος_ΔεξιάΚάτι()
θέση χ1, ψ1
ΔείξεΡομπότΕικόνα(Έτσι)
Τέλος Ρουτίνας
Ρουτίνα ΒάλεΚενό(Κελί, ΓραμμήΚ, Έτσι)
τοπικη χ1=θεση.χ, ψ1=θέση.ψ
Διάφανο Διαφάνεια$
Κάλεσε τοπικά Κόσμος_ΔεξιάΚάτι()
θέση χ1, ψ1
ΔείξεΡομπότΕικόνα(Έτσι)
Τέλος Ρουτίνας
Ρουτίνα Συνθήκες()
τοπικη χ1=θεση.χ, ψ1=θέση.ψ
Θέση Α1, Α2
Εικόνα Π$
Πένα #aaffaa {
Δρομέας 0, ΘέσηΣ
Τύπωσε $(4, 6),
Αν Κόσμος.ΚοίταΜπροστά(ΚαρελΡομπότ) Τότε ? " Καθαρό Μπροστά,", Αλλιώς ? " Εμπόδιο Μπροστά,",
Αν Κόσμος.ΚοίταΔεξιά(ΚαρελΡομπότ) Τότε ? "Καθαρό Δεξιά,", Αλλιώς ? "Εμπόδιο Δεξιά,",
Αν Κόσμος.ΚοίταΑριστερά(ΚαρελΡομπότ) Τότε ? " Καθαρό Αριστερά,", Αλλιώς ? " Εμπόδιο Αριστερά,",
Αν Κόσμος.ΚοίταΠίσω(ΚαρελΡομπότ) Τότε ? "Καθαρό Πίσω", Αλλιώς ? "Εμπόδιο Πίσω",
Αν Κόσμος.ΈχειΚάτι(παλιόΧ, παλιόΥ) τότε ? "Κάτι Έχει Εδώ", Αλλιώς ? "Τίποτα Δεν Έχει Εδώ",
Αν ΚαρελΡομπότ=>Εχει=ΔΕΝ_ΥΠΑΡΧΕΙ_ΚΑΤΙ Τότε ? "Τίποτα Δεν Έχει Ο Σάκος", Αλλιώς ? "Κάτι Έχει Ο Σάκος",
Τύπωσε Μέρος $(7, πλάτος), μορφή$("({0::-2},{1::-2})", ΠαλιόΧ, ΥΠ-ΠαλιόΥ+1)
}
θέση χ1, ψ1
Τέλος Ρουτίνας


 




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

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

You can feel free to write any suggestion, or idea on the subject.