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

Hobby BASIC 1.8.1
Ένα νέο update στον διερμηνευτή.

Προστέθηκε ένας νέος TIMER ιδιαίτερα εύκολος στην χρήση.
Κώδικας:
    ! TIMER(ms)        start timer with ms period
    ! TIMER(0)         stop timer
    ! TIMER(-1)        zero timer value
    ! TIMER()          get timer value

Ένα απλό παράδειγμα χρήσης.
Κώδικας:
    view 11
    screen 80,30,300
    color 0,7
    cls

    now = 0
    TIMER(1000)   ! start 1 second timer

    do

        if TIMER() > now
            print "Timer Value ",TIMER()
            now = TIMER()
        endif

        wait 1
    until KEY(27)

    TIMER(0)
    end
1708733719396.png


Ας δούμε τώρα κάτι από αυτά που κανονικά δεν γίνονται στην κονσόλα.
Στον φάκελο EXAMPLES\MISC προστέθηκε ένα νέο παράδειγμα το DRAGON.BAS.
Καράτε στο CMD.EXE με την Hobby BASIC.

1708734115626.png
1708734281222.png

Have fun with Hobby BASIC.
 
Το coffee project της ημέρας.
Fifteen παζλ με ANSI εικόνες στο παράθυρο τη κονσόλας.

Πριν λίγο καιρό παρουσίασα ένα απλοϊκό 15 Puzzle.

1709205109790.png

Σκέφτηκα να το ξαναγράψω, αλλά με ANSI εικόνες.
Θα το βρείτε στον φάκελο EXAMPLES\GAMES\PUZZLE.BAS.

Στην πρώτη οθόνη επιλέγουμε μία από τις 7 διαθέσιμες εικόνες.
Πατώντας 1 φορτώνει ο "G-Man", και κάνουμε κλικ για να ανακατέψει.
Έτοιμοι για παιχνίδι, με το ποντίκι φυσικά. Υπάρχει slide εφέ, και ήχος.

1709205353978.png
1709205416787.png
1709205472333.png

Have fun with Hobby BASIC.
 
To coffee project της ημέρας, Spy (κατάσκοπος) για την Hobby BASIC.

To Spy είναι ένα απλό παζλ που έγραψα πριν πολλά χρόνια στα Windows και μετά στο flash.

1710157130846.png
1710157151770.png

Εμφανίστηκαν κλώνοι του, όπως το πολύ καλό Squaresliding για GP2X, και το Spy 4K για Atari ST/STE/TT/Falcon 030, και τα δύο εμπνευσμένα από το Spy. Μπορεί να υπάρχουν και άλλοι, το αγνοώ.

1710157642697.png
1710157615614.png


Έγραψα το παιχνίδι στην Hobby BASIC, για την κονσόλα των Windows με ANSI γραφικά.
Θα το βρείτε στον φάκελο EXAMPLES\GAMES.

Στον πίνακα υπάρχουν αριθμοί και νεκροκεφαλές.
Ο παίκτης μπορεί να κινηθεί προς τις τέσσερις κατευθύνσεις, καθώς και διαγώνια πατώντας τους αριθμούς που βρίσκονται δίπλα του.
Πρέπει να αποφύγει τις νεκροκεφαλές, τις άκρες του πίνακα, και την ουρά του.
Θεωρείται νικητής αν καταφέρει να μειώσει την πίστα στο ποσοστό target που δίνει το παιχνίδι.


1710157908844.png
1710157926873.png

Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
Θυμίζει minesweeper αλλά το δικό σου παιχνίδι είναι πιο ωραίο γιατί είναι γραμμένο σε hobby basic και έχει τα ρετρό γραφικά που αγαπάμε! :thumbup:
 
Τελευταία επεξεργασία:
Με την πρώτη ματιά ναι, αλλά έχει διαφορετικό gameplay. Εδώ το board είναι ανοιχτό και μετακινείσαι με τους αριθμούς.

Έχω γράψει ένα ναρκαλιευτή αλλά με actionscript (μου έδωσες ωραία ιδέα, μπορεί άλλη στιγμή να το γράψω στην Hobby BASIC). :thumbdown:

1710165235091.png
 
έχει τα ρετρό γραφικά που αγαπάμε! :thumbup:
Αυτό είναι νομίζω που κάνει τον διερμηνευτή (ας πούμε) κάπως ξεχωριστό. Σκέφτομαι πως, ίσως και μεγαλύτερα text-game project θα μπορούσαν να γίνουν. Για παράδειγμα ένα adventure με ANSI γραφικά εν έτει 2024.
 
Ένα πρώτο update στα γραφικά του Spy.
Δείχνει και παίζει καλύτερα, πιο κοντά στον αρχικό κατάσκοπο.
Σχεδόν χωρίς αλλαγές στον κώδικα.

1710592737487.png
1710592622704.png
1710592634024.png


Τα υπέροχα γραφικά του παιχνιδιού είναι χαρακτήρες ASCII σχεδιασμένα στο DRAW, το σχεδιαστικό πρόγραμμα που είναι γραμμένο στην Hobby BASIC.

1710593147767.png

Have fun with Hobby BASIC.
 
Hobby BASIC 1.8.3
Ένα νέο update στον διερμηνευτή, μαζί και ένα νέο παιχνίδι.

To coffee project της ημέρας.
Ναρκαλιευτής στο παράθυρο της κονσόλας γραμμένος στην Hobby BASIC.
Θα το βρείτε στον φάκελο EXAMPLES\GAMES\MINES.BAS

Minesweeper rules are very simple.
The board is divided into cells, with mines randomly distributed.
To win, you need to open all the cells.
The number on a cell shows the number of mines adjacent to it.
Using this information, you can determine cells that are safe, and cells that contain mines.
Cells suspected of being mines can be marked with a flag using the right mouse button.
Press spacebar to restart game.

1711012071607.png

Have fun with Hobby BASIC.
 
1713194140736.png

Hobby BASIC 1.8.6
Ένα νέο update στον διερμηνευτή.

Τα συνοδευτικά παραδείγματα έφτασαν τα 84.
Δοκιμάστηκαν όλα σε Windows 7 και 10, χωρίς να παρουσιαστεί κάποιο πρόβλημα.
Θυμίζω στα Windows 10 και πάνω, πρέπει να ενεργοποιηθεί η Legacy Option της κονσόλας.
H Hobby BASIC πλησιάζει τα 130k views στο φόρουμ του flat assembler (ενώ ξεπέρασε τα 14k γραμμές πηγαίου κώδικα).
Η εκεί ανάρτηση δέχεται πλέον σταθερά 40 με 60 views την ημέρα.
Εικάζω πως και τα συχνά update βοηθάνε σε αυτό, δείχνουν ότι πρόκειται για ενεργό project.

Λίγα λόγια για το τελευταίο update.
Διορθώθηκε bug που αφορά το εκτελέσιμο που εξάγει η Hobby BASIC. Δεν συμπεριλάμβανε τον κώδικα από τα include files στο εκτελέσιμο.

Προστέθηκε η συνάρτηση FILE(path$,n) για λειτουργίες που αφορούν φακέλους ή αρχεία.
Εργασίες που προηγουμένως γίνονταν μόνο με την εντολή EXEC.
! FILE(path$,n)
! file path, 0 - delete file or folder
! file path, 1 - create folder
! file path, 2 - create file
! file path, 3 - check if file or folder exists
! file path, 4 - set current directory
! returns error value in V0

Το πρόγραμμα δημιουργεί 10 αρχεία κειμένου μέσα στον φάκελο DATA\TEMP (αν δεν υπάρχει ο φάκελος, τον δημιουργεί).
Κώδικας:
        CREATE_FOLDER = 1
        CREATE_FILE = 2
        FILE_OR_FOLDER_EXISTS = 3
        SET_CURRENT_DIRECTORY = 4

        path$ = PATH("DATA\TEMP")

        if ~FILE(path$,FILE_OR_FOLDER_EXISTS)
            if ~FILE(path$,CREATE_FOLDER)
                print "Can''t create folder, error ",V0
                goto continue
            endif
        endif

        if ~FILE(path$,SET_CURRENT_DIRECTORY)
            print "Can''t set current directory, error ",V0
            goto continue
        endif

        for i=1 to 10
            a$ = "Text" + STR(i) +".txt"
            if ~FILE(a$,FILE_OR_FOLDER_EXISTS)
                FILE(a$,CREATE_FILE)
            endif
        next

        print "Success!"

        continue#
        pause
        end

1713193331532.png


Η συνάρτηση TICK(2) επιστρέφει την μνήμη που χρησιμοποιεί η Hobby BASIC ανά πάσα στιγμή.
Στα Windows 7 η Hobby BASIC έχει περίπου 6 MB footprint στο ξεκίνημα της.
Κώδικας:
        view 11
        screen 80,10,0
        color 0,7
        cls
        print "Memory used: ",TICK(2)/1024," KB"
        pause
        end

1713193154384.png


Ξεκίνησα να βελτιώνω το εικαστικό μέρος των παραδειγμάτων.
Είναι όμως πολλά τα παραδείγματα και θα χρειαστεί χρόνος.
Παράδειγμα, το MISC.BAS ανανεώθηκε σε MEMO.BAS.
ANSI γραφικά όπως πάντα.

1713192444194.png
1713192457667.png

Have fun with Hobby BASIC.
 
Για το πρώτο Ledix, δείτε εδώ.

Πρόσθεσα στα παραδείγματα της Hobby BASIC, remake του Ledix Adventure με ANSI γραφικά.
Είναι ένα arcade παζλ που έγραψα στο flash πριν αρκετά χρόνια (υπάρχει online).
Θα το βρείτε στον φάκελο EXAMPLES/GAMES/LEDIX2.BAS

Σκοπός σας να τοποθετήσετε τις μπλε σφαίρες στις υποδοχές.
Στην έκδοση της κονσόλας κερδίζετε μια ζωή κάθε 1000 πόντους.
Μη σπρώξετε τα κρανία στις υποδοχές.
Ο Ledix τώρα μπορεί να σπρώξει πολλά αντικείμενα ταυτόχρονα.

Use the arrow keys to play
Press spacebar to restart room (it will cost you one life)
Press 2 to skip to next room
Press 1 for previous room
Press S to toggle music on/off


Σε όλα τα παιχνίδια της Hobby BASIC σε Windows 10, πρέπει να ενεργοποιήσετε την επιλογή "Use Legacy Console".

1714731067125.png

1714731049063.png

Have fun with Hobby BASIC.
 
Μια ιδέα σε εξέλιξη, το Tile Maze.

Σκοπός σας να μαζέψετε όλα τα αντικείμενα.
Με κάθε κίνηση προχωράτε από τοίχο σε τοίχο.
Υπάρχει ένα STOP tile που μπορείτε να αλλάζετε μαζί του θέση ανά πάσα στιγμή.
Σε κάθε δωμάτιο υπάρχουν 3 πόρτες που οδηγούν σε άλλα δωμάτια.
Υπάρχουν 20 συνολικά δωμάτια που δημιουργούν ένα δωδεκάεδρο σύστημα (αυτό ήταν tip).

Use the arrow keys to play
Press spacebar to switch place with the stop tile
Press 1 to restart room
Press 0 to restart game
Press S to toggle music on/off (set MUSIC to 1 and restart)

Το TILEMAZE.BAS θα το βρείτε στον φάκελο EXAMPLES/GAMES.
ANSI γραφικά στην κονσόλα των Windows 7/10.

1717155365258.png
1717155514577.png

Have fun with Hobby BASIC.
 
Μια ιδέα σε εξέλιξη, το Tile Maze.

Σκοπός σας να μαζέψετε όλα τα αντικείμενα.
Με κάθε κίνηση προχωράτε από τοίχο σε τοίχο.
Υπάρχει ένα STOP tile που μπορείτε να αλλάζετε μαζί του θέση ανά πάσα στιγμή.
Σε κάθε δωμάτιο υπάρχουν 3 πόρτες που οδηγούν σε άλλα δωμάτια.
Υπάρχουν 20 συνολικά δωμάτια που δημιουργούν ένα δωδεκάεδρο σύστημα (αυτό ήταν tip).



Το TILEMAZE.BAS θα το βρείτε στον φάκελο EXAMPLES/GAMES.
ANSI γραφικά στην κονσόλα των Windows 7/10.

Προβολή συνημμένου 278247
Προβολή συνημμένου 278248

Have fun with Hobby BASIC.

Επισκέπτομαι αυτό το νήμα για πρώτη φορά. Παρότι η Hobby basic sounds Chinese to me, μιας και είμαι πανάσχετη σε θέματα computing engineering, gaming development κλπ. νομίζω πως είμαι σε θέση να διακρίνω τα άτομα που έχουν πάθος και μεράκι για τη δουλειά ή το χόμπυ τους. Η παρουσίαση σας έχει τόσο άρτια δομή, ανάλυση, επεξηγήσεις και παραδείγματα που κάλλιστα θα την φανταζόμουν τυπωμένη σε manual, βιβλιοδετημένη ή ακόμη ως υλικό για online σεμινάριο ή διάλεξη σε Πανεπιστημιακή αίθουσα. Keep up the good work :)
 
Σε ευχαριστώ, είναι ένα προσωπικό χομπίστικο project που κοντεύει δεκαετία.
Έχει μεγαλώσει αρκετά η γλώσσα ώστε να μπορεί να δημιουργήσει παιχνίδια στην κονσόλα. :thumbup:
 
Hobby BASIC 1.9.1
Ένα νέο update στον διερμηνευτή.

Προστέθηκε η δυνατότητα COMPARE για την σύγκριση δύο διατάξεων.

Κώδικας:
        ! a[].ZERO                ! array zero
        ! a[].SHUFFLE             ! array shuffle
        ! a[].REVERSE             ! array reverse
        ! a[].COPY b[]            ! copy array b to array a
        ! a[].SWAP b[]            ! swap entite arrays
        ! a[].COMPARE b[]         ! returns zero on success in V0
        ! a[].FILL value          ! fill array with identical values
        ! a[].RAND max            ! fill with random values (0 to max-1)
        ! a[].SET start           ! sets consecutive values to the array
        ! a[].DELETE idx [,...]   ! delete values from array
        ! a[].INSERT idx,v [,...] ! insert values to array
        ! a[].SORTA               ! integer array sort ascending
        ! a[].SORTD               ! integer array sort descending
        ! a[].SETV                ! array dimensions in V0 V1 V2


Το παράδειγμα ανακατεύει και συγκρίνει συνεχώς δύο διατάξεις με ίδια στοιχεία.
Κώδικας:
    view 11
    screen 80,30,9999
    color 0,8
    cls

    MAX = 4
    dim a[MAX]
    dim b[MAX]
    a[].SET 1     ! initialize array values 1,2,..MAX
    b[].COPY a[]
    n = 0

    while ~KEY(27)
        n = n + 1
        a[].SHUFFLE
        b[].SHUFFLE
        a[].COMPARE b[]  ! zero on success in V0
        if V0 = 0
            pen 7 : print : print n,": Arrays match !" : print
            for i = 0 to MAX-1
                print "a[",i,"]=",a[i]," and b[",i,"]=",b[i]
            next
            pen 8 : print : pause
            print : n = 0
        else
            print n,": Arrays don''t match"
        endif
    endw
    end

Με MAX=4, δηλαδή τους αριθμούς 1,2,3,4 ανακατεμένους στην κάθε διάταξη, γρήγορα συμβαίνει match.

1717854543060.png

Με MAX=10 οι πιθανοί συνδυασμοί κάθε διάταξης είναι 10! = 10×9×8×7×6×5×4×3×2×1 = 3,628,800.

Μετά από 2012968 συγκρίσεις...

1717868642301.png


Σύγκριση μπορεί να γίνει και σε διατάξεις συμβολοσειρών.
Κώδικας:
    view 11
    screen 80,30,9999
    color 0,8
    cls

    MAX = 5
    dim a$[MAX] = "hello","i love you","won''t you","tell me","your name"
    dim b$[MAX]
    b$[].COPY a$[]
    n = 0

    while ~KEY(27)
        n = n + 1
        a$[].SHUFFLE
        b$[].SHUFFLE
        a$[].COMPARE b$[]
        if V0 = 0
            pen 7 : print : print n,": Arrays match !" : print
            for i = 0 to MAX-1
                print "a$[",i,"]=",a$[i]," and b$[",i,"]=",b$[i]
            next
            pen 8 : print : pause
            print : n = 0
        else
            print n,": Arrays don''t match"
        endif
    endw
    end

1717869079917.png


Τα νέα της Hobby BASIC.

Πρόσθεσα 10 επιπλέον δωμάτια στο Ledix ανεβάζοντας τον αριθμό σε 34.
Όπως και οι προηγούμενα γρίφοι, ανήκουν στον Yoshio Murase.

1717856894595.png



Διάβαζα εχθές το Retro Gaming Handhelds και θυμήθηκα μια Formula που είχα πολύ μικρός, αρχές των 80s.
Σκέφτηκα να γράψω ένα μικρό game στην Hobby BASIC, κάτι πολύ απλό, που να έχει Game And Watch feeling.
Έβαλα ένα επιπλέον task, να το κάνω σε 50 γραμμές κώδικα. Αλλιώς το παρατάω.
Ξεκίνησα στις 3 το πρωί και στις 6 το πρωί ήταν έτοιμο.
Ακριβώς 50 γραμμές, αν αφαιρέσω 5 γραμμές για τον ήχο.
To screenshot που βλέπετε είναι η κονσόλα των Windows 10.
Θα τo βρείτε στον φάκελο EXAMPLES/GAMES/FORMULA1.BAS.

1717867812877.png

Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
Hobby BASIC 1.9.2
Ένα νέο update στον διερμηνευτή.

Προστέθηκε δοκιμαστικά η υποστήριξη MOD/S3M/XM αρχείων ήχου στην Hobby BASIC μέσω της βιβλιοθήκης BASSMOD.
Τώρα μέσα από ένα πρόγραμμα της Hobby BASIC μπορούμε να αναπαράγουμε αγαπημένα αρχεία ήχου της Amiga..
Και όχι μόνο, αφού υπάρχει μεγάλος αριθμός Public Domain που μπορούμε να χρησιμοποιήσουμε ελεύθερα σε project.
Ήταν μια δυνατότητα που ήθελα εδώ και καιρό να ενσωματώσω στην Hobby BASIC.
O διερμηνευτής συνολικά υποστηρίζει WAV/MP3/MOD/S3M/XM αρχεία ήχου.

Το μικρότερο παράδειγμα. Η φιλοσοφία παραμένει ίδια, μία εντολή (sound) για όλα.
Κώδικας:
    SONG = 700
    path$ = "MEDIA\SFX\MOD\SPACE_MAN-HERB.XM"

    sound path$, SONG               !  load file and assign ID value
    sound SONG, 1                   !  play the file

    do : wait 1 : until KEY(27)     !  loop until Esc
    sound SONG, 0                   !  stop music
    end


Εικόνα από τον player, γραμμένο σε Hobby BASIC.
Βρίσκεται στον φάκελο EXAMPLES\MISC\BASSMOD.BAS
Περιλαμβάνει σχόλια με οδηγίες, για χρήση της βιβλιοθήκης μέσω της Hobby BASIC.

1719223236780.png

Have fun with Hobby BASIC.
 
P2P Tic-Tac-Toe Game via UDP sockets version 0.1

Ένα παιχνίδι τρίλιζας για δύο παίχτες μέσω τοπικού δικτύου LAN γραμμένο στην Hobby BASIC.
Το πρόγραμμα βρίσκεται στον φάκελο EXAMPLES\UDP\XOLAN.BAS

H Hobby BASIC διαθέτει ένα μικρό σετ συναρτήσεων για την αποστολή UDP μηνυμάτων μέσω τοπικού δικτύου. Έχω ξαναμιλήσει για αυτό, εν συντομία τα εισερχόμενα μηνύματα τοποθετούνται σε μια στοίβα αναμονής (ουρά) και η πρόσβαση γίνεται σύμφωνα με την αρχή first-in first-out (FIFO). Όλο γραμμένα σε assembly 32-bit.

Τα παραδείγματα της Hobby BASIC περιλαμβάνουν εφαρμογή Client/Server, Chat, P2P Drawing, και τώρα Tρίλιζα.
Ήθελα να δω αν (και πόσο εύκολα) μπορεί να πραγματοποιηθεί με το UDP πρωτόκολλο.
Δεν ήταν δύσκολο, μου άνοιξε την όρεξη για περισσότερο P2P gaming στην Hobby BASIC.

Για να τρέξει σε τοπικό δίκτυο θα χρειαστεί να ορίσετε την REMOTE_IP$ του απομακρυσμένου υπολογιστή και να κάνετε swap τα ports.
Για να το τρέξετε σε έναν μόνο υπολογιστή, τρέξτε δύο στιγμιότυπα του προγράμματος βάζοντας και στα δύο αντί για IP την λέξη "localhost" και απλώς κάντε swap τα ports.

Το πρόγραμμα θα ζητήσει εξαίρεση στο firewall.
Διόρθωσα και ένα minor-bug που ανακάλυψα γράφοντας την τρίλιζα, έγινε update της Hobby BASIC σε 1.9.3

1720723192113.png

Have fun with Hobby BASIC.
 
Βαγγέλη είναι πραγματικά μια πολύ ωραία πρόταση για P2P game. :thumbup:
Την κρατάω, θα την επεξεργαστώ.
 
Κάποια νέα παιχνίδια που έγραψα στην Hobby BASIC για την κονσόλα των Windows. ANSI γραφικά όπως πάντα.
Ξεκινάω με το παζλ Cubilus.

Στo Cubilus ο στόχος είναι να τοποθετήσετε τα χρωματιστά μπλοκ στις αντίστοιχες θέσεις τους.

Κάντε κλικ και κρατήστε πατημένο το ποντίκι σε ένα μπλοκ, επιλέξτε κατεύθυνση και αφήστε το κουμπί.
Πατήστε το spacebar για επανεκκίνηση του δωματίου.
Πατήστε 2 για να μεταβείτε στο επόμενο δωμάτιο.
Πατήστε 1 για το προηγούμενο δωμάτιο.

Το πρόγραμμα βρίσκεται στον φάκελο EXAMPLES\GAMES\CUBILUS.BAS

1724590126771.png

Have fun with Hobby BASIC.
 
Ένα παιχνίδι μνήμης γραμμένο στην Hobby BASIC για την κονσόλα των Windows, με ANSI γραφικά.
Νομίζω δεν χρειάζονται οδηγίες.

Το πρόγραμμα βρίσκεται στον φάκελο EXAMPLES\GAMES\MEMORY.BAS

1724590558543.png

Have fun with Hobby BASIC.
 
Πίσω
Μπλουζα