Text Map Generation And Control

Lets make a simple game. There is a "box" in top right corner.
Idea is that world moves instead of player. Also few tips, how to create a random world.

``````' All coding by E.K.Virtanen.
' Public Domain
'
' Here we do some basic stuff that is needed
DECLARE SUB MakeMap () ' Sub that creates a map
DECLARE SUB ScreenPrint () ' Sub that prints stuff needed on screen
DECLARE SUB KeyPress () ' checks where you want to go
DECLARE SUB Box () ' makes a "nice" box where you travell ;D
DECLARE SUB Winner () ' And if(when) you find that money, you win
RANDOMIZE TIMER ' you know this one
DIM SHARED Map(120, 120) AS INTEGER ' Main map of game
DIM SHARED x AS INTEGER, y AS INTEGER ' and some more...

x = 30 : y = 30 ' Starting location of player
SCREEN 17: WIDTH 80, 50 ' Screen resolution.

CALL MakeMap
CALL Box
DO ' This is the main loop of "game"
CALL ScreenPrint
CALL KeyPress
LOOP

' ****** When money is finded, you come here ********
SUB Winner

CLS:Color INT(RND * 15 + 1)
PRINT "Yippee, you did it"
SLEEP
END

END SUB

' ******* from here starts SUB that creates a map **********
SUB MakeMap
' It's just a one way to do it ;)

' first we fill whole map with land
FOR i = 1 TO 120
FOR i2 = 1 TO 120 : Map(i, i2) = 46 : NEXT i2
NEXT i

' And now we create sea around of it
FOR i = 1 TO 120
w = INT(RND * 4 + 1)
FOR ii = 1 TO 14 + w ' this way we got some shapes for shores
Map(i, ii) = 219 : Map(ii, i) = 219 : Map(i, 120 - ii) = 219 : Map(120 - ii, i) = 219
NEXT ii
NEXT i

' that money to search
DO
d1 = INT(RND * 75) + 1 : d2 = INT(RND * 75) + 1 : d1 = d1 + 15: d2 = d2 + 15
Loop Until Map(d1, d2) = 46 : Map(d1, d2) = 36

' Loop to create 1100 threes on map
FOR i = 1 TO 1100
DO
d1 = INT(RND * 120) + 1 ' x location of tree
d2 = INT(RND * 120) + 1 ' y location of tree
Loop Until Map(d1, d2) = 46 ' so we get those 1100 trees there ;D
Map(d1, d2) = 5 ' and this is our tree placed somewhere in map
NEXT i
END SUB

SUB Box
' this creates a "box" where we move
CLS:COLOR 1
FOR i = 1 TO 25 ' so box size is 25x25
LOCATE i, 1: PRINT CHR\$(177):LOCATE i, 25: PRINT CHR\$(177):LOCATE 1, i: PRINT CHR\$(177):LOCATE 25, i: PRINT CHR\$(177)
NEXT i
LOCATE 25, 9: PRINT "Game Map." ' some useless text bottom of box
END SUB

SUB ScreenPrint
' Ok, this one prints map on screen (in box area)
' I use IF's here because it's good way in this kind of short script

FOR i = 1 TO 23
FOR ii = 1 TO 23
g\$ = CHR\$(46) : c = 8 ' At first everything is ground and grey
IF Map(x - 12 + i, y - 12 + ii) = 5 THEN g\$ = CHR\$(5) : c = 2 ' If tree, then g\$ = 5 and color is green
IF Map(x - 12 + i, y - 12 + ii) = 219 THEN g\$ = CHR\$(219) : c = 1 ' If water then...
IF Map(x - 12 + i, y - 12 + ii) = 36 THEN g\$ = CHR\$(36) : c = 14 ' ...and if it's money
LOCATE i + 1, ii + 1: COLOR c: PRINT g\$ ' Here we print area (on box) what you see
NEXT ii
NEXT i

COLOR 11:LOCATE 13, 13: PRINT CHR\$(2) ' Here we print you in middle of map

END SUB

SUB KeyPress ' This checks what you press

DO
i\$ = INKEY\$
LOOP UNTIL i\$ <> ""
IF i\$ = CHR\$(55) OR i\$ = CHR\$(0) + CHR\$(71) THEN x = x - 1: y = y - 1
IF i\$ = CHR\$(51) OR i\$ = CHR\$(0) + CHR\$(81) THEN x = x + 1: y = y + 1
IF i\$ = CHR\$(49) OR i\$ = CHR\$(0) + CHR\$(79) THEN x = x + 1: y = y - 1
IF i\$ = CHR\$(57) OR i\$ = CHR\$(0) + CHR\$(73) THEN x = x - 1: y = y + 1
IF i\$ = CHR\$(56) OR i\$ = CHR\$(0) + CHR\$(72) THEN x = x - 1
IF i\$ = CHR\$(52) OR i\$ = CHR\$(0) + CHR\$(75) THEN y = y - 1
IF i\$ = CHR\$(50) OR i\$ = CHR\$(0) + CHR\$(80) THEN x = x + 1
IF i\$ = CHR\$(54) OR i\$ = CHR\$(0) + CHR\$(77) THEN y = y + 1
IF i\$ = CHR\$(27) OR Map(x,y) = 219 THEN END ' if ESC pressed then we end
IF Map(x,y) = 36 THEN CALL Winner ' if Money finded, we move on at SUB Winner
END SUB```
```