10 rem ***********************************************************************
15 rem * *
20 rem * Tank game, based on my 1978 original [sam] *
30 rem * *
35 rem * Tank, sometimes referred to as "fox and hounds", consists of a *
36 rem * player piece pitted against a number of enemy pieces that advance *
37 rem * mindlessly in his direction. *
38 rem * *
39 rem ***********************************************************************
40 print
41 print "******************************************************************************"
42 print
50 print "TANK GAME"
51 print
52 print "******************************************************************************"
60 print
61 print "You are playing against several tanks on a field. ""*"" marks the edges of the"
62 print "field, ""+"" mark enemy tanks, ""@"" marks your position, and ""#"" mark the"
63 print "position of tank traps. You can move in any direction on your turn, including"
64 print "the diagonals. After you move, each of the enemy tanks will also move, in your"
65 print "direction. If they hit you, you lose. If they hit a tank trap, they are out"
66 print "of the game. If all the enemy tanks die in this fashion, you win the game."
67 xlen% = 30: rem estabish playing field demensions
68 ylen% = 20
70 numtanks% = xlen%*ylen%*0.05: rem find %2 of board as tanks
72 numtraps% = xlen%*ylen%*0.07: rem find %10 of board as traps
75 dim board%(xlen%, ylen%): rem playing field
80 rem establish playing field tolkens
90 space% = 1: rem empty space
100 fence% = 2: rem border
110 trap% = 3: rem tank trap
120 tank% = 4: rem enemy tank
125 tankm% = 5: rem moved enemy tank
130 player% = 6: rem player tank
140 rem set up the board
150 for x% = 1 to xlen%: for y% = 1 to ylen%: board%(x%, y%) = space%: next y%: next x%
160 for x% = 1 to xlen%: board%(x%, 1) = fence%: next x%
170 for x% = 1 to xlen%: board%(x%, ylen%) = fence%: next x%
180 for y% = 1 to ylen%: board%(1, y%) = fence%: next y%
190 for y% = 1 to ylen%: board%(xlen%, y%) = fence%: next y%
200 rem place tank traps at random
210 for c% = 1 to numtraps%
220 repeat: x% = rnd(1)*xlen%+1: y% = rnd(1)*ylen%+1: until board%(x%, y%) = space%
230 board%(x%, y%) = trap%
240 next c%
250 rem place enemy tanks at random
260 for c% = 1 to numtanks%
270 repeat: x% = rnd(1)*xlen%+1: y% = rnd(1)*ylen%+1: until board%(x%, y%) = space%
280 board%(x%, y%) = tank%
290 next c%
300 rem place player
310 repeat: x% = rnd(1)*xlen%+1: y% = rnd(1)*ylen%+1: until board%(x%, y%) = space%
320 board%(x%, y%) = player%: playerx% = x%: playery% = y%
330 rem print out board
340 print
350 for y% = 1 to ylen%
360 for x% = 1 to xlen%: print mid$(" *#+?@", board%(x%, y%), 1);: next x%
370 print
380 next y%
390 print
400 rem
410 rem player move
420 rem
421 print "8 1 2"
422 print "7 0 3"
423 print "6 5 4 Where 0 means stay put, 2 means up and right, etc."
424 print
430 input "move: ", a%
450 if (a% < 0) or (a% > 8) then goto 421
460 rem find potential new player location
470 pplayerx% = playerx%
480 pplayery% = playery%
490 if (a% = 8) or (a% = 1) or (a% = 2) then pplayery% = pplayery%-1: rem move up
500 if (a% = 6) or (a% = 5) or (a% = 4) then pplayery% = pplayery%+1: rem move down
510 if (a% = 8) or (a% = 7) or (a% = 6) then pplayerx% = pplayerx%-1: rem move left
520 if (a% = 2) or (a% = 3) or (a% = 4) then pplayerx% = pplayerx%+1: rem move right
525 rem check occupied
530 if (board%(pplayerx%, pplayery%) <> space%) and (board%(pplayerx%, pplayery%) <> player%) then goto 430
540 board%(playerx%, playery%) = space%: rem erase old position
550 playerx% = pplayerx%: rem set new position
560 playery% = pplayery%
570 board%(playerx%, playery%) = player%
580 rem
590 rem enemy move
600 rem
610 for x% = 1 to xlen%
620 for y% = 1 to ylen%
630 if board%(x%, y%) <> tank% then goto 780
640 ptankx% = x%: rem find potential tank location
650 ptanky% = y%
660 if playerx% < ptankx% then ptankx% = ptankx%-1
670 if playerx% > ptankx% then ptankx% = ptankx%+1
680 if playery% < ptanky% then ptanky% = ptanky%-1
690 if playery% > ptanky% then ptanky% = ptanky%+1
700 if board%(ptankx%, ptanky%) <> player% then goto 750
710 print "Killed by enemy tank !!!"
720 input "Play again (Yes/No)? ", a$
730 if left$(a$, 1) = "y" then goto 150
740 stop
750 if (board%(ptankx%, ptanky%) <> space%) and (board%(ptankx%, ptanky%) <> trap%) then goto 780
760 board%(x%, y%) = space%: rem erase old position
762 rem tank is dead
764 if board%(ptankx%, ptanky%) = trap% then goto 780
770 board%(ptankx%, ptanky%) = tankm%: rem place new
780 next y%
790 next x%
800 rem now convert moved tanks to real tanks
810 for x% = 1 to xlen%: for y% = 1 to ylen%
820 if board%(x%, y%) = tankm% then board%(x%, y%) = tank%
830 next y%: next x%
835 rem count remaining tanks
836 tanks% = 0
837 for x% = 1 to xlen%: for y% = 1 to ylen%
838 if board%(x%, y%) = tank% then tanks% = tanks%+1
839 next y%: next x%
840 if tanks% > 0 then goto 340: rem go print board
850 print "You killed them all !!!"
860 input "Play again (Yes/No)? ", a$
870 if left$(a$, 1) = "y" then goto 150
880 end