Hobby Basic, ένας μικρός διερμηνευτής για την κονσόλα των Windows

Καθυστέρησα λιγάκι την αντικατάσταση της προηγούμενης έκδοσης Αυτή η επιλογή έγινε λόγω της ραγδαίας αύξησης των downloads της v2.3.3, ώστε να διατηρηθεί η θετική ορμή της κοινότητας.

Δεν ξέρεις πόσο χαίρομαι για αυτό!!

Πρόσφατα είχα βγει με ένα γνωστό μου και την γυναίκα του και είχαν φέρει μαζί και τον γιό τους, που θα πάει σε κάποιο δημόσιο ΙΕΚ (αυτά της ΔΥΠΑ) για προγραμματιστής και απο ότι μου είπε ότι θέλει (Ε, το άλλο:) ) να μάθει και δημιουργήσει παιχνίδια και του ανέφερα και για την Hobby Basic να την δοκιμάσει και να την προτείνει και στους καθηγητές, μιας και είναι μια καλή αρχή να ξεκινήσει κάποιος για να μάθει κάποιος προγραμματισμό.

Μου είπε ότι θα δοκιμάσει την HB και θα την παρουσιάσει και στους καθηγητές του απο τον Σεπτέμβρη.

Οπότε αν δεις να σου γράφει απορίες στο site σου κάποιος Έλληνας πιτσιρικάς 17-18 χρονών είναι σίγουρα ο γιος του φίλου μου. Τώρα αν δεις πολλά πιτσιρίκια της ίδιας ηλικίας να σου γράφουν τότε μάλλον θα είναι και συμμαθητές του απο το ΙΕΚ που πηγαίνει στον Κορυδαλλό. :D
 
Τελευταία επεξεργασία:
Ευχαριστώ για την προώθηση

Εύχομαι ολόψυχα καλή επιτυχία στον νεαρό προγραμματιστή.

Με εκπλήσσει θετικά η ραγδαία αύξηση των downloads (πλησιάζουμε τα 7000 από έναν μόνο σύνδεσμο) και με ενθαρρύνει να συνεχίσω την ανάπτυξη του διερμηνευτή.

Πιστεύω πως ορισμένοι παράγοντες έχουν παίξει ρόλο σε αυτή την επιτυχία. Σίγουρα η ιστοσελίδα Get Started και το πρόσφατο βίντεο που ανέβασα έχουν βοηθήσει, αλλά νομίζω ότι το πιο σημαντικό είναι τα πολυάριθμα παραδείγματα (κυρίως τα παιχνίδια με πλήρη source code). Το γεγονός ότι η Hobby επιτρέπει τη δημιουργία παιχνιδιών με ANSI γραφικά στην κονσόλα των Windows, που δεν συναντάς εύκολα αλλού, είναι κάτι που ξεχωρίζει.

Η πρόσφατη προσθήκη της βιβλιοθήκης FPU string math προσφέρει νέες, ακόμη πιο εξελιγμένες δυνατότητες στον διερμηνευτή.

Αν σκεφτεί κανείς την δυσκολία που μπορεί να αντιμετωπίσει κάποιος στις τελευταίες εκδόσεις των Windows όπου το σύστημα κάνει τα πάντα για να αποτρέψει τη λήψη (λέγε με Chrome) και εκτέλεση του αρχείου θεωρώντας το ύποπτο, τότε πραγματικά, ο αριθμός αυτός αποτελεί μια ακόμα μεγαλύτερη επιτυχία.

Εξίσου σημαντική είναι η συνεχιζόμενη υποστήριξη και φιλοξενία στο Retromaniax, η οποία επιτρέπει στους χρήστες από τον Ελλαδικό χώρο να γνωρίσουν την Hobby BASIC.
 
Άντε και σε λίγο θα βγαίνουν demos γραμμένα στην ΗΒ... :)

Σκέφτηκα να δοκιμάσω ένα wave text εφέ, σαν αυτά που βλέπαμε στα παλιά C64 / Amiga demos.

Δεν ήμουν σίγουρος αν κάτι τέτοιο θα μπορούσε να υλοποιηθεί στο παράθυρο της κονσόλας, ίσως να είναι υπερβολικό (ακόμα και για την Hobby BASIC). Παρόλα αυτά, είπα να το τολμήσω.

Για αρχή, χρειαζόμουν μια μεγάλη γραμματοσειρά (big font).

Σκέφτηκα να χρησιμοποιήσω κάποια από το 16colo.rs αλλά θυμήθηκα ότι έχω ήδη αποθηκευμένη σε αρχείο μια διάταξη __font$[128, 5] που περιέχει ολόκληρο το σετ χαρακτήρων από ASCII 32 έως 127, σε μορφή pixel-map.

Κώδικας:
    ! ASCII 65 (A)
    __font$[65,0] = " ███ "
    __font$[65,1] = "█   █"
    __font$[65,2] = "█████"
    __font$[65,3] = "█   █"
    __font$[65,4] = "█   █"

    ! ASCII 66 (B)
    __font$[66,0] = "████ "
    __font$[66,1] = "█   █"
    __font$[66,2] = "████ "
    __font$[66,3] = "█   █"
    __font$[66,4] = "████ "

    ! ASCII 67 (C)
    __font$[67,0] = " ████"
    __font$[67,1] = "█    "
    __font$[67,2] = "█    "
    __font$[67,3] = "█    "
    __font$[67,4] = " ████"


Έγραψα τον παρακάτω κώδικα για να μετατρέψω το αρχείο σε άλλη μορφή που να μπορώ να τη χρησιμοποιήσω στο εφέ.

Κώδικας:
dim flatFont$[96]

for ascii = 32 to 127
    index = ascii - 32
    flat$ = ""

    for row = 0 to 4
        line$ = __font$[ascii, row]
        for col = 1 to LEN(line$)
            pixel$ = MID(line$, col, 1)
            if pixel$ = "█"
                flat$ = flat$ + "1"
            else
                flat$ = flat$ + "0"
            endif
        next
    next

    flatFont$[index] = flat$
next

for i = 0 to 95
    ascii = i + 32
    DEBUG(CHR(34) + flatFont$[i] + CHR(34) + ",\  ! " + STR(ascii) + ": " + CHR(ascii))
next


Η νέα μονοδιάστατη __font$[] διάταξη έχει την μορφή:

1752317106047.png



Επόμενο βήμα η δημιουργία μια απλής big_text(x, y, string) ρουτίνας γενικής χρήσης, στην Hobby BASIC.
  • Η ρουτίνα εμφανίζει κείμενο στην οθόνη χρησιμοποιώντας γραμματοσειρά 5x5 pixel.
  • Μπορείς να ορίσεις πού θα ξεκινήσει να τυπώνει (x, y) και να δώσεις το μήνυμα σαν συμβολοσειρά.
  • Υποστηρίζει μόνο ASCII χαρακτήρες από το 32 έως το 127 (π.χ. γράμματα, αριθμούς, σύμβολα).
  • Ό,τι δεν υποστηρίζεται, εμφανίζεται σαν κενό.
  • Κάθε χαρακτήρας καταλαμβάνει 6 οριζόντια pixels (5 για το γράμμα και 1 για κενό).
  • Η ρουτίνα αγνοεί αυτόματα ό,τι σχέδιο βγει έξω από την οθόνη.
  • Ο πλήρης κώδικας της ρουτίνας.

Κώδικας:
sub big_text(startX, startY, message$)
    local charIndex, verticalRow, horizontalCol
    local asciiCode, screenX, screenY
    local screenWidth, screenHeight
    local charData$
    local baseX, pixelOffset, c$

    screen -1, -1
    screenWidth = V0
    screenHeight = V1

    for charIndex = 1 to LEN(message$)
        asciiCode = ASC(MID(message$, charIndex, 1))
        if asciiCode < 32 or asciiCode > 127 then asciiCode = 32

        charData$ = __font$[asciiCode - 32]
        baseX = startX + (charIndex - 1) * 6

        for verticalRow = 0 to 4
            screenY = startY + verticalRow
            if screenY < 0 or screenY >= screenHeight then pass

            pixelOffset = verticalRow * 5

            for horizontalCol = 0 to 4
                screenX = baseX + horizontalCol
                if screenX < 0 or screenX >= screenWidth then pass

                c$ = MID(charData$, pixelOffset + horizontalCol + 1, 1)
                if c$ = "1"
                    print at screenX, screenY, "█"
                else
                    print at screenX, screenY, " "
                endif
            next
        next
    next
ends



Δοκιμή της ρουτίνας στο παράθυρο της κονσόλας των Windows 11.

Κώδικας:
    %include "EXAMPLES\MISC\BIGTEXT.BAS"

    message$ = "RETROWAVE"

    view 7
    screen 80, 40, 0
    cursor 0
    color 0, 0
    cls

    pen 9
    big_text(2, 4, message$)

    for i = 0 to LEN(message$) - 1
        pen RND(6) + 9
        big_text(i * 6 + 10, 12, message$(i))
    next

    inkey
    view 11
    color 0, 7 : cls
    end

1752322736018.png



Retro Wave Animation (FPU) in Hobby BASIC.
  • Το RETROWAVE.BAS είναι ένα demo κύματος σε στυλ retro, γραμμένο σε Hobby BASIC.
  • Δημιουργεί ένα τρένο από μπλοκ ή χαρακτήρες ASCII που κινούνται ομαλά από δεξιά προς τα αριστερά.
  • Η κίνηση ακολουθεί ημιτονοειδή καμπύλη, όπως στα κλασικά εφέ C64 / Amiga demo.
  • Το εφέ είναι έγχρωμο και κάθε χαρακτήρας ή μπλοκ έχει δικό του χρώμα.
  • Η μεταβλητή ENABLE_MESSAGE ενεργοποιεί εμφάνιση μηνύματος αντί για μπλοκ.
  • Οι χαρακτήρες σχεδιάζονται με τη βοηθητική ρουτίνα big_text() σε 5x5 pixel font.
  • Κάθε sprite αποθηκεύεται προσωρινά με bsave για γρήγορη επανεμφάνιση.
  • Η κίνηση υπολογίζεται με πίνακα τιμών wave_offsets[] βασισμένο στο FSIN.
  • Η αλυσίδα επανεκκινεί όταν εξέλθει από την αριστερή πλευρά της οθόνης.
  • Όλα τα γραφικά εμφανίζονται στην κονσόλα, χωρίς εξωτερικά assets ή βιβλιοθήκες.
  • Ο πλήρης κώδικας του προγράμματος.

Windows 11 Console Screenshots.

1752320491030.png
1752319734723.png


Have fun with Hobby BASIC.
 
Άρα μπορεί κάποιος να παίξει λίγο φτιάχνοντας τέτοια μικρά intros & demακια!!! Σκέτη γλύκα είναι αυτά τα χρωματιστά γράμματα. :)

Μπορεί να συνδυαστεί και με ήχο; Με το κλασικό "μπιμ" του pc speaker. Να κάτι σαν αυτό ή αυτό.. ( τι ωραία που τα λεω ε.. :fafoutis: )

Όλα μπορεί να τα κάνει η Hobby Basic!!
 
Τελευταία επεξεργασία:
Πίσω
Μπλουζα