Απορια πανω σε Amiga Basic

Rakeesh

RetroDB Feeder
Joined
10 Δεκ 2007
Μηνύματα
4.327
Αντιδράσεις
824
Σκεφτηκα να μελετησω διαφορες παλιες εκδοσεις της BASIC. Στο παρελθον ειχα ασχοληθει μονο με τα βασικα (τι ειναι οι μεταβλητες, πως δουλευουν οι λουπες κλπ) και ποτε δεν ασχοληθηκα με γραφικα, interface, ποντικι κλπ

Βρηκα τον κωδικα ενος πολυ βασικου προγραμματος, το οποιο δημιουργει ενα σχημα (δηλωμενο με τη μεταβλητη Ρ), και αν κανεις κλικ στο παραθυρο, η εικονα μετακινειται εκει που εκανες το κλικ, καθως και μπορεις να τη συρεις. Ο κωδικας ειναι:

(αφου σχηματιζεται το σχημα)

Κώδικας:
CheckMouse:
If mouse(0)=0 then CheckMouse
if abs(x-mouse(1)) > 2 then MovePicture
if abs(y-mouse(2)) < 3 then CheckMouse
Δεν καταλαβαινω σχεδον τιποτα απο τη ρουτινα CheckMouse. Αντιλαμβανομαι οτι γινεται ενας ελεγχος για τις συντεταγμενες του κερσορα με τα X και Y αλλα... πουθενα πριν στον κωδικα δεν δηλωνονται αυτες ως μεταβλητες

Δευτερον δεν ξερω τη λειτουργια της function mouse(). Το μονο που καταλαβαινω απο τα συμφραζομενα ειναι οτι το mouse(1) ελεγχει αν γινεται καπου αριστερο κλικ (οποτε και ενεργοποιειται η "μετακινηση" του σχηματος) ενω το mouse(0) το να μη πατιεται τιποτα?? Δεν μπορω να καταλαβω επισης τι επιστρεφει, ωστε να γινεται ελεγχος > 2 και < 3.

Επισης δεν καταλαβα γιατι η συγκεκριμενη ρουτινα καλει τον εαυτο της

Η επομενη ρουτινα ειναι:

Κώδικας:
MovePicture:
put(x,y),p
X=mouse(1)
Y=mouse(2)
put(x,y),p
goto CheckMouse
Αυτο ειναι πιο σαφες. Απλα κανει paste την εικονα p στις συγκεκριμενες συντεταγμενες καθε στιγμη ωστε να δημιουργειται το εφφε του drag, και εδω ομως δεν καταλαβαινω τη συναρτηση mouse().

Αυτο που με μπερδευει ειναι οτι οι μεταβλητες των συντεταγμενων προσδιοριζονται εδώ, ομως εχουν ηδη χρησιμοποιηθει στην προηγούμενη ρουτινα. Πως γινεται αυτο το παραδοξο;
 

CountRaven

Retro Member
Joined
3 Σεπ 2007
Μηνύματα
182
Αντιδράσεις
11
CheckMouse:

If mouse(0)=0 then CheckMouse

if abs(x-mouse(1)) > 2 then MovePicture

if abs(y-mouse(2)) < 3 then CheckMouse
Εμπειρικά θα απαντήσω πως εφόσον οι μεταβλητές x, και y mouse δεν δηλώνονται κάπου άρα είναι κομμάτια της ρουτίνας Checkmouse. Από το όνομα της κάθε μιας (x και y) καταλαβαίνουμε πως έχουμε να κάνουμε με την κίνηση του ποντικιού στην οθόνη x οριζόντια y κάθετη.

Προφανώς η τιμή <3 της y-mouse υποδηλώνει ότι έχουμε φτάσει στο επιτρεπτό κάθετο όριο της οθόνης και έτσι δεν μετακινεί την εικόνα μα ξανακαλεί την ρουτίνα CheckMouse που είναι ρουτίνα ελέγχου.

Όλα αυτά εντελώς εμπειρικά και με το μάτι, δεν ασχολούμαι με Amiga BASIC αν και το σκέφτομαι σοβαρά, απλά έχω μια μικρή εμπειρία από προγραμματισμό από τις αρχές του 90 όπου και αμολιόμουν αρκετά σαν χόμπυ.

Οπότε αν έχω κάνει κάποιο λάθος μην αρχίσετε να βαράτε...!
 
Μπλουζα