Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
micro(A) demo game: Ghost&Coin
#1
OH BOY
I finally let say completed simple tiny game in micro(A)
called Ghosts&Coins 

Code: (Select All)
'Ghosts & Coins Aurel 9.1.2026
mode 1 : wcolor 0,0,0: fcolor 192,192,192 : swap
' Load images at the start
ptr img0,img1,img2,img3,img4,img5,img6
ptr wmKeyDown
LoadImg img0, "ghost.bmp",  0, 32, 32, 24
LoadImg img1, "hero.bmp",  0, 32, 32, 24
LoadImg img2, "ghostRight.bmp",  0, 32, 32, 24
LoadImg img3, "ghostLeft.bmp",  0, 32, 32, 24
LoadImg img4, "ghostDown.bmp",  0, 32, 32, 24
LoadImg img5, "ghostUp.bmp",  0, 32, 32, 24

LoadImg img6, "coin2.bmp", 0, 32, 32, 24
var score ,i,c,r,p,spriteXW,spriteYH, xdr[4], ydr[4], spriteXEn, spriteYEn
var spriteWEn, spriteHEn , spriteXWEn , spriteYHEn ,enemyIndex
var true ,coinXW,coinYH,xedge,yedge: true = -1
' Define arrays for sprite properties
var spriteX[5], spriteY[5], spriteWidth[5], spriteHeight[5]
var spriteSpeedX[5], spriteSpeedY[5]
var dir1,dir2,dir3,dir4,CELLSIZE,wp
' Initialize player sprite at index 1
spriteX[1] = 300
spriteY[1] = 200
spriteWidth[1] = 32
spriteHeight[1] = 32

' Initialize enemy(ghost) sprites at indices 2 to 5
spriteX[2] = 352
spriteY[2] = 192
spriteWidth[2] = 32
spriteHeight[2] = 32
spriteSpeedX[2] = 1
spriteSpeedY[2] = 1

spriteX[3] = 192
spriteY[3] = 352
spriteWidth[3] = 32
spriteHeight[3] = 32
spriteSpeedX[3] = 1
spriteSpeedY[3] = 1

spriteX[4] = 480
spriteY[4] = 192
spriteWidth[4] = 32
spriteHeight[4] = 32
spriteSpeedX[4] = 1
spriteSpeedY[4] = 1

spriteX[5] = 192
spriteY[5] = 480
spriteWidth[5] = 32
spriteHeight[5] = 32
spriteSpeedX[5] = 1
spriteSpeedY[5] = 1

' Initialize coins at indices 6 to 8
var coinX[3], coinY[3], coinWidth[3], coinHeight[3]
coinX[1] = 200
coinY[1] = 100
coinX[2] = 600
coinY[2] = 200
coinX[3] = 400
coinY[3] = 400

coinWidth[1] = 32
coinHeight[1] = 32
coinWidth[2] = 32
coinHeight[2] = 32
coinWidth[3] = 32
coinHeight[3] = 32

' SET SCREEN 800, 536 , sprite size 32
xedge = 800 : yedge = 536 : CELLSIZE = 32

' Initialize score
score = 0

' Main game loop -------------------------------------------------------
LABEL mainLoop
    'CLS
     RECT true, true , 800, 600
    ' Move enemy sprites using WHILE loop
    i = 2
    WHILE i < 6
        if i = 2 : dir1=RAND(4) : moveGhost1() : endif
        if i = 3 : dir2=RAND(4) : moveGhost2() : endif
        if i = 4 : dir3=RAND(4) : moveGhost3() : endif
        if i = 5 : dir4=RAND(4) : moveGhost4() : endif
 
        i = i + 1
    WEND
' Handle player movement
hWparam wp
'vkLEFT
if wp = 37 : if spriteX[1] > 0   : spriteX[1] = spriteX[1] - 32 : endif : endif
'vkRIGHT
if wp = 39 : if spriteX[1] < 736 : spriteX[1] = spriteX[1] + 32 : endif : endif
'vkUP
if wp = 38 : if spriteY[1] > 0   : spriteY[1] = spriteY[1] - 32 : endif : endif
'vkDOWN
if wp = 40 : if spriteY[1] < 420 : spriteY[1]= spriteY[1] + 32  : endif : endif

    ' Check for collisions with enemies using WHILE loop
    enemyIndex = 2
    WHILE enemyIndex < 6
        spriteXW   = spriteX[1] + spriteWidth[1]
        spriteYH   = spriteY[1] + spriteHeight[1]
        spriteXEn  = spriteX[enemyIndex]
        spriteYEn  = spriteY[enemyIndex]
        spriteWEn  = spriteWidth[enemyIndex]
        spriteHEn  = spriteHeight[enemyIndex]
        spriteXWEn = spriteXEn + spriteWEn
        spriteYHEn = spriteYEn + spriteHEn
IF spriteXW > spriteXEn & spriteX[1] < spriteXWEn  & spriteYH > spriteYEn & spriteY[1] < spriteYHEn
           ' PRINT "Collision detected between player and enemy "; enemyIndex - 1
           score = score - 10
           'PRINT 10,540,"SCORE : " : PRINT 100,540,score
ENDIF
'show enemy ...
       ' ShowImgT img2, spriteX[enemyIndex], spriteY[enemyIndex], 32, 32
        enemyIndex = enemyIndex + 1
    WEND

    ' Check for collisions with coins using WHILE loop
    c = 1
    WHILE c < 4
        spriteXW = spriteX[1] + spriteWidth[1]
        spriteYH = spriteY[1] + spriteHeight[1]
        coinXW = coinX[c] + coinWidth[c]
        coinYH = coinY[c] + coinHeight[c]
        IF spriteXW > coinX[c] & spriteX[1] < coinXW &  spriteYH > coinY[c] & spriteY[1] < coinYH
            'PRINT "Player collected coin "; c
            score = score + 10
            ' Reposition the coin
            coinX[c] = RAND(800 - coinWidth[c])
            coinY[c] = RAND(448 - coinHeight[c])
        ENDIF
        'draw coin
        ShowImgT img6, coinX[c], coinY[c], 32, 32
        c = c + 1
    WEND
    
     'Draw Player (
     ShowImgT img1, spriteX[1], spriteY[1], 32, 32

   

    'PRINT "Score: "; score
    fcolor 250,230,100
    PRINT 10,540,"SCORE : " : PRINT 100,540,score

    'G A M E   O V E R
    if score < 0 : goto gameOver : endif

    'Display swap GDI buffers
    SWAP

    ' Delay for frame rate (depends on environment)
    delay()

Goto mainLoop

func delay()
'set delay to your pc
p=1 : while p < 156 : p = p + 0.01 : wend
endfn

func moveGhost1()
    'ShowImgT img2, spriteX[2], spriteY[2], 32, 32
    if dir1 = 0
    ShowImgT img2,spriteX[2], spriteY[2], 32, 32
    spriteX[2] = spriteX[2] + CELLSIZE
    endif

    if dir1 = 1
       ShowImgT img3,spriteX[2], spriteY[2], 32, 32
       spriteX[2] = spriteX[2] - CELLSIZE
    endif

    if dir1 = 2
       ShowImgT img4,spriteX[2], spriteY[2], 32, 32
       spriteY[2] = spriteY[2] + CELLSIZE
    endif 

    if dir1 = 3
       ShowImgT img5,spriteX[2], spriteY[2], 32, 32
       spriteY[2] = spriteY[2] - CELLSIZE
    endif
   
    IF spriteX[2] < 0 : spriteX[2] = 0 : ENDIF  :  IF spriteX[2] > 736 : spriteX[2] = 736 : ENDIF
    IF spriteY[2] < 0 : spriteY[2] = 0 : ENDIF  :  IF spriteY[2] > 448 : spriteY[2] = 448 : ENDIF
endfn
'----------
func moveGhost2()
    'ShowImgT img0, spriteX[3], spriteY[3], 32, 32
    IF dir2 = 0 : ShowImgT img2,spriteX[3], spriteY[3], 32, 32 :spriteX[3] = spriteX[3] + CELLSIZE : ENDIF  ' Right
    IF dir2 = 1 : ShowImgT img3,spriteX[3], spriteY[3], 32, 32 :spriteX[3] = spriteX[3] - CELLSIZE : ENDIF  ' Left
    IF dir2 = 2 : ShowImgT img4,spriteX[3], spriteY[3], 32, 32 :spriteY[3] = spriteY[3] + CELLSIZE : ENDIF  ' Down
    IF dir2 = 3 : ShowImgT img5,spriteX[3], spriteY[3], 32, 32 :spriteY[3] = spriteY[3] - CELLSIZE : ENDIF  ' Up
   
    IF spriteX[3] < 0 : spriteX[3] = 0 : ENDIF  :  IF spriteX[3] > 736 : spriteX[3] = 736 : ENDIF
    IF spriteY[3] < 0 : spriteY[3] = 0 : ENDIF  :  IF spriteY[3] > 448 : spriteY[3] = 448 : ENDIF
endfn
'---------
func moveGhost3()
    ShowImgT img0, spriteX[4], spriteY[4], 32, 32
    IF dir3 = 0 : spriteX[4] = spriteX[4] + CELLSIZE  : ENDIF  ' Right
    IF dir3 = 1 : spriteX[4] = spriteX[4] - CELLSIZE : ENDIF  ' Left
    IF dir3 = 2 : spriteY[4] = spriteY[4] + CELLSIZE  : ENDIF  ' Down
    IF dir3 = 3 : spriteY[4] = spriteY[4] - CELLSIZE : ENDIF  ' Up
   
    IF spriteX[4] < 0 : spriteX[4] = 0 : ENDIF  :  IF spriteX[4] > 736 : spriteX[4] = 736 : ENDIF
    IF spriteY[4] < 0 : spriteY[4] = 0 : ENDIF  :  IF spriteY[4] > 448 : spriteY[4] = 448 : ENDIF
endfn
'--------
func moveGhost4()
    ShowImgT img0, spriteX[5], spriteY[5], 32, 32
    IF dir4 = 0 : spriteX[5] = spriteX[5] + CELLSIZE  : ENDIF  ' Right
    IF dir4 = 1 : spriteX[5] = spriteX[5] - CELLSIZE : ENDIF  ' Left
    IF dir4 = 2 : spriteY[5] = spriteY[5] + CELLSIZE  : ENDIF  ' Down
    IF dir4 = 3 : spriteY[5] = spriteY[5] - CELLSIZE : ENDIF  ' Up
   
    IF spriteX[5] < 0 : spriteX[5] = 0 : ENDIF  :  IF spriteX[5] > 736 : spriteX[5] = 736 : ENDIF
    IF spriteY[5] < 0 : spriteY[5] = 0 : ENDIF  :  IF spriteY[5] > 448 : spriteY[5] = 448 : ENDIF
endfn

Label gameOver
fcolor 250,250,250 : PRINT 150,540,"* * *  G A M E   O V E R  * * *" : SWAP


Attached Files Thumbnail(s)
   
Reply
#2
Congrats! This reminds me of Rons Coin Hunt Game.
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply
#3
Yes i have that one in micro(A) but work kind a same on FB and in m(A)
yes i found it ,I called CoinHunt.bas
Reply
#4
What is this micro(A) you are working with aurel?

My brave search mostly returns information about usb-connectors.
Author of BazzBasic, hobby programmer and avid bass player
Reply
#5
Until Aurel answers for himself, I would say Aurels microA is Aurel's Interpreter and Editor compiled in O2 his favorite coding language.
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply
#6
(01-11-2026, 05:18 PM)bplus Wrote: Until Aurel answers for himself, I would say Aurels microA is Aurel's Interpreter and Editor compiled in O2 his favorite coding language.

Oh, I see. Thanks.
Author of BazzBasic, hobby programmer and avid bass player
Reply
#7
Hey EK  Wink 

Yes B+ have right
It is my basic-like interpreter written in Oxygen basic (o2) compiler
code editor is called AurelEditmicro or short AEditmicro

https://sourceforge.net/projects/micro-a-interpreter/
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  micro(A) demo : Santa Cutter aurel 5 380 01-02-2026, 12:12 PM
Last Post: aurel
  micro(A)v11 aurel 114 19,233 05-01-2025, 10:06 AM
Last Post: aurel
  QBJS Sound Demo dbox 10 2,184 03-06-2024, 05:51 PM
Last Post: madscijr
Photo SVG lines to micro(A) string array initialization mnrvovrfc 2 744 08-03-2023, 12:35 PM
Last Post: aurel
  Coin Hunt CharlieJV 0 386 06-05-2023, 01:49 AM
Last Post: CharlieJV

Forum Jump:


Users browsing this thread: 1 Guest(s)