Τρίτη 29 Μαρτίου 2016

Σχεδίαση αριθμών Bitmap

Σε αυτή την ανάρτηση θα δούμε πως σχεδιάζουμε αριθμούς bitmap. Οι bitmap αριθμοί είναι στην ουσία εικόνες αριθμών. Σε μελλοντική ανάρτηση θα έχω φτιάξει ένα Pong και οι αριθμοί του σκορ θέλω να φαίνονται με τελείες, έτσι αποφάσισα να το μελετήσω το θέμα!

Πρώτη ιδέα είναι να φτιάξω τους αριθμούς κάπως ώστε να βλέπω πως είναι πριν γίνουν εικόνες! Υπολογίζω λοιπόν ότι κάθε αριθμός θα πιάνει 5Χ7 κουκίδες (χωρίς τυχόν κενό χώρο).
Σε ένα αλφαριθμητικό θα βάλω αστέρι * όπου θα σημαίνει χρώμα λευκό και κάτω παύλα _ που θα σημαίνει φόντο. Μπορώ να προσθέτω κενά τα οποία τα αφαιρεί ο διερμηνευτής από την θέση της αγκύλης στο τέλος. Εδώ φαίνεται το μηδές. Θα φτιάξω όλα τα νούμερα και θα τα φορτώσω σε ένα πίνακα. Η μεταβλητή Μηδέν$ έχει το εικονικό μηδέν, και ο τρόπος που φτιάχτηκε δίνει μια αναπαράσταση την ώρα που γράφεται στον διορθωτή με συμβολικούς χαρακτήρες * και _.

Μηδέν$={_***_
                  *___*
                  *___*
                  *___*
                  *___*
                  *___*
                  _***_
                  }

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

Μηδέν$={_***_
                  *___*
                  *___*
                  *___*
                  *___*
                  *___*
                  _***_
                  }
Φόντο 5,1 \\ Ματζέντα προς Μπλε
Οθόνη 5,-5 \\ Ολίσθηση πέντε γραμμές στο κάτω μέρος της οθόνης
Πλ1=πλάτος.σημείου*12
Ύψ1=ύψος.σημείου*20
Ανανέωση 5000
για Ι=0 έως 9 {
      Αρ(Μηδέν$,Ι*8*πλ1,0)
}
Ανανέωση 50
Τύπωσε "οκ"
Ρουτίνα Αρ(Σχ$, Χ, Υ)
Τοπικές Ι,Μ, Κ, Θ=1
Για Κ=0 έως 7 {
      Για Ι=0 έως 5 {
      Θέση Χ+Ι*Πλ1, Υ+Κ*Ύψ1
      Αν Μεσ$(Σχ$,Θ,1)="*" τότε { Βάψε Πλ1, Ύψ1,15 } Αλλιώς Βάψε Πλ1, Ύψ1, 5,1,1,0
            Θ++
      }
      Θ++
}
Τέλος Ρουτίνας

Πιο γρήγορο είναι να φτιάξουμε έναν πίνακα με εικόνες και να βάζουμε την εικόνα, αντί να διαβάζουμε το αλφαριθμητικό κάθε φορά και να σχεδιάζουμε πάλι το νούμερο. Έκανα μερικές αλλαγές. Αντί  ρουτίνας Αρ() έχω μια συνάρτηση που επιστρέφει εικόνα σε αλφαριθμητικό.
Επειδή χρησιμοποιώ εσωτερικά στην  Αρ$()  τις Πλ1 και Ύψ1 τις ορίζω γενικές (τις χρησιμοποιώ και στο κύριο πρόγραμμα)
Το πρόγραμμα κάνει αντίστροφη μέτρηση από το 9999 στο 0000. Στη Για δεν χρειάζεται να γράψουμε το βήμα (το βρίσκει ο διερμηνευτής μόνος του). Στη Μ2000 οι επαναλήψεις Για θα γίνουν μια φορά όπως και να έχει το πράγμα!
Τον πίνακα Ψηφ$() τον περνάμε με αναφορά στη ρουτίνα και έτσι επιστρέφει γεμάτος..με τα αλφαριθμητικά - πατρόν σε νούμερα! Μετά δημιουργούμε κάθε νούμερο και το γράφουμε σε έναν άλλο πίνακα Ψηφ.Τελ$()
Η Ανανέωση 50 μέσα στη Για εξασφαλίζει ότι θα δούμε τις τέσσερις εικόνες ταυτόχρονα.

Συνάρτηση Αρ$ {
Διάβασε Σχ$, Χ, Υ
Θ=1
Θέση Χ,Υ
Βάψε 5*πλ1,7*ύψ1,0
Θέση Χ,Υ
Για Κ=0 έως 7 {
      Για Ι=0 έως 4 {
                 Αν Μεσ$(Σχ$,Θ,1)="*" τότε { Βάψε Πλ1, Ύψ1,15 } Αλλιώς Βάψε Πλ1, Ύψ1, 5,1,1,0
                 βημα 0, -Ύψ1
            Θ++
      }
      Βήμα -5*πλ1, Ύψ1
      Θ+=2
}
Α$=""
Θέση Χ,Υ
Αντίγραψε πλ1*5,ύψ1*7 στο Α$
=Α$
}
Φόντο 5,1
Οθόνη 5,-5
Πίνακας Ψηφ$(), Ψηφ.Τελ$(10)
Ψηφία(&Ψηφ$())
Γενική Πλ1=πλάτος.σημείου*30, Ύψ1=ύψος.σημείου*30
Ανανέωση 20000
Για ι=0 έως 9{
      Ψηφ.Τελ$(ι)=Αρ$(Ψηφ$(ι), πλ1*5,1800)
}
Φόντο 5, 1
Αρ.Περ=(χ.σημεια-πλ1*6*4+πλ1)/2

πλ1_1=πλ1*6+Αρ.Περ
πλ1_2=πλ1*12+Αρ.Περ
πλ1_3=πλ1*18+Αρ.Περ
Ανανέωση 50
\\ Αντίστροφη μέτρηση
Για ι=9999 εώς 0 {
Αντέγραψε Αρ.Περ, 1800 με Ψηφ.Τελ$(ι δια 1000)
Αντέγραψε πλ1_1, 1800 με Ψηφ.Τελ$((ι δια 100) υπολ 10)
Αντέγραψε πλ1_2, 1800 με Ψηφ.Τελ$((ι δια 10) υπολ 10)
Αντέγραψε πλ1_3, 1800 με Ψηφ.Τελ$(ι υπολ 10)
Ανανέωση 50
}
Τύπωσε "οκ"
Ρουτίνα Ψηφία(&Ψ$())
Μηδέν$={_***_
                  *___*
                  *___*
                  *___*
                  *___*
                  *___*
                  _***_
                  }
Ένα$={__*__
                  _**__
                  *_*__
                  __*__
                  __*__
                  __*__
                  *****
                  }
Δύο$={_***_
                  *___*
                  ____*
                  _***_
                  *____
                  *____
                  *****
                  }
Τρία$={_***_
                  *___*
                  ____*
                  __**_
                  ____*
                  *___*
                  _***_
                  }
Τέσσερα$={___*_
                  __**_
                  _*_*_
                  *__*_
                  *****
                  ___*_
                  ___*_
                  }
Πέντε$={*****
                  *____
                  ****_
                  ____*
                  ____*
                  *___*
                  _***_
                  }
Έξι$={_***_
                  *___*
                  *____
                  ****_
                  *___*
                  *___*
                  _***_
                  }
Επτά$={*****
                  ____*
                  ___*_
                  __*__
                  __*__
                  __*__
                  __*__
                  }
Οκτώ$={_***_
                  *___*
                  *___*
                  _***_
                  *___*
                  *___*
                  _***_
                  }
Εννιά$={_***_
                  *___*
                  *___*
                  _****
                  ____*
                  *___*
                  _***_
                  }
Πίνακας Ψ$(10)
Ψ$(0)=Μηδέν$,Ένα$, Δύο$, Τρία$, Τέσσερα$,Πέντε$, Έξι$, Επτά$, Οκτώ$, Εννιά$
Τέλος Ρουτίνας




Εδώ είναι μια εικόνα 1440Χ900 με
Γενική Πλ1=πλάτος.σημείου*40, Ύψ1=ύψος.σημείου*40

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

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

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