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

Καλημέρα.

Το Coffee Project της ημέρας. Bouncing Rectangles στο παράθυρο της κονσόλας χρησιμοποιώντας την TYPE.
Sorry, δεν είχα χρόνο για κάτι καλύτερo. Είναι 5 minute code.

Κώδικας:
    C = 80
    R = 40
    W = 8
    H = 5

    TYPE R (x,y,vx=1,vy=1) 6

    view 11
    screen C,R,0
    cursor 0,0 : color 0,0 : cls
    bsave 0,0,W-1,H-1,99

    for i = 0 to SIZE(R:[])-1
        color i+9,i+9
        paint 0,0,W,H,-1,-1
        bsave 0,0,W-1,H-1,i
        R:[i].x = i*W
        R:[i].y = i*H
    next

    color 0,7 : cls

    main#

    for i = 0 to SIZE(R:[])-1
        bload R:[i].x,R:[i].y,99
        R:[i].x = R:[i].x + R:[i].vx
        R:[i].y = R:[i].y + R:[i].vy
        if (R:[i].x < 1 or R:[i].x > (C-W)) then R:[i].vx = -R:[i].vx
        if (R:[i].y < 1 or R:[i].y > (R-H)) then R:[i].vy = -R:[i].vy
        bload R:[i].x,R:[i].y,i
    next

    wait 10 : if ~KEY(27) then goto main

BOUNCE.gif
 
Χμμμ... Τρέχοντας την Hobby Basic, σου βγάζει παράθυρο για να φορτώσεις κάποιο αρχείο. Πως προγραμματίζεις; Χρειάστηκε να φτιαξω αρχείο .BAS για να το δω.
 
Γεια χαρά, Ακριβώς έτσι όπως το έκανες. Οποιοδήποτε text editor, ακόμα και το απλό Notepad των Windows κάνει.
 
Δηλαδή δεν υπάρχει τρόπος να προγραμματίσεις, να δώσεις run για να δοκιμάσεις αυτό που έγραψες, κτλ;
 
Φυσικά! Αυτό είναι το "RUN" Lord Vek, το παράθυρο φόρτωματος που ανοίγει, είναι ο τρόπος. Μπορείς επίσης να τρέξεις το πρόγραμμα σου από την γραμμή εντολών χειροκίνητα, ή να κάνεις drag and drop το αρχείο σου πάνω στο HB.EXE. Σημείωσε, πως μπορείς και να τρέξεις από την γραμμή εντολών πρόγραμμα που βρίσκεται σε απομακρυσμένο server (risky feature). Και βέβαια, να δημιουργήσεις αυτόνομο εκτελέσιμο που μπορείς να το διανείμεις δωρεάν. θα μπορούσες και να συσχετίζεις τα αρχεία .BAS να ανοίγουν αυτόματα από το HB.EXE κάνοντας κλικ πάνω τους.

Έχω σκεφτεί να γράψω έναν απλό Windows IDE για την ΗΒ. Δεν θα ήθελα όμως να χρησιμοποιήσω κάποιο third party tool, αλλά να τον γράψω εξ ολοκλήρου σε Win32 assembly. Δεν έχω όμως τον ελεύθερο χρόνο που απαιτείται, και αν και το ξεκίνησα, το άφησα στην άκρη. Δεν μου αρέσει η ιδέα ενός έτοιμου IDE μερικών MB για έναν toy διερμηνευτή των 50 KB.
 
Τελευταία επεξεργασία:
Έγραψα ένα μικρό πρόγραμμα που τυπώνει τα thread views που έχει η Hobby BASIC στο φόρουμ του flat assembler, χωρίς να χρειάζεται να επισκεφτώ την ιστοσελίδα. Παρακολουθω έτσι τα views από την κονσόλα. Θα το βρείτε στον φάκελο EXAMPLES/MISC.

Δείτε τι εννοώ.

1697114808922.png

1697114823934.png

Have fun with Hobby BASIC.
 
Έγραψα το BLIX στην Hobby BASIC 1.6.8
To πρόγραμμα βρίσκεται στον φάκελο EXAMPLES/GAMES.

Το BLIX είναι μια απλή ιδέα παιχνιδιού που είχα και υλοποίησα το 2005.

Έκτοτε έχουν εμφανιστεί remake του παιχνιδιού σε διάφορα format.
Το BLIX υπάρχει σε GP32, GP2X και Wiz, Atari ST/STE/TT/Falcon 030, iPhone και iPad, Android, Intellivision (σε μορφή cartridge), Windows/Linux/Mac, GBA. Περισσότερα εδώ.

Η έκδοση για Hobby BASIC περιλαμβάνει 4 επίπεδα δυσκολίας, πλούσια μουσικά εφέ, και κάποια νέα χαρακτηριστικά.

Κώδικας:
BLIX is a game with a simple target.
Form columns of same-color tiles by scrolling the three rows.
Each scroll costs 2 moves, and each cleared column wins you 1 move.
The game ends when you run out of moves.

Press 1,2,3,4 to restart level anytime: EASY,NORMAL,HARD,EXPERT.
Press Spacebar to scroll the three rows randomly (costs 1 move).
Click on the arrow buttons to scroll a row.
Press S to toggle music on/off.

BLIX requires Windows 7 or later.

BLIX-PUZZLE-HOBBY-BASIC.png


Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
To Eliminator είναι ένα νέο παζλ γραμμένο στην Hobby BASIC.
Εκ πρώτης όψεως μοιάζει με το Q, όμως είναι εντελώς διαφορετικά παιχνίδια.
θα τρέξει στην τελευταία έκδοση του διερμηνευτή 1.6.8 (silent updated 26/10).
Είναι remake ενός παλιού java applet (το έγραψα ξανά πριν αρκετά χρόνια).
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.

Κώδικας:
Eliminator is a remake of a old java applet.
Remove all balls of the same color by lining them up against each other.
You have a small number of moves on each level.
The grey balls cannot be removed.

Use the arrow keys to play.
Press spacebar to restart level.
Press 2 to skip to next level.
Press 1 for previous level.
Press 0 to change window size (default is small).
Press S to toggle music on/off.

Eliminator requires Windows 7 or later.

Eliminator-Puzzle-Hobby-BASIC.png


Press 0 to change window size (default is small) new

Eliminator-Puzzle-Hobby-BASIC.png


Have fun with Hobby BASIC.
 
Hobby BASIC 1.7.1

Ένα νέο update στον διερμηνευτή.
Η Hobby BASIC τρέχει σταθερά στα Windows 11.
Θα πρέπει όμως πρώτα να επαναφέρετε τη γραμμή εντολών παλαιού τύπου.
Δείτε τα Notes for Windows 11 users στο τέλος της ανάρτησης για το πως.
Την δοκίμασα στα pc που έχω σπίτι, σε Windows XP/7/10 και 11 έτρεξε as expected.

Στο οπλοστάσιο της Hobby BASIC προστέθηκε η SNAP.
H εντολή αποθηκεύει (ή φορτώνει) ένα μέρος της οθόνης απευθείας στον (ή από τον) δίσκο.

Οι παρακάτω κώδικες δίνουν το ίδιο αποτέλεσμα στην κονσόλα, τρεις διαφορετικοί τρόποι.
Ξεκινάνε με τον ίδιο κώδικα, φορτώνοντας μια εικόνα ANSI.

Κώδικας:
    path$ = PATH("MEDIA\ANSI\SPACES1.ANS")

    COLS = 16
    ROWS = 12
    CYAN = 3

    view 11
    screen 80,25,0
    color 0,0
    cls

    ansi path$

1699791790848.png

BLOAD/BSAVE
rem Saving and loading a specific part of the screen (using BSAVE/BLOAD)

rem BSAVE {x,y,cols,rows,block_id}
rem screen to memory

rem BLOAD {x,y,block_id}
rem memory to screen
Κώδικας:
    bsave 32,3,COLS,ROWS,700
    wait 1000 : cls
    bload 2,2,700
    bload 18,2,700
    repaint 18,2,COLS,ROWS,CYAN,CYAN+8

GRAB
rem Saving and loading a specific part of the screen (using GRAB)

rem GRAB {x,y,cols,rows,array[],n}
rem screen to 2D array

rem GRAB {x,y,cols,rows,array[],x1,y1}
rem 2D array to screen
Κώδικας:
    dim a[80,25]
    SCREEN_TO_ARRAY = 0
    grab 0,0,80,25,a[],SCREEN_TO_ARRAY
    wait 1000 : cls
    grab 32,3,COLS,ROWS,a[],2,2
    grab 32,3,COLS,ROWS,a[],18,2
    repaint 18,2,COLS,ROWS,CYAN,CYAN+8

SNAP
rem Saving and loading a specific part of the screen (using SNAP)

rem SNAP {x,y,cols,rows,path$}
rem screen to file direct

rem SNAP {x,y,path$}
rem file to screen direct
Κώδικας:
    temp_path$ = PATH("DATA\TEMP\ROBOT.S")
    snap 32,3,COLS,ROWS,temp_path$
    wait 1000 : cls
    snap 2,2,temp_path$
    snap 18,2,temp_path$
    repaint 18,2,COLS,ROWS,CYAN,CYAN+8

Η έξοδος ίδια και στις τρεις περιπτώσεις.
Τα παραδείγματα ROBOT1.BAS, ROBOT2.BAS και ROBOT3.BAS βρίσκονται στον φάκελο EXAMPLES/MISC.

1699791989021.png


Ένα μεγαλύτερο και πιο αναλυτικό παράδειγμα για την έκδοση 1.7.1.
Βρίσκεται στον φάκελο EXAMPLES με το όνομα TEST.BAS
Υπάρχουν και κάποια εφέ που δεν μπορούν να εμφανιστούν στο screenshot.

Κώδικας:
    rem  TEST.BAS
    rem  Hobby BASIC Interpreter

    rem  Saving and loading the screen

    rem  Using ANSI
    rem  Using GRAB/SAVE/LOAD
    rem  Using SNAP
    rem  Using BSAVE/BLOAD

    path$ = PATH("DATA\TEMP")
    if CHDIR(path$,0) = -1
        if CHDIR(path$,1) <> 1
            alert 0,"Can''t open",path$ : end
        endif
    endif

    path$ = PATH("MEDIA\ANSI\SPACES1.ANS")
    if SIZE(path$) = -1 then alert 0,"Not found",path$ : end

    MB_ICONQUESTION = 0x20
    MB_YESNO = 0x4
    ID_YES = 0x6

    SCREEN_WIDTH = 80
    SCREEN_HEIGHT = 50
    SCREEN_TO_ARRAY = 0
    ARRAY_TO_SCREEN = 1
    COLS = 15
    ROWS = 12

    rem  declare arrays: robot0,robot1,...
    for n = 0 to 4
        dim robot//n[COLS,ROWS]
    next

    rem  set ID array values: 700,701,...
    dim ID[5] : ID[].SET 700

    view 11
    screen SCREEN_WIDTH,SCREEN_HEIGHT,0
    cursor 0,0
    color 0,0
    cls

    rem  load an ANSI encoded text file
    ansi path$

    move 0,3,80,25,0,0
    wait 500


    rem SAVE SCREEN

    rem  screen to 2D array
    rem  GRAB with 6 parameters
    grab 0,0,COLS,ROWS,robot0[],SCREEN_TO_ARRAY
    grab 16,0,COLS,ROWS,robot1[],SCREEN_TO_ARRAY
    grab 32,0,COLS,ROWS,robot2[],SCREEN_TO_ARRAY
    grab 48,0,COLS,ROWS,robot3[],SCREEN_TO_ARRAY
    grab 64,0,COLS,ROWS,robot4[],SCREEN_TO_ARRAY

    rem  2D array to file (.HB extension)
    save PATH("DATA\TEMP\ROBOT0.HB"),robot0[]
    save PATH("DATA\TEMP\ROBOT1.HB"),robot1[]
    save PATH("DATA\TEMP\ROBOT2.HB"),robot2[]
    save PATH("DATA\TEMP\ROBOT3.HB"),robot3[]
    save PATH("DATA\TEMP\ROBOT4.HB"),robot4[]

    rem  screen to file direct (.S extension)
    rem  SNAP with 5 parameters
    snap 0,0,COLS,ROWS,PATH("DATA\TEMP\ROBOT0.S")
    snap 16,0,COLS,ROWS,PATH("DATA\TEMP\ROBOT1.S")
    snap 32,0,COLS,ROWS,PATH("DATA\TEMP\ROBOT2.S")
    snap 48,0,COLS,ROWS,PATH("DATA\TEMP\ROBOT3.S")
    snap 64,0,COLS,ROWS,PATH("DATA\TEMP\ROBOT4.S")

    rem  screen to memory
    bsave 0,0,COLS,ROWS,ID[0]
    bsave 16,0,COLS,ROWS,ID[1]
    bsave 32,0,COLS,ROWS,ID[2]
    bsave 48,0,COLS,ROWS,ID[3]
    bsave 64,0,COLS,ROWS,ID[4]


    rem  LOAD SCREEN

    rem  zero arrays
    for n = 0 to 4
        robot//n[].ZERO
    next

    rem  file to 2D array (.HB extension)
    load PATH("DATA\TEMP\ROBOT0.HB"),robot0[]
    load PATH("DATA\TEMP\ROBOT1.HB"),robot1[]
    load PATH("DATA\TEMP\ROBOT2.HB"),robot2[]
    load PATH("DATA\TEMP\ROBOT3.HB"),robot3[]
    load PATH("DATA\TEMP\ROBOT4.HB"),robot4[]

    rem  2D array to screen at position x,y
    rem  GRAB with 7 parameters
    grab 0,0,COLS,ROWS,robot0[],0,12
    grab 0,0,COLS,ROWS,robot1[],16,12
    grab 0,0,COLS,ROWS,robot2[],32,12
    grab 0,0,COLS,ROWS,robot3[],48,12
    grab 0,0,COLS,ROWS,robot4[],64,12
    wait 500

    rem  file to screen direct (.S extension)
    rem  SNAP with 3 parameters
    snap 0,ROWS*2,PATH("DATA\TEMP\ROBOT0.S")
    snap 16,ROWS*2,PATH("DATA\TEMP\ROBOT1.S")
    snap 32,ROWS*2,PATH("DATA\TEMP\ROBOT2.S")
    snap 48,ROWS*2,PATH("DATA\TEMP\ROBOT3.S")
    snap 64,ROWS*2,PATH("DATA\TEMP\ROBOT4.S")
    wait 500

    rem  shuffle ID array
    ID[].SHUFFLE

    rem  memory to screen
    rem  robots appear in random position
    bload 0,ROWS*3,ID[0]
    bload 16,ROWS*3,ID[1]
    bload 32,ROWS*3,ID[2]
    bload 48,ROWS*3,ID[3]
    bload 64,ROWS*3,ID[4]
    wait 500

    rem  do some fancy changes
    store  0,0,SCREEN_WIDTH,SCREEN_HEIGHT
    times 5000  invert RND(SCREEN_WIDTH),RND(SCREEN_HEIGHT),1,1
    restore
    flip 16,ROWS*2,32,ROWS,0
    flip 48,ROWS*2,16,ROWS,1
    repaint 0,ROWS,SCREEN_WIDTH,ROWS,4,5
    repaint 48,ROWS*2,16,ROWS,4,6
    repaint 0,ROWS*3,SCREEN_WIDTH,ROWS,1,2

    rem  save the screen as ANSI encoded text file
    V3 = -1
    grab 0,0,SCREEN_WIDTH,SCREEN_HEIGHT-1,text$
    path$ = PATH("MEDIA\ANSI\SPACES2.ANS")
    save path$,text$

    title "Press space to open the new image in DRAW, Esc to exit"

    inkey
    if V0 = 0x20
        rem  will fail if HB parent folder contains spaces, e.g,  C:\NEW  FOLDER\HB
        cmd$ = "start /wait " + PATH("HB.EXE EXAMPLES\DRAW.BAS ") + path$
        exec cmd$
    endif

    color 0,7 : cls : end

1699793086633.png

Have fun with Hobby BASIC.
 
Το Coffee project της ημέρας.
Console Theme Creator for Hobby BASIC

Τα χρώματα στην κονσόλα των Windows είναι 16.
Στις νεώτερες εκδόσεις των Windows αυτό άλλαξε, κυρίως για μπορούν τα τρέχουν οι Linux εφαρμογές (μέσω WSL) στην κονσόλα των Windows. Πρακτικά όμως παραμένουν 16, λόγω θεμάτων συμβατότητας με παλαιότερες εφαρμογές. Η γραμμή εντολών των Windows (σύμφωνα με το devblogs της Microsoft) είναι: the most frequently launched executable in all of Windows.

Τα βασικά χρώματα λοιπόν (Legacy Theme) είναι: Black, Blue, Green, Aqua, Red, Purple, Yellow, White, Gray, Light Blue, Light Green, Light Aqua, Light Red, Light Purple, Light Yellow, Bright White.

Ας τα θυμηθούμε.
Κώδικας:
    dim a[16]=0x000000,\
        0x800000,0x008000,0x808000,0x000080,0x800080,\
        0x008080,0xC0C0C0,0x808080,0xFF0000,0x00FF00,\
        0xFFFF00,0x0000FF,0xFF00FF,0x00FFFF,0xFFFFFF

    view 11
    screen 80,30,0
    cursor 0,0
    color 0,7
    cls

    for index=0 to 15
      rgb index,a[index]
    next

    for i=0 to 3
        color i,i
        paint (i*7)+1,1,7,4,-1,-1
        color i+4,i+4
        paint (i*7)+1,5,7,4,-1,-1
        color i+8,i+8
        paint (i*7)+1,9,7,4,-1,-1
        color i+12,i+12
        paint (i*7)+1,13,7,4,-1,-1
    next

    inkey
    color 0,7:cls
    end

1700518199113.png

Ξεκινώντας από τα Windows Vista μπορούμε να αλλάξουμε τις RGB τιμές!.
Σημειώστε πως και πάλι, μόνο 16 χρώματα θα εμφανίζονται ταυτόχρονα.
Στο τελευταίο update της Hobby BASIC 1.7.3 προστέθηκε το πρόγραμμα THEME.BAS.
Με αυτό, μπορούμε να δημιουργήσουμε RGB θέματα για την κονσόλα.

1700518361658.png

Πατώντας 1 έως 7 επιλέγουμε ένα από τα έτοιμα θέματα.

1700519075377.png

Κάνοντας κλικ με το ποντίκι πάνω σε ένα χρώμα, εμφανίζεται το παράθυρο διαλόγου των χρωμάτων.
Έτσι δημιουργούμε το δικό μας θέμα.
Οι αλλαγές εμφανίζονται απευθείας.

1700518472857.png

Πατώντας 0 κάνουμε export το θέμα στον φάκελο MISC.

1700518563304.png

1700518572811.png

1700519132868.png

1700519174692.png

Have fun with Hobby BASIC.
 
Hobby BASIC 1.7.5

Αυτό το update αυξάνει την σταθερότητα και διορθώνει κάποια bug στον διερμηνευτή.

Μια σημαντική αναβάθμιση αφορά την δήλωση TYPE.

Κώδικας:
    ! TYPE statement defines a special array type where
    ! each element can be either a variable or a string.


    ! type declaration
    type Deck (Suit$,Value) 52

    ! defining type elements
    Deck:[1].Suit$ = "Club"
    Deck:[1].Value = 2

    ! accessing type elements
    for i = 0 to SIZE(Deck:[])-1
        print Deck:[i].Value;
    next

Αρχικά η TYPE είχε μόνο global scope, δεν ήταν εφικτό να έχουμε local type μέσα σε μια υπορουτίνα. Αυτό άλλαξε, και τώρα μπορούμε να δηλώσουμε local type μέσα σε υπορουτίνα με ότι αυτό συνεπάγεται. Επίσης, μπορούμε να περάσουμε την type ως παράμετρο είτε με πέρασμα δια τιμής (by value) που είναι η default λειτουργία, είτε με αναφορά (by reference).

Κώδικας:
    ! local variable declaration

    sub foo()
        local a,var=0xFF,A='A'
        local a$='string',b$
        local dim map[80,25]
        local type Coord (x,y) 10
        local a[3]=1,2,3
        rets var
    ends

    ? foo()

Κώδικας:
    ! passing a type by reference

    type Rect (x,y,w,h)

    foo(byref Rect:[],1,1,10,7)

    sub foo(R:[],x,y,w,h)
       R:[0].x = x
       R:[0].y = y
       R:[0].w = w
       R:[0].h = h
    ends

Έκλεψα λίγο παραπάνω χρόνο τα Χριστούγεννα...

Παιχνίδι Σκορ 4 γραμμένο στην Hobby BASIC για την κονσόλα των Windows, όπως πάντα με ASCII γραφικά. H μηχανή του είναι ένας αλγόριθμος Minimax με μείωση άλφα-βήτα. Δυστυχώς ακόμα και με τον minimax είναι αργό στον διερμηνευτή μου. Είναι playable σε βάθος 3, άντε και 4 σε κάποιο δυνατό υπολογιστή και με λίγο υπομονή, αλλά γίνεται unplayable σε βάθος 5 (εκεί που κανονικά θα έπρεπε να παίζει). Όμως το πρόσθεσα στα παραδείγματα. Έτσι και αλλιώς τα προγράμματα αυτά τα γράφω για να τεστάρω τις ανοχές, και να ανακαλύπτω τις αδυναμίες του διερμηνευτή. Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.

1703690405365.png

Have fun with Hobby BASIC.
 
To πρώτο coffee project της Hobby BASIC για το 2024 είναι το Poux. 1 2 3

Eίναι ένα arcade παιχνίδι που σκοπός σας είναι κάνοντας κλικ σε ομάδες από χρωματιστές μπάλες να τις αφαιρέσετε.
Ο μετρητής τρέχει ολοένα και γρηγορότερα και προσθέτει μια νέα γραμμή από μπάλες στο κάτω μέρος της οθόνης.
Σποραδικά, εμφανίζεται μια special μπάλα (βόμβα) που κάνοντας κλικ πάνω της ανατινάζει όλη την οριζόντια γραμμή.
Το παιχνίδι έχει μουσική, ήχους, ANSI γραφικά και εφέ. Παίζεται με το ποντίκι, η μουσική on/off με το πλήκτρο S.
Τρέχει ομαλά και γρήγορα στην κονσόλα των Windows.
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.

1704206461388.png
1704206510243.png

Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
Τι ωραία πράγματα που φτιάχνεις!
Να 'σαι καλά Βαγγέλη. :thumbup:
Αλήθεια σου το λέω, δεν βρίσκω μεγαλύτερη ευχαρίστηση στον υπολογιστή από το να γράφω προγράμματα στην Hobby BASIC.
Σε μια γλώσσα που την ξεκίνησα από το 0, σε ένα άδειο notepad, 8 χρόνια πριν.
Σε ευχαριστώ.
 
Το Hunt the Wumpus είναι ένα κλασικό text adventure που γράφτηκε από τον Gregory Yob το 1973, πριν μισό αιώνα.
Τιμής ένεκεν, μια έκδοση του παιχνιδιού γραμμένη στην Hobby BASIC.
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.

1704749851528.png

Have fun with Hobby BASIC.
 
Η νέα έκδοση 1.7.7 της Hobby BASIC συμπεριλαμβάνει και ένα νέο παζλ, το Blocks.
Στο παζλ αυτό, σκοπός είναι να οδηγήσετε το λευκό οριζόντιο μπλοκ στην έξοδο.
Παίζεται με το ποντίκι, υπάρχουν 13 προβλήματα να λύσετε.
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.
Για το παράθυρο της κονσόλας των Windows.

Use mouse to play
Press spacebar to restart level
Press 2 to skip to next level
Press 1 for previous level
Press S to toggle music on/off

Hobby-BASIC-Blocks-Puzzle-Console.png


Ορίζοντας την μεταβλητή MULTICOLOR σε 1, τα μπλοκ έχουν διαφορετικά χρωματικά θέματα.

Hobby-BASIC-Blocks-Puzzle-Console.png


Have fun with Hobby BASIC.
 
Η νέα έκδοση 1.7.7 της Hobby BASIC συμπεριλαμβάνει και ένα νέο παζλ, το Blocks.
Στο παζλ αυτό, σκοπός είναι να οδηγήσετε το λευκό οριζόντιο μπλοκ στην έξοδο.
Παίζεται με το ποντίκι, υπάρχουν 13 προβλήματα να λύσετε.
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.
Για το παράθυρο της κονσόλας των Windows.



Hobby-BASIC-Blocks-Puzzle-Console.png




Hobby-BASIC-Blocks-Puzzle-Console.png


Have fun with Hobby BASIC.
Ξέχασα να αναφέρω πως το Blocks είναι κλώνος ενός flash παιχνιδιού που έχω γράψει πριν 20 χρόνια με τίτλο BlockChamp.

1705762324404.png



To coffee project της ημέρας.
Το Words είναι ένα παιχνίδι με λέξεις για την κονσόλα των Windows.
Σκοπός να βρείτε όσες περισσότερες Αγγλικές λέξεις μπορείτε, σε περιορισμένο χρόνο.
Πρέπει να κάνετε κλικ στα γράμματα της λέξης με την σωστή σειρά.
Προσοχή, αν πατήσετε λάθος γράμμα, η λέξη ξεκινάει από την αρχή.
Πατήστε spacebar για να πάρετε μια νέα λέξη οποιαδήποτε στιγμή.
Το παιχνίδι βρίσκεται στον φάκελο EXAMPLES/GAMES.

Find as many words as you can in a limited time
Click the letters of each word in their correct order

Use mouse to play
Press spacebar to get a new word

1705762751885.png
1705762767163.png

Σε όλα τα προγράμματα της Hobby BASIC, ANSI γραφικά δουλεμένα στο Paint, το σχεδιαστικό που είναι γραμμένο στην Hobby BASIC.

1705776881483.png

Το παιχνίδι είναι κλώνος του Words που έγραψα στο flash 20 χρόνια πριν.

1705762569043.png

Have fun with Hobby BASIC.
 
Hobby BASIC 1.7.8
Ένα νέο update στον διερμηνευτή, με κάποια minor bug fix και μικρές εσωτερικές αλλαγές.

Η συνάρτηση GEN()
Κώδικας:
    a$=GEN(n,string$)                   --> string
  1. Generates random string
  2. Shuffles the string buffer
  3. Sorts string alphabetical
  4. BASIC to HTML conversion
Κώδικας:
    n = 10
    for x = 1 to 15
        print GEN(n,'!@#$%12345ΑΒΓΔΕZabcdef')     ! generate random string
    next

1707303018464.png

Κώδικας:
    n = 0
    for x = 1 to 15
        print GEN(n,'!@#$%12345ΑΒΓΔΕZabcdef')     ! shuffle the string buffer
    next

1707303064439.png

Κώδικας:
    n = -1
    print GEN(n,'!@#$%12345ΑΒΓΔΕZabcdef')     ! sort string alphabetical

1707303121852.png


Τέλος, μία ακόμα δυνατότητα της Hobby BASIC μέσω της συνάρτησης GEN.
Μετατροπή του BASIC κώδικα σε HTML.
Στο README της Hobby BASIC γίνεται μια σύντομη αναφορά.

html_src$=GEN(-2,basic_src$) ! BASIC to HTML conversion

Στον φάκελο EXAMPLES/MISC υπάρχει ένα απλό παράδειγμα χρήσης, το BASIC2HTML.BAS.

Όταν το τρέξουμε ανοίγει ένα παράθυρο για να επιλέξουμε ένα αρχείο .BAS

1707305261358.png

1707306620937.png

Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
1708181322770.png

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

Το Πόκερ περιλαμβάνει και ορισμένες αιθέριες ANSI υπάρξεις που εμφανίζονται σταδιακά, όσο τα κέρδη σας μεγαλώνουν.
Γιατί πως θα μπορούσαν να λείπουν από ένα τραπέζι ANSI Πόκερ, ANSI κορίτσια.

1708180190409.png

1708182493709.png

Have fun with Hobby BASIC.
 

Συνημμένα

  • 1708180220637.png
    1708180220637.png
    11,7 KB · Προβολές: 1
Η έκδοση που πρόκειται να ανέβει σύντομα περιλαμβάνει μια νέα εντολή την BLOADS.
Στην εικόνα, βλέπουμε την διαφορά μεταξύ BLOAD και BLOADS.
Μια δυνατότητα που υπάρχει ήδη (εδώ και καιρό) στην Hobby BASIC μέσω της εντολής GRAB.
Αλλά είναι ακόμα ευκολότερο τώρα, και γενικά μου αρέσει να υπάρχουν διαφορετικές μέθοδοι για τον ίδιο σκοπό.
Κάτι που συμβαίνει συχνά στην Hobby BASIC.

Κώδικας:
    view 0,11
    screen 90,30,0
    cursor 0,0
    color 0,8
    cls

    path$ = PATH('DATA\BIN\GHOST')
    if SIZE(path$) = -1  then alert 0,'Not found',path$ : end

    snap 0,0,path$
    bsave 0,0,43,21,700

    times (90*30)-1 print CHR(RND(93)+33),
    view 1
 
    bload 2,4,700
    bloads 46,4,700

    inkey
    color 0,7 : cls
    end

GHOST.png


Βλέπουμε πόσο εύκολα γίνονται με την Hobby BASIC πράγματα που απαιτούν πολύ δουλειά σε άλλους διερμηνευτές.
Ακριβώς επειδή η Hobby BASIC είναι σχεδιασμένη για την εύκολη δημιουργία παιχνιδιών με ANSI γραφικά στην κονσόλα.

Κώδικας:
    BLUE = 1
    PURPLE = 5
    BRIGHT_BLUE = 9
    BRIGHT_PURPLE = 13
 
    repaint 46,4,43,21,PURPLE,BRIGHT_BLUE
    repaint 46,4,43,21,BRIGHT_PURPLE,BLUE

1708352624482.png

Have fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
Πίσω
Μπλουζα