Ενα παιχνιδάκι γραμμένο στην Yabasic 2.763

FTL

Retro Member
Joined
4 Ιουλ 2007
Μηνύματα
187
Αντιδράσεις
10
Mου αρέσει το Topic αρκετά, ασχολούμαι ενεργά με προγραμματισμό.

Μια μικρή συνεισφορά στο 'Game Programming...the old way'

Ενα μικρό πάζλ που γραμμένο στην Yabasic, έχω κάνει μια version και στο Flash σε Actionscript, θα την βρείτε στην ιστοσελίδα μου.

Με τα βελάκια του πληκτρολογίου πετάτε απο τοίχο σε τοίχο και σκοπός σας είναι να μαζέψετε όλα τα κόκκινα διαμάντια.

Θα διαπιστώσετε ότι δεν είναι τόσο εύκολο όσο ακούγεται.

Το μπλε διαμάντι θα σας βοηθήσει, αλλάξτε την θέση σας με αυτό χρησιμοποιώντας το πλήκτρο space όποια στιγμή θέλετε.

Πλήκτρο 'r' για restart

Δεν είναι τίποτα ιδιαίτερο, ένα coffe project για διασκέδαση που έγραψα μαζί με την συζυγό μου.

Ακολουθεί ο πλήρες κώδικας, για όσους θέλουν να τον τρέξουν στην Yabasic, ένα screenshot και το εκτελέσιμο για Windows.

Κώδικας:
wall$ = "rgb 20,20:660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900660000ff9900ff9900ff9900"
redD$ = "rgb 20,20:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffcc00ffcc00ffcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffcc00990000990000990000ffcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffcc00cc0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000ff0000ff0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000ff0000ff0000ff0000ff0000cc0000cc0000cc0000990000ffcc33000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000ff0000ff0000ff0000ff0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000ff0000ff0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000ff0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000000000000000000000000000ffcc00990000cc0000cc0000cc0000990000ffcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffcc00990000990000990000ffcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffcc00ffcc00ffcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
blueD$ = "rgb 20,20:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006699ff6699ff6699ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006699ff0033cc0033cc0033cc6699ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000006699ff0033cc0033cc0033cc0033cc0033cc6699ff0000000000000000000000000000000000000000000000000000000000000000000000006699ff3366cc0033cc0033cc0033cc0033cc0033cc0033cc6699ff0000000000000000000000000000000000000000000000000000000000006699ff0033cc0033cc0033cc0033cc00ccff0033cc0033cc0033cc3366cc6699ff0000000000000000000000000000000000000000000000006699ff3366cc0033cc0033cc0033cc00ccff00ccff00ccff0033cc0033cc0033cc3366cc6699ff0000000000000000000000000000000000006699ff0033cc0033cc0033cc0033cc00ccff00ccff00ccff00ccff00ccff0033cc0033cc0033cc0033cc6699ff0000000000000000000000000000006699ff0033cc0033cc0033cc0033cc00ccff00ccff00ccff00ccff00ccff0033cc0033cc0033cc0033cc6699ff0000000000000000000000000000000000006699ff3366cc0033cc0033cc0000ff00ccff00ccff00ccff0000ff0033cc0033cc3366cc6699ff0000000000000000000000000000000000000000000000006699ff3366cc0033cc0033cc0033cc00ccff0033cc0033cc0033cc3366cc6699ff0000000000000000000000000000000000000000000000000000000000006699ff3366cc0033cc0033cc0033cc0033cc0033cc6633ff6699ff0000000000000000000000000000000000000000000000000000000000000000000000006699ff3366cc0033cc0033cc0033cc3366cc6699ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000006699ff0033cc0033cc0033cc6699ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006699ff6699ff6699ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
char$ = "rgb 20,20:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000660000660000660000660000660000660000660000660000660000660000660000660000000000000000000000000000000000000000000000660000660000ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600660000660000000000000000000000000000000000660000660000ff6600ff6600ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff6600ff6600660000660000000000000000000000000000660000ff6600ff6600ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff6600ff6600660000000000000000000000000000660000ff6600ff9900ff9900cc3300cc3300cc3300ff9900ff9900cc3300cc3300cc3300ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900cc3300660033cc3300ff9900ff9900cc3300660033cc3300ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900cc3300cc3300cc3300ff9900ff9900cc3300cc3300cc3300ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900ff9900ff9900ff9900cc3300cc3300ff9900ff9900ff9900ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900ff9900ff9900ff9900cc3300cc3300ff9900ff9900ff9900ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900cc3300cc3300ff9900ff9900ff9900ff9900cc3300cc3300ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900cc3300cc3300ff9900ff9900ff9900ff9900cc3300cc3300ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff9900ff9900ff9900cc3300cc3300cc3300cc3300cc3300cc3300ff9900ff9900ff9900ff6600660000000000000000000000000000660000ff6600ff6600ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff6600ff6600660000000000000000000000000000660000660000ff6600ff6600ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff9900ff6600ff6600660000660000000000000000000000000000000000660000660000ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600ff6600660000660000000000000000000000000000000000000000000000660000660000660000660000660000660000660000660000660000660000660000660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

clear screen
open window 240,180
backcolor 0,0,0
clear window

dim map(12,9)
dim diamond(12,9)
level = 1
size = 20
playGame = 1

doWelcome()
buildMap(level)
buildChar()
buildBlue()

do
k$ = inkey$
if playGame then
 if k$ = "up" then playGame = 0 : moveUp()
  elsif k$ = "down" then playGame = 0 : moveDown()
  elsif k$ = "left" then playGame = 0 : moveLeft()
  elsif k$ = "right" then playGame = 0 : moveRight()
  elsif k$ = "r" then playGame = 0 :level = level - 1 : nextLevel()
  elsif asc(k$) = 32 then playGame = 0 : swapPlaces()
  elsif k$ = "esc" then exitGame()
  fi
 fi
loop

sub doWelcome()
clear screen
print "D-Star is a freeware Puzzle game for Windows."
print "Written using Yabasic v2.763, an intepreted Basic language."
print "The goal is to move using arrows and collect all red diamonds."
print "The blue diamond will help you, use space to switch position."
print "Hit 'r' to reset if mess, D-Star is an old game remake."
print
print "Nick Kouvaris"
print color("red") "freestuff.gr/lightforce"
updateLabel()
end sub

sub buildMap(lv)
local x,y,r
switch (lv)
 case 1
  restore room1
  break
 case 2
  restore room2
  break
 case 3
  restore room3
  break
 case 4   
  restore room4
  break
 case 5
  restore room5
  break
 case 6
  restore room6
  break
 case 7
  restore room7
  break
 case 8
  restore room8
  break
 case 9
  restore room9
  break
 case 10
  restore room10
  break
end switch
px = 4 : py = 7
bx = 6 : by = 7
for y = 0 to 8
 for x = 0 to 11
  read r
  map(x,y) = r
  diamond(x,y) = 0
  if r = 1 then putbit wall$,(x*size),(y*size)
   elsif r = 2 then
    putbit redD$,(x*size),(y*size)
    diamond(x,y) = 1
    map(x,y) = 0
  fi
 next
next
end sub

sub buildChar()
putbit char$,(px*size),(py*size)
end sub

sub buildBlue()
putbit blueD$,(bx*size),(by*size)
map(bx,by) = 1
end sub

sub swapPlaces()
local tempX,tempY
tempX = px
tempY = py
px = bx
py = by
bx = tempX
by = tempY
putbit char$,(px*size),(py*size)
putbit blueD$,(bx*size),(by*size)
map(px,py) = 0
map(bx,by) = 1
playGame = 1
end sub

sub moveUp()
local x,f,win
f = map(px,(py-1))
if f = 1 then
 win = checkWin()
 if win = 1 then playGame = 0 : nextLevel() : return
  else
   playGame = 1
   return
  fi
fi
if f = 0 then
 if diamond(px,(py-1)) = 1 then diamond(px,(py-1)) = 0 : fi
 for x = 0 to size step 0.5
  putbit char$,(px*size),((py*size) - x)
 next
fi
py = py - 1
moveUp()
end sub

sub moveDown()
local x, f,win
f = map(px,(py+1)) 
if f = 1 then
 win = checkWin()
 if win = 1 then playGame = 0 : nextLevel() : return
  else
   playGame = 1
   return
  fi
fi
if f = 0 then
 if diamond(px,(py+1)) = 1 then diamond(px,(py+1)) = 0 : fi
 for x = 0 to size step 0.5
  putbit char$,(px*size),((py*size) + x)
 next
fi
py = py + 1
moveDown()
end sub

sub moveRight()
local x, f, win
f = map((px+1),py)
if f = 1 then
 win = checkWin()
 if win = 1 then playGame = 0 : nextLevel() : return
  else
   playGame = 1
   return
  fi
fi
if f = 0 then
 if diamond((px+1),py) = 1 then diamond((px+1),py) = 0 : fi
 for x = 0 to size step 0.5
  putbit char$,((px*size) + x),(py*size)
 next
fi
px = px + 1
moveRight()
end sub

sub moveLeft()
local x, f, win
f = map((px-1),py)
if f = 1 then
 win = checkWin()
 if win = 1 then playGame = 0 : nextLevel() : return
  else
   playGame = 1
   return
  fi
fi
if f = 0 then
 if diamond((px-1),py) = 1 then diamond((px-1),py) = 0 : fi
 for x = 0 to size step 0.5
  putbit char$,((px*size) - x),(py*size)
 next
fi
px = px - 1
moveLeft()
end sub


sub nextLevel()
clear window
level = level + 1
if level > 10 then
 gameOver()
 return
fi
buildMap(level)
buildChar()
buildBlue()
updateLabel()
playGame = 1
end sub

sub checkWin()
local x,y,f : f = 1
for y = 0 to 8
 for x = 0 to 11
  if diamond(x,y) = 1 then f = 0 :fi
 next
next
return f
end sub

sub updateLabel()
print at(0,10) "D-Star:: Level: " + str$(level) + " "
end sub

sub exitGame()
exit
end sub

sub gameOver()
print "CONGRATULATIONS !"
print "You completed D-Star."
end
end sub

label room1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,1,0,0,0,0,0,0,0,1,1
data 1,0,1,0,0,0,0,0,2,0,1,1
data 1,0,1,1,0,0,2,0,0,0,0,1
data 1,0,0,1,2,0,0,0,0,0,0,1
data 1,0,0,1,0,0,0,1,1,1,0,1
data 1,0,2,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,2,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room2
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,1,2,1
data 1,0,0,0,0,2,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,1,2,1,0,1,0,0,1,0,1,1
data 1,0,1,2,1,0,0,1,2,1,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,1,0,0,0,0,1,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room3
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,1,0,1
data 1,0,0,1,1,0,0,0,1,1,0,1
data 1,0,2,1,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,1,1,0,0,0,1
data 1,0,0,0,0,0,2,1,0,2,0,1
data 1,0,1,2,0,0,0,0,0,0,0,1
data 1,0,1,1,0,1,0,0,0,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room4
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,1,0,0,0,1,2,0,0,0,0,1
data 1,0,0,0,1,1,1,0,0,0,0,1
data 1,0,1,0,0,1,0,0,1,2,0,1
data 1,1,1,1,0,0,0,1,1,1,0,1
data 1,0,1,2,0,0,0,0,1,2,0,1
data 1,0,0,0,0,0,0,0,0,1,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room5
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,0,0,0,0,0,0,0,1
data 1,1,1,0,0,1,2,1,0,0,0,1
data 1,1,0,0,0,2,1,2,0,0,0,1
data 1,0,0,0,0,1,2,1,2,0,0,1
data 1,0,0,0,1,0,0,0,1,0,0,1
data 1,0,0,0,0,0,0,0,0,0,1,1
data 1,0,0,0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room6
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,1,1,0,0,0,1
data 1,0,0,0,0,0,0,1,2,1,0,1
data 1,0,1,0,1,0,0,2,1,0,0,1
data 1,0,2,1,2,0,0,1,2,1,0,1
data 1,0,1,0,1,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,0,0,0,0,0,0,1,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room7
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,0,0,0,0,0,0,1
data 1,1,1,1,0,0,0,0,0,0,1,1
data 1,1,1,2,0,1,2,0,0,0,0,1
data 1,1,2,0,1,1,1,0,0,2,1,1
data 1,0,0,0,0,1,0,0,2,1,1,1
data 1,1,0,0,0,0,0,0,1,1,1,1
data 1,0,0,0,0,0,0,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room8
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,1,2,0,0,1,1,0,0,1
data 1,0,0,1,1,1,0,2,1,2,0,1
data 1,0,0,0,0,1,0,0,0,0,0,1
data 1,1,1,1,0,2,0,0,0,0,0,1
data 1,1,1,2,0,0,1,1,1,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room9
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,0,1,1,2,0,0,1,1,0,0,1
data 1,0,1,0,1,0,1,2,0,0,0,1
data 1,0,1,0,1,0,2,1,2,0,0,1
data 1,0,1,0,1,0,0,2,1,0,0,1
data 1,0,1,1,0,0,1,1,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1

label room10
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,0,0,1,0,0,1,1,0,0,0,1
data 1,0,1,0,1,0,0,2,1,0,0,1
data 1,0,2,1,2,0,0,1,2,0,0,1
data 1,0,1,0,1,0,0,2,1,0,0,1
data 1,0,0,1,0,0,1,1,0,0,0,1
data 1,0,0,0,0,0,0,0,0,0,0,1
data 1,1,1,1,1,1,1,1,1,1,1,1


Download
 
Πλάκα έχει αν και το διαμάντι δεν εχω καταφέρει να το χρησιμοποιήσω σωστά το πεταω όπου νά'ναι ... πέρασα κι'ενα level... Αυτη την Basic δεν την ήξερα και φαίνεται να μοιάζει πολύ με VB6. Βλέπει και βάσεις; Ξέρεις; Επίσης είδα ότι βγάζει stand-alone exe κι'αυτό ενδιαφέρον, βάζει τα runtime της μέσα στο exe;
 
Γειά χαρά AA+,

Αλλάζεις την θέση που βρίσκεσαι με την θέση που βρίσκεται το μπλέ διαμάντι, αυτό είναι όλο.

H Yabasic δένει (bind) τον κώδικα μαζί με όλοκληρο τον interpreter που έχει μικρό μέγεθος, και έτσι δημιουργεί το εκτελέσιμο στα Windows.

Eίναι μια πολύ απλή Basic, την χρησιμοποιούσα παλιότερα κυρίως για εκπαιδευτικούς σκοπούς, να μαθαίνω Basic σε παιδιά, φίλους κ.τ.λ

Δεν ασχολούμαι πλέον μαζί της καθόλου, δεν υπάρχει λόγος, πάντως έχω γράψει αρκετά μικρά προγραμματάκια και παιχνίδια (sokoban,tetris κ.τλ)

Νομίζω ότι υπάρχει και στο Playstation !
 
Πίσω
Μπλουζα