mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-08 11:10:16 +00:00
These tests use a variety of sample code (with some of the larger files removed, so they are not complete!) and verifies that they all compile successfully.
1562 lines
41 KiB
QBasic
1562 lines
41 KiB
QBasic
'*****************************************************************************
|
|
'
|
|
'--------------------------- R A T T L E R . B A S ---------------------------
|
|
'
|
|
'---------------- Copyright (C) 2003 by Bob Seguin (Freeware) ----------------
|
|
'
|
|
'------------------------ Email: BOBSEG@sympatico.ca -------------------------
|
|
'
|
|
'--------------------- RATTLER is a graphical version of ---------------------
|
|
'--------------------- the classic QBasic game, NIBBLES ----------------------
|
|
'
|
|
'*****************************************************************************
|
|
|
|
DEFINT A-Z
|
|
|
|
DECLARE SUB DrawSCREEN ()
|
|
DECLARE SUB Intro ()
|
|
DECLARE SUB Instructions ()
|
|
DECLARE SUB InitGAME ()
|
|
DECLARE SUB InitLEVEL ()
|
|
DECLARE SUB PauseMENU (Item)
|
|
DECLARE SUB PlayGAME ()
|
|
DECLARE SUB TopTEN ()
|
|
DECLARE SUB SpeedSET ()
|
|
DECLARE SUB PutSPRITE (Col, Row, Index)
|
|
DECLARE SUB SetSTONES (Level)
|
|
DECLARE SUB PrintNUMS (Item, Value)
|
|
DECLARE SUB SetPALETTE ()
|
|
DECLARE SUB Wipe ()
|
|
DECLARE FUNCTION EndGAME ()
|
|
|
|
DIM SHARED SnakePIT(1 TO 32, 1 TO 24)
|
|
DIM SHARED WipeBOX(29, 21)
|
|
|
|
REDIM SHARED SpriteBOX(8000)
|
|
REDIM SHARED NumBOX(400)
|
|
REDIM SHARED TTBox(480)
|
|
REDIM SHARED BigBOX(32000)
|
|
|
|
'The following constants are used to determine sprite array indexes
|
|
CONST Head = 0
|
|
CONST Neck = 500
|
|
CONST Shoulders = 1000
|
|
CONST Body = 1500
|
|
CONST Tail = 2000
|
|
CONST TailEND = 2500
|
|
CONST Rattle = 3000
|
|
|
|
CONST Mouse = 6000
|
|
CONST Frog = 6500
|
|
CONST Stone = 7000
|
|
CONST Blank = 7500
|
|
|
|
CONST TURN = 3000
|
|
|
|
CONST Left = 0
|
|
CONST Up = 125
|
|
CONST Right = 250
|
|
CONST Down = 375
|
|
|
|
CONST DL = 0
|
|
CONST DR = 125
|
|
CONST UR = 250
|
|
CONST UL = 375
|
|
CONST RD = 375
|
|
CONST LD = 250
|
|
CONST LU = 125
|
|
CONST RU = 0
|
|
|
|
TYPE DiamondBACK
|
|
Row AS INTEGER
|
|
Col AS INTEGER
|
|
BodyPART AS INTEGER
|
|
TURN AS INTEGER
|
|
WhichWAY AS INTEGER
|
|
RattleDIR AS INTEGER
|
|
END TYPE
|
|
DIM SHARED Rattler(72) AS DiamondBACK
|
|
|
|
TYPE ScoreTYPE
|
|
PlayerNAME AS STRING * 20
|
|
PlayDATE AS STRING * 10
|
|
PlayerSCORE AS LONG
|
|
END TYPE
|
|
DIM SHARED ScoreDATA(10) AS ScoreTYPE
|
|
|
|
DIM SHARED SnakeLENGTH
|
|
DIM SHARED SetSPEED
|
|
DIM SHARED Speed
|
|
DIM SHARED SpeedLEVEL
|
|
DIM SHARED Level
|
|
DIM SHARED Lives
|
|
DIM SHARED Score
|
|
DIM SHARED CrittersLEFT
|
|
|
|
OPEN "rattler.top" FOR APPEND AS #1
|
|
CLOSE #1
|
|
|
|
OPEN "rattler.top" FOR INPUT AS #1
|
|
DO WHILE NOT EOF(1)
|
|
INPUT #1, ScoreDATA(n).PlayerNAME
|
|
INPUT #1, ScoreDATA(n).PlayDATE
|
|
INPUT #1, ScoreDATA(n).PlayerSCORE
|
|
n = n + 1
|
|
LOOP
|
|
CLOSE #1
|
|
|
|
RANDOMIZE TIMER
|
|
|
|
SCREEN 12
|
|
GOSUB DrawSPRITES
|
|
DrawSCREEN
|
|
|
|
Intro
|
|
|
|
DO
|
|
PlayGAME
|
|
LOOP
|
|
|
|
END
|
|
|
|
'------------------------- SUBROUTINE SECTION BEGINS -------------------------
|
|
|
|
DrawSPRITES:
|
|
'Creates images from compressed data
|
|
|
|
'Set all attributes to black (REM out to view the process)
|
|
FOR n = 1 TO 15
|
|
OUT &H3C8, n
|
|
OUT &H3C9, 0
|
|
OUT &H3C9, 0
|
|
OUT &H3C9, 0
|
|
NEXT n
|
|
|
|
OUT &H3C8, 9
|
|
OUT &H3C9, 52
|
|
OUT &H3C9, 42
|
|
OUT &H3C9, 32
|
|
LOCATE 12, 32: COLOR 9
|
|
PRINT "ONE MOMENT PLEASE..."
|
|
|
|
MaxWIDTH = 19
|
|
MaxDEPTH = 279
|
|
x = 0: y = 0
|
|
|
|
DO
|
|
READ Count, Colr
|
|
FOR Reps = 1 TO Count
|
|
PSET (x, y), Colr
|
|
x = x + 1
|
|
IF x > MaxWIDTH THEN
|
|
x = 0
|
|
y = y + 1
|
|
END IF
|
|
NEXT Reps
|
|
LOOP UNTIL y > MaxDEPTH
|
|
|
|
'Create directional sets
|
|
Index = 0
|
|
FOR y = 0 TO 260 STEP 20
|
|
GET (0, y)-(19, y + 19), SpriteBOX(Index)
|
|
GOSUB Poses
|
|
Index = Index + 500
|
|
NEXT y
|
|
CLS
|
|
PALETTE 9, 0
|
|
'Create stone block and erasing sprite(s)
|
|
LINE (0, 0)-(19, 19), 6, BF
|
|
FOR Reps = 1 TO 240
|
|
x = FIX(RND * 20) + 1
|
|
y = FIX(RND * 20) + 1
|
|
PSET (x, y), 7
|
|
PSET (x + 1, y + 1), 15
|
|
NEXT Reps
|
|
LINE (0, 0)-(19, 19), 6, B
|
|
LINE (1, 1)-(18, 18), 13, B
|
|
LINE (1, 1)-(1, 18), 15
|
|
LINE (1, 1)-(18, 1), 15
|
|
GET (0, 0)-(19, 19), SpriteBOX(Stone) 'stone tile
|
|
LINE (0, 0)-(19, 19), 8, BF
|
|
GET (0, 0)-(19, 19), SpriteBOX(Blank + Left) 'erasing tile
|
|
GET (0, 0)-(19, 19), SpriteBOX(Blank + Up) 'erasing tile
|
|
GET (0, 0)-(19, 19), SpriteBOX(Blank + Right) 'erasing tile
|
|
GET (0, 0)-(19, 19), SpriteBOX(Blank + Down) 'erasing tile
|
|
CLS
|
|
COLOR 9
|
|
LOCATE 9, 31
|
|
PRINT "RATTLER TOP-TEN LIST"
|
|
GET (240, 130)-(398, 140), TTBox
|
|
LOCATE 9, 31
|
|
PRINT SPACE$(20)
|
|
|
|
'GET numbers
|
|
FOR n = 0 TO 9
|
|
LOCATE 10, 10
|
|
IF n = 0 THEN PRINT "O" ELSE PRINT LTRIM$(STR$(n))
|
|
FOR x = 72 TO 80
|
|
FOR y = 144 TO 160
|
|
IF POINT(x, y) = 0 THEN PSET (x, y), 15 ELSE PSET (x, y), 4
|
|
NEXT y
|
|
NEXT x
|
|
GET (72, 144)-(79, 156), NumBOX(NumDEX)
|
|
NumDEX = NumDEX + 40
|
|
NEXT n
|
|
LINE (72, 144)-(80, 160), 0, BF
|
|
RETURN
|
|
|
|
Poses:
|
|
'Draws/GETs the other 3 directional poses from each sprite
|
|
FOR i = Index TO Index + 250 STEP 125
|
|
PUT (100, 100), SpriteBOX(i), PSET
|
|
FOR Px = 100 TO 119
|
|
FOR Py = 100 TO 119
|
|
PSET (219 - Py, Px - 20), POINT(Px, Py)
|
|
NEXT Py
|
|
NEXT Px
|
|
GET (100, 80)-(119, 99), SpriteBOX(i + 125)
|
|
NEXT i
|
|
RETURN
|
|
|
|
SpriteVALUES:
|
|
DATA 47,8,2,12,2,0,16,8,3,5,1,12,1,13,1,12,1,13,1,12,8,8,1,0
|
|
DATA 1,12,1,15,1,8,1,15,3,5,1,14,3,1,1,14,1,13,5,8,2,5,1,12
|
|
DATA 1,5,4,12,3,3,1,5,1,12,1,3,1,12,1,14,1,13,2,8,1,3,14,5
|
|
DATA 1,3,1,5,1,1,1,13,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,3,5,1,12,1,5,1,12,2,3,1,1,22,5,1,12,1,5
|
|
DATA 1,12,1,3,1,12,1,3,1,12,1,3,1,12,1,3,1,12,1,15,1,12,1,3
|
|
DATA 1,12,1,3,1,12,1,3,2,5,1,12,1,5,1,12,1,3,1,12,1,3,1,12
|
|
DATA 1,3,1,12,1,3,1,12,1,15,1,12,1,3,1,12,1,3,1,12,1,3,17,5
|
|
DATA 1,3,2,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,3,5,1,12,1,5,1,12,2,3,1,1,1,8,1,3,14,5,1,3,1,14
|
|
DATA 1,1,1,13,2,8,2,5,1,12,1,5,4,12,2,3,1,1,1,5,1,12,1,1
|
|
DATA 1,12,1,14,1,13,4,8,1,0,1,12,1,15,1,8,1,15,3,5,2,14,2,1
|
|
DATA 1,14,1,13,10,8,2,5,1,14,1,12,1,13,1,12,1,13,1,12,12,8,2,12
|
|
DATA 2,0,169,8,1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,1,1,13,1,12
|
|
DATA 1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,1,1,13,1,12,1,1,1,14
|
|
DATA 1,1,1,14,1,12,1,14,1,12,1,14,1,1,1,14,1,1,1,14,1,1,1,14
|
|
DATA 1,12,1,14,1,12,1,14,1,1,1,14,2,3,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,3,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5,3,3,1,12
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,1,5,2,3,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 2,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5,3,3,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,3,1,1,1,14,1,1,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,1,1,14,1,1,1,14,1,1,1,14,1,12,1,14,1,12,1,14,1,1
|
|
DATA 1,14,1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,1,1,13,1,12,1,13
|
|
DATA 1,12,1,13,1,1,1,13,1,12,1,13,1,1,1,13,1,12,220,8,1,12,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,12,1,13,1,14,1,12,1,14,1,1,1,14,1,12
|
|
DATA 1,14,1,1,1,14,1,12,1,14,1,12,1,14,1,1,1,14,1,12,1,14,1,1
|
|
DATA 1,14,2,12,1,14,1,3,1,14,1,12,1,14,1,12,1,14,1,3,1,14,1,12
|
|
DATA 1,14,1,3,1,14,1,12,1,14,1,12,1,14,1,3,1,14,1,5,1,3,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,3,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,3,1,15,1,5,1,12,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,15
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,2,5,1,3,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,3,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,3,1,12,1,14,1,3,1,14,1,12,1,14,1,12,1,14
|
|
DATA 1,3,1,14,1,12,1,14,1,3,1,14,1,12,1,14,1,12,1,14,1,3,2,14
|
|
DATA 1,12,1,14,1,1,1,14,1,12,1,14,1,1,1,14,1,12,1,14,1,12,1,14
|
|
DATA 1,1,1,14,1,12,1,14,1,1,1,14,2,12,1,13,1,12,1,13,1,12,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13,1,12,1,13
|
|
DATA 1,12,1,13,180,8,1,13,1,12,1,13,1,12,1,13,1,1,1,13,1,12,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,12,1,13,1,1,1,13,1,12,1,13,2,12,1,14
|
|
DATA 1,12,1,14,1,1,1,5,1,1,1,14,1,12,1,14,1,12,1,14,1,12,1,14
|
|
DATA 1,1,1,5,1,1,1,14,1,12,2,14,1,12,1,14,1,1,1,14,1,12,1,14
|
|
DATA 1,1,1,14,1,12,1,14,1,12,1,14,1,1,1,14,1,12,1,14,1,1,1,14
|
|
DATA 2,12,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,12,1,5
|
|
DATA 1,3,1,5,1,12,1,5,1,12,1,5,1,3,2,5,1,3,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,3,1,5,1,3,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,3,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,15
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,15,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,2,5,1,3,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,3,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,3,1,12,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,3,1,5
|
|
DATA 1,12,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,14,1,12
|
|
DATA 1,14,1,1,1,14,1,12,1,14,1,1,1,14,1,12,1,14,1,12,1,14,1,1
|
|
DATA 1,14,1,12,1,14,1,1,1,14,2,12,1,14,1,12,1,14,1,1,1,14,1,1
|
|
DATA 1,14,1,12,1,14,1,12,1,14,1,12,1,14,1,1,1,14,1,1,1,14,1,12
|
|
DATA 1,14,1,13,1,12,1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,12,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,12,220,8,1,12,1,13
|
|
DATA 1,1,1,13,1,12,1,13,1,12,1,13,1,1,1,13,1,12,1,13,1,1,1,13
|
|
DATA 1,12,1,13,1,12,1,13,1,1,1,13,1,14,1,1,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,12,1,14,1,1,1,14,1,1,1,14,1,12,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,1,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,15,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,15,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,12,1,5,1,14,1,1,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,12,1,14,1,3,1,14,1,3,1,14,1,12,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,1,1,12,1,13,1,1,1,13,1,12,1,13,1,12,1,13,1,1,1,13
|
|
DATA 1,12,1,13,1,1,1,13,1,12,1,13,1,12,1,13,1,1,1,13,300,8,1,12
|
|
DATA 1,13,1,12,1,13,1,3,1,13,1,3,1,13,1,3,1,13,1,12,1,13,1,12
|
|
DATA 1,13,1,3,1,13,1,3,1,13,1,3,1,13,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,3,1,5,1,12,2,3,1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,12
|
|
DATA 2,3,1,5,1,12,1,5,1,12,1,5,1,3,1,5,1,12,2,3,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,3,1,5,1,12,2,3,1,12,1,13,1,12,1,13,1,3
|
|
DATA 1,13,1,3,1,13,1,3,1,13,1,12,1,13,1,12,1,13,1,3,1,13,1,3
|
|
DATA 1,13,1,3,1,13,286,8,2,13,1,8,2,13,1,8,2,13,1,8,2,13,8,8
|
|
DATA 1,5,2,1,1,14,2,1,1,14,2,1,1,14,2,1,1,14,1,13,1,8,1,13
|
|
DATA 1,3,1,13,1,3,1,13,1,1,2,3,1,14,2,3,1,14,2,3,1,14,2,3
|
|
DATA 1,14,1,3,1,13,1,3,1,5,1,12,5,3,1,5,2,3,1,5,2,3,1,5
|
|
DATA 2,3,1,5,3,3,1,5,1,12,5,3,1,5,2,3,1,5,2,3,1,5,2,3
|
|
DATA 1,5,2,3,1,13,1,3,1,13,1,3,1,13,1,1,2,3,1,14,2,3,1,14
|
|
DATA 2,3,1,14,2,3,1,14,1,3,1,13,5,8,1,5,2,1,1,12,2,1,1,12
|
|
DATA 2,1,1,12,2,1,1,14,1,13,7,8,2,13,1,8,2,13,1,8,2,13,1,8
|
|
DATA 2,13,129,8,1,12,1,5,1,3,2,5,1,3,1,5,1,12,12,8,1,13,1,1
|
|
DATA 1,5,2,12,1,5,1,1,1,13,12,8,1,12,1,5,1,12,2,5,1,12,1,5
|
|
DATA 1,12,12,8,1,13,1,12,1,5,2,12,1,5,1,12,1,13,12,8,1,12,1,5
|
|
DATA 1,12,2,5,1,12,1,5,1,12,11,8,1,13,1,5,1,3,1,5,2,12,1,5
|
|
DATA 1,1,1,13,6,8,1,13,1,12,1,13,1,12,1,13,1,1,1,5,1,15,1,12
|
|
DATA 2,5,1,3,1,5,1,12,6,8,1,1,1,5,1,1,1,5,1,12,1,5,1,12
|
|
DATA 1,5,1,15,1,5,1,3,1,5,1,1,1,13,6,8,2,3,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,3,2,5,1,13,7,8,1,12,1,15,1,12,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,12,2,5,1,1,1,12,7,8,1,5,1,15,1,12
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,1,1,13,8,8,2,3,1,5
|
|
DATA 1,12,1,5,1,12,1,5,1,12,1,5,1,3,1,12,9,8,1,1,1,5,1,1
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,1,1,13,10,8,1,13,1,12,1,13,1,12
|
|
DATA 1,13,1,12,1,13,1,12,137,8,1,13,1,12,1,14,1,3,2,5,1,3,1,14
|
|
DATA 1,12,1,13,10,8,1,12,1,14,1,3,1,5,2,12,1,5,1,3,1,14,1,12
|
|
DATA 10,8,1,13,1,1,1,5,1,12,2,5,1,12,1,5,1,1,1,13,10,8,1,12
|
|
DATA 1,3,1,12,1,5,2,12,1,5,1,12,1,5,1,12,9,8,1,13,1,14,1,3
|
|
DATA 2,12,2,5,1,12,1,5,1,14,1,13,5,8,1,12,1,13,1,12,1,13,1,12
|
|
DATA 1,5,1,3,1,5,1,12,1,5,1,12,2,5,1,1,1,12,5,8,1,14,1,12
|
|
DATA 1,14,1,1,1,3,1,12,1,5,1,15,1,5,1,12,1,5,1,12,1,3,1,14
|
|
DATA 1,13,5,8,1,12,1,14,1,1,1,5,1,12,2,3,1,5,1,15,2,5,1,3
|
|
DATA 1,14,1,13,6,8,1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 2,3,1,14,2,12,6,8,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,3,1,12,1,14,1,12,1,13,7,8,1,15,1,5,1,12,1,5,1,12,1,5
|
|
DATA 1,12,1,5,1,3,1,14,1,12,1,13,1,12,7,8,1,5,1,3,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,12,2,1,1,13,1,12,8,8,1,12,1,14,1,1,1,14
|
|
DATA 1,12,1,14,1,12,1,14,1,1,1,13,1,12,9,8,1,14,1,12,1,14,1,1
|
|
DATA 1,14,1,12,1,14,1,13,1,12,11,8,1,12,1,13,1,12,1,13,1,12,1,13
|
|
DATA 1,12,117,8,1,13,1,12,1,5,1,3,1,5,2,12,1,5,1,3,1,14,1,12
|
|
DATA 1,13,8,8,1,12,1,14,1,3,1,5,1,12,2,5,1,12,1,5,1,3,1,14
|
|
DATA 1,12,8,8,1,13,2,3,1,12,1,5,2,12,1,5,1,12,1,5,1,3,1,13
|
|
DATA 7,8,1,13,1,14,1,3,1,12,1,5,1,12,2,5,1,12,1,5,1,12,1,5
|
|
DATA 1,3,4,8,1,12,1,13,1,12,1,14,1,12,2,3,1,12,1,5,2,12,1,5
|
|
DATA 1,12,1,14,1,3,1,13,4,8,1,14,1,12,3,3,1,12,1,3,1,5,1,12
|
|
DATA 2,5,1,12,1,5,1,3,1,14,1,12,4,8,1,12,1,5,1,3,1,14,1,12
|
|
DATA 4,3,2,12,1,5,1,3,1,5,1,12,1,13,4,8,1,14,1,3,1,5,1,12
|
|
DATA 1,5,1,12,1,5,1,12,4,3,1,5,1,12,1,14,1,12,4,8,2,3,1,12
|
|
DATA 1,5,1,12,1,5,1,12,1,5,1,12,1,3,3,12,1,14,1,12,5,8,1,5
|
|
DATA 1,3,1,5,1,12,1,5,2,12,2,5,1,3,1,12,2,14,1,12,1,13,5,8
|
|
DATA 1,5,1,3,1,5,1,12,1,5,1,12,1,5,1,12,1,14,1,3,1,14,2,12
|
|
DATA 1,14,6,8,1,3,1,5,1,3,1,5,1,12,1,5,1,12,1,14,1,12,1,3
|
|
DATA 1,12,2,14,1,12,6,8,1,5,1,12,1,5,1,3,1,14,1,12,1,14,1,12
|
|
DATA 1,14,1,3,1,14,1,12,1,13,7,8,1,12,1,14,1,12,1,5,3,3,1,5
|
|
DATA 1,3,1,5,1,12,1,13,8,8,1,14,1,12,1,14,1,12,1,14,1,12,1,14
|
|
DATA 1,12,1,13,1,12,1,0,9,8,1,12,1,13,1,12,1,13,1,12,1,13,1,12
|
|
DATA 1,13,1,0,98,8,1,13,1,3,2,5,1,3,1,13,14,8,1,3,1,14,2,12
|
|
DATA 1,5,1,3,14,8,1,13,1,12,2,5,1,12,1,13,14,8,1,12,1,14,2,12
|
|
DATA 1,14,1,12,14,8,1,13,1,12,2,5,1,12,1,13,14,8,1,3,1,14,2,12
|
|
DATA 1,14,1,3,13,8,1,13,1,14,1,12,2,5,1,12,1,5,7,8,1,12,1,13
|
|
DATA 1,3,1,13,1,12,1,3,1,12,1,15,1,12,1,5,1,12,1,3,1,13,7,8
|
|
DATA 1,14,1,3,1,14,1,12,1,14,1,12,1,3,1,12,1,15,1,12,1,3,1,5
|
|
DATA 8,8,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12,1,5,1,12
|
|
DATA 1,13,8,8,1,15,1,5,1,12,1,5,1,12,1,5,1,12,1,3,1,12,1,14
|
|
DATA 1,13,9,8,1,14,1,3,1,14,1,12,1,14,1,12,1,14,1,12,1,13,1,3
|
|
DATA 10,8,1,12,1,13,1,3,1,13,1,12,1,3,1,12,1,13,160,8,1,1,2,3
|
|
DATA 1,1,16,8,1,1,2,3,1,1,16,8,1,13,2,12,1,13,16,8,1,3,2,5
|
|
DATA 1,3,16,8,1,13,2,3,1,13,16,8,1,3,2,5,1,3,15,8,1,13,1,5
|
|
DATA 1,15,1,12,1,13,14,8,1,13,1,5,1,12,2,5,1,0,8,8,1,12,1,13
|
|
DATA 1,12,1,13,1,3,1,13,3,3,2,12,9,8,1,3,1,12,1,3,1,12,1,3
|
|
DATA 1,15,1,5,1,12,2,3,1,0,9,8,1,5,1,12,1,5,1,12,1,5,1,15
|
|
DATA 1,5,1,12,1,3,11,8,1,12,1,13,1,12,1,13,1,3,1,13,1,3,1,0
|
|
DATA 257,8,2,6,3,8,2,6,1,7,7,8,1,13,1,8,1,13,1,8,3,6,1,7
|
|
DATA 3,8,2,7,1,13,7,8,1,6,2,8,2,6,2,7,1,8,1,0,3,6,1,7
|
|
DATA 8,8,2,7,1,15,2,7,1,8,1,0,5,6,1,7,6,8,2,7,1,8,1,15
|
|
DATA 2,6,1,7,7,6,1,7,4,8,1,6,4,7,2,6,1,7,7,6,1,7,2,6
|
|
DATA 2,8,1,6,4,7,2,6,1,7,7,6,1,7,1,6,1,8,1,6,2,8,2,7
|
|
DATA 1,8,1,15,2,6,1,7,7,6,1,7,3,8,1,6,2,8,2,7,1,15,2,7
|
|
DATA 1,8,1,0,5,6,1,7,4,8,1,6,1,8,1,6,2,8,2,6,2,7,1,8
|
|
DATA 1,0,3,6,1,7,4,8,1,6,1,8,1,13,1,8,1,13,1,8,3,6,1,7
|
|
DATA 3,8,2,7,1,13,3,8,1,13,7,8,2,6,3,8,2,6,1,7,5,8,1,13
|
|
DATA 138,8,1,10,8,8,1,10,7,8,1,2,1,8,1,10,8,8,1,10,2,2,5,8
|
|
DATA 2,11,1,2,1,8,1,2,10,8,1,2,2,8,1,10,2,2,1,8,1,2,9,8
|
|
DATA 1,10,1,2,1,8,1,2,1,8,4,2,10,8,1,10,1,15,2,2,1,11,2,2
|
|
DATA 2,11,2,2,8,8,1,10,1,8,1,15,1,2,2,11,2,2,2,11,3,2,6,8
|
|
DATA 1,10,6,2,1,11,3,2,1,11,2,2,6,8,1,10,6,2,1,11,3,2,1,11
|
|
DATA 2,2,7,8,1,10,1,8,1,15,1,2,2,11,2,2,2,11,3,2,8,8,1,10
|
|
DATA 1,15,2,2,1,11,2,2,2,11,2,2,10,8,1,10,1,2,1,8,1,2,1,8
|
|
DATA 4,2,14,8,1,2,2,8,1,10,2,2,1,8,1,2,9,8,1,10,2,2,5,8,2
|
|
DATA 11,1,2,1,8,1,2,8,8,1,10,7,8,1,2,1,8,1,10,20,8,1,10,42,8
|
|
|
|
PaletteVALUES:
|
|
DATA 18,18,18, 50,44,36, 0,42,0, 56,50,42
|
|
DATA 63,0,0, 51,43,30, 48,48,52, 42,42,42
|
|
DATA 0,14,0, 54,24,63, 21,63,21, 0,30,0
|
|
DATA 34,22,21, 32,32,32, 45,37,24, 63,63,63
|
|
|
|
SUB DrawSCREEN
|
|
|
|
FOR Col = 1 TO 32
|
|
PutSPRITE Col, 1, Stone
|
|
PutSPRITE Col, 24, Stone
|
|
NEXT Col
|
|
FOR Row = 1 TO 24
|
|
PutSPRITE 1, Row, Stone
|
|
PutSPRITE 32, Row, Stone
|
|
NEXT Row
|
|
|
|
COLOR 4
|
|
LOCATE 3, 5: PRINT "LIVES:"
|
|
LOCATE 3, 34: PRINT "R A T T L E R"
|
|
LOCATE 3, 65: PRINT "SCORE:"
|
|
FOR x = 254 TO 376
|
|
FOR y = 32 TO 45
|
|
PSET (x + 4, y - 30), 15
|
|
NEXT y
|
|
NEXT x
|
|
FOR x = 254 TO 376
|
|
FOR y = 32 TO 45
|
|
IF POINT(x, y) = 4 THEN
|
|
PSET (x + 6, y - 29), 0
|
|
PSET (x + 5, y - 30), 5
|
|
END IF
|
|
PSET (x, y), 0
|
|
NEXT y
|
|
NEXT x
|
|
LINE (258, 1)-(378, 1), 0
|
|
LINE (258, 1)-(258, 15), 0
|
|
FOR x = 26 TO 99
|
|
FOR y = 32 TO 45
|
|
PSET (x + 4, y - 30), 15
|
|
NEXT y
|
|
NEXT x
|
|
FOR x = 26 TO 99
|
|
FOR y = 32 TO 45
|
|
IF POINT(x, y) = 4 THEN PSET (x + 6, y - 30), 0
|
|
PSET (x, y), 0
|
|
NEXT y
|
|
NEXT x
|
|
LINE (28, 1)-(103, 1), 0
|
|
LINE (28, 1)-(28, 15), 0
|
|
FOR x = 504 TO 607
|
|
FOR y = 32 TO 45
|
|
IF POINT(x, y) = 4 THEN
|
|
PSET (x + 4, y - 30), 0
|
|
ELSE
|
|
PSET (x + 4, y - 30), 15
|
|
END IF
|
|
PSET (x, y), 0
|
|
NEXT y
|
|
NEXT x
|
|
LINE (508, 1)-(611, 1), 0
|
|
LINE (508, 1)-(508, 15), 0
|
|
LOCATE 28, 5: PRINT "LEVEL:"
|
|
FOR x = 28 TO 98
|
|
FOR y = 432 TO 445
|
|
IF POINT(x, y) = 4 THEN
|
|
PSET (x, y + 32), 0
|
|
ELSE
|
|
PSET (x, y + 32), 15
|
|
END IF
|
|
PSET (x, y), 0
|
|
NEXT y
|
|
NEXT x
|
|
LINE (28, 463)-(98, 463), 0
|
|
LINE (28, 463)-(28, 476), 0
|
|
LOCATE 28, 70: PRINT "SPEED:"
|
|
FOR x = 548 TO 612
|
|
FOR y = 432 TO 445
|
|
IF POINT(x, y) = 4 THEN
|
|
PSET (x, y + 32), 0
|
|
ELSE
|
|
PSET (x, y + 32), 15
|
|
END IF
|
|
PSET (x, y), 0
|
|
NEXT y
|
|
NEXT x
|
|
LINE (548, 463)-(612, 463), 0
|
|
LINE (548, 463)-(548, 476), 0
|
|
|
|
LINE (267, 463)-(371, 476), 15, BF
|
|
LINE (267, 463)-(371, 463), 0
|
|
LINE (267, 463)-(267, 476), 0
|
|
LINE (20, 20)-(619, 459), 8, BF
|
|
|
|
END SUB
|
|
|
|
FUNCTION EndGAME
|
|
|
|
IF Lives = 0 THEN
|
|
RemainingLIVES& = 1
|
|
ELSE
|
|
RemainingLIVES& = Lives
|
|
END IF
|
|
FinalSCORE& = Score * RemainingLIVES& * 10&
|
|
|
|
GET (166, 152)-(472, 327), BigBOX
|
|
LINE (166, 152)-(472, 327), 0, BF
|
|
LINE (168, 154)-(470, 325), 8, B
|
|
LINE (170, 156)-(468, 323), 7, B
|
|
LINE (172, 158)-(466, 321), 6, B
|
|
|
|
IF FinalSCORE& > ScoreDATA(9).PlayerSCORE THEN
|
|
COLOR 4
|
|
LOCATE 12, 31
|
|
PRINT "- G A M E O V E R -"
|
|
COLOR 3
|
|
IF Lives = 0 THEN
|
|
LOCATE 13, 30
|
|
PRINT "(Sorry, no more lives)"
|
|
ELSE
|
|
LOCATE 13, 33
|
|
PRINT "Congratulations!"
|
|
END IF
|
|
|
|
Hundred$ = LTRIM$(STR$(FinalSCORE& MOD 1000))
|
|
IF FinalSCORE& >= 1000 THEN
|
|
IF VAL(Hundred$) = 0 THEN Hundred$ = "000"
|
|
IF VAL(Hundred$) < 100 THEN Hundred$ = "0" + Hundred$
|
|
Thousand$ = LTRIM$(STR$(FinalSCORE& \ 1000))
|
|
FinalSCORE$ = Thousand$ + "," + Hundred$
|
|
ELSE
|
|
FinalSCORE$ = Hundred$
|
|
END IF
|
|
COLOR 6: LOCATE 15, 28: PRINT "Your final score is ";
|
|
COLOR 15: PRINT FinalSCORE$
|
|
COLOR 9
|
|
LOCATE 16, 26: PRINT "Enter your name to record score"
|
|
LOCATE 17, 26: PRINT "(Just press ENTER to decline):"
|
|
COLOR 15
|
|
LOCATE 19, 26: INPUT ; Name$
|
|
IF LEN(Name$) THEN
|
|
ScoreDATA(10).PlayerNAME = LEFT$(Name$, 20)
|
|
ScoreDATA(10).PlayDATE = DATE$
|
|
ScoreDATA(10).PlayerSCORE = FinalSCORE&
|
|
FOR a = 0 TO 10
|
|
FOR B = a TO 10
|
|
IF ScoreDATA(B).PlayerSCORE > ScoreDATA(a).PlayerSCORE THEN
|
|
SWAP ScoreDATA(B), ScoreDATA(a)
|
|
END IF
|
|
NEXT B
|
|
NEXT a
|
|
|
|
TopTEN
|
|
|
|
OPEN "rattler.top" FOR OUTPUT AS #1
|
|
FOR Reps = 0 TO 9
|
|
WRITE #1, ScoreDATA(Reps).PlayerNAME
|
|
WRITE #1, ScoreDATA(Reps).PlayDATE
|
|
WRITE #1, ScoreDATA(Reps).PlayerSCORE
|
|
NEXT Reps
|
|
CLOSE #1
|
|
END IF
|
|
END IF
|
|
|
|
LINE (176, 160)-(462, 317), 0, BF
|
|
COLOR 4: LOCATE 14, 31: PRINT "- G A M E O V E R -"
|
|
COLOR 9
|
|
LOCATE 16, 26: PRINT "Start new game......"
|
|
LOCATE 17, 26: PRINT "QUIT................"
|
|
COLOR 6
|
|
LOCATE 16, 47: PRINT "Press [1]"
|
|
LOCATE 17, 47: PRINT "Press [2]"
|
|
|
|
DO
|
|
k$ = INKEY$
|
|
LOOP UNTIL k$ = "1" OR k$ = "2" OR k$ = CHR$(27)
|
|
IF k$ = "1" THEN EndGAME = 1: EXIT FUNCTION
|
|
PALETTE: COLOR 7: CLS
|
|
SYSTEM
|
|
|
|
END FUNCTION
|
|
|
|
SUB InitGAME
|
|
|
|
SetSPEED = 9
|
|
SpeedLEVEL = 3
|
|
Level = 1
|
|
Lives = 5
|
|
Score = 0
|
|
CrittersLEFT = 10
|
|
|
|
END SUB
|
|
|
|
SUB InitLEVEL
|
|
|
|
ERASE SnakePIT
|
|
SnakeLENGTH = 11
|
|
StartCOL = 22
|
|
|
|
FOR n = 1 TO SnakeLENGTH
|
|
StartCOL = StartCOL - 1
|
|
Rattler(n).Col = StartCOL
|
|
Rattler(n).Row = 22
|
|
Rattler(n).TURN = 0
|
|
Rattler(n).WhichWAY = Right
|
|
SELECT CASE n
|
|
CASE 1: Rattler(n).BodyPART = Head
|
|
CASE 2: Rattler(n).BodyPART = Neck
|
|
CASE 3: Rattler(n).BodyPART = Shoulders
|
|
CASE 4: Rattler(n).BodyPART = Body
|
|
CASE 5: Rattler(n).BodyPART = Body
|
|
CASE 6: Rattler(n).BodyPART = Shoulders
|
|
CASE 7: Rattler(n).BodyPART = Neck
|
|
CASE 8: Rattler(n).BodyPART = Tail
|
|
CASE 9: Rattler(n).BodyPART = TailEND
|
|
CASE 10: Rattler(n).BodyPART = Rattle
|
|
CASE 11: Rattler(n).BodyPART = Blank
|
|
END SELECT
|
|
NEXT n
|
|
|
|
PrintNUMS 1, Lives
|
|
PrintNUMS 2, Score
|
|
PrintNUMS 3, Level
|
|
PrintNUMS 5, SpeedLEVEL
|
|
|
|
FOR n = 1 TO SnakeLENGTH
|
|
RCol = Rattler(n).Col
|
|
RRow = Rattler(n).Row
|
|
RIndex = Rattler(n).BodyPART + Rattler(n).TURN + Rattler(n).WhichWAY
|
|
PutSPRITE RCol, RRow, RIndex
|
|
NEXT n
|
|
SnakePIT(Rattler(SnakeLENGTH).Col, Rattler(SnakeLENGTH).Row) = 0
|
|
|
|
FOR Col = 1 TO 32
|
|
SnakePIT(Col, 1) = -1
|
|
SnakePIT(Col, 24) = -1
|
|
NEXT Col
|
|
FOR Row = 2 TO 23
|
|
SnakePIT(1, Row) = -1
|
|
SnakePIT(32, Row) = -1
|
|
NEXT Row
|
|
|
|
LINE (271, 466)-(368, 474), 15, BF
|
|
FOR x = 271 TO 361 STEP 10
|
|
Count = Count + 1
|
|
IF Count MOD 2 THEN Colr = 11 ELSE Colr = 7
|
|
LINE (x, 466)-(x + 7, 474), Colr, BF
|
|
NEXT x
|
|
|
|
END SUB
|
|
|
|
SUB Instructions
|
|
|
|
GET (100, 100)-(539, 379), BigBOX
|
|
LINE (100, 100)-(539, 379), 0, BF
|
|
LINE (106, 106)-(533, 373), 13, B
|
|
LINE (108, 108)-(531, 371), 7, B
|
|
LINE (110, 110)-(529, 369), 6, B
|
|
|
|
COLOR 9: LOCATE 10, 27: PRINT "- I N S T R U C T I O N S -"
|
|
COLOR 6
|
|
LOCATE 12, 18: PRINT "RATTLER is a variation on the classic Microsoft"
|
|
LOCATE 13, 18: PRINT "QBasic game NIBBLES."
|
|
COLOR 15
|
|
LOCATE 12, 18: PRINT "RATTLER": LOCATE 13, 30: PRINT "NIBBLES"
|
|
COLOR 6
|
|
LOCATE 15, 18: PRINT "Steer the Diamondback Rattler using the Arrow"
|
|
LOCATE 16, 18: PRINT "keys, eating mice and frogs and scoring points"
|
|
COLOR 15: LOCATE 15, 58: PRINT "Arrow": COLOR 6
|
|
LOCATE 17, 18: PRINT "for each kill. These wary creatures cannot be"
|
|
LOCATE 18, 18: PRINT "caught from the front or sides, however. They"
|
|
LOCATE 19, 18: PRINT "must be snuck up on from behind, otherwise"
|
|
LOCATE 20, 18: PRINT "they will simply jump to a new location."
|
|
|
|
COLOR 13: LOCATE 22, 28: PRINT "PRESS ANY KEY TO CONTINUE..."
|
|
|
|
a$ = INPUT$(1)
|
|
LINE (120, 160)-(519, 332), 0, BF
|
|
COLOR 6
|
|
LOCATE 12, 18: PRINT "With each creature eaten, the rattler grows"
|
|
LOCATE 13, 18: PRINT "in length, making steering much more difficult"
|
|
LOCATE 14, 18: PRINT "and increasing the chance of self-collision."
|
|
LOCATE 16, 18: PRINT "There are ten levels, each one more hazardous"
|
|
LOCATE 17, 18: PRINT "than the last. If the snake hits a stone wall"
|
|
LOCATE 18, 18: PRINT "or bumps into himself, he dies. He has a total"
|
|
LOCATE 19, 18: PRINT "of five lives. Once they are used up, the game"
|
|
LOCATE 20, 18: PRINT "is over."
|
|
COLOR 15
|
|
LOCATE 16, 28: PRINT "ten": LOCATE 19, 21: PRINT "five"
|
|
|
|
a$ = INPUT$(1)
|
|
LINE (120, 160)-(519, 332), 0, BF
|
|
COLOR 6
|
|
LOCATE 12, 18: PRINT "Often, a mouse or frog will have its back to"
|
|
LOCATE 13, 18: PRINT "a wall, making it impossible to kill. In those"
|
|
LOCATE 14, 18: PRINT "situations, you must attack from the front or"
|
|
LOCATE 15, 18: PRINT "sides, forcing it to move to a location where"
|
|
LOCATE 16, 18: PRINT "its back is exposed."
|
|
LOCATE 18, 18: PRINT "There are five speeds to choose from. It may"
|
|
LOCATE 19, 18: PRINT "be wise to choose a slower speed for the high-"
|
|
LOCATE 20, 18: PRINT "er levels. The default speed is 3."
|
|
COLOR 15: LOCATE 18, 28: PRINT "five": LOCATE 20, 50: PRINT "3"
|
|
a$ = INPUT$(1)
|
|
LINE (120, 160)-(519, 332), 0, BF
|
|
COLOR 9
|
|
LOCATE 12, 18: PRINT "SCORING:"
|
|
COLOR 6
|
|
LOCATE 12, 18: PRINT "SCORING: Each kill scores 10 points multiplied"
|
|
LOCATE 13, 18: PRINT "by the level of difficulty and the speed. For"
|
|
LOCATE 14, 18: PRINT "example, at level 5, speed 3, a kill is worth"
|
|
LOCATE 15, 18: PRINT "150 points; level 10, speed 2: 200 points."
|
|
LOCATE 17, 18: PRINT "If you manage to complete all 10 levels, your"
|
|
LOCATE 18, 18: PRINT "final score is then multiplied by the number"
|
|
LOCATE 19, 18: PRINT "of remaining lives. In other words, the score"
|
|
LOCATE 20, 18: PRINT "accurately reflects your level of achievement."
|
|
COLOR 15
|
|
LOCATE 12, 18: PRINT "SCORING"
|
|
LOCATE 12, 44: PRINT "10": LOCATE 14, 36: PRINT "5"
|
|
LOCATE 14, 45: PRINT "3": LOCATE 15, 18: PRINT "150"
|
|
LOCATE 15, 36: PRINT "10": LOCATE 15, 46: PRINT "2"
|
|
LOCATE 15, 49: PRINT "200"
|
|
a$ = INPUT$(1)
|
|
LINE (120, 160)-(519, 368), 0, BF
|
|
COLOR 6
|
|
LOCATE 12, 18: PRINT "Indicators of remaining lives and the current"
|
|
LOCATE 13, 18: PRINT "score are located at the top of the screen on"
|
|
COLOR 15: LOCATE 12, 42: PRINT "lives"
|
|
LOCATE 13, 18: PRINT "score": COLOR 6
|
|
LOCATE 14, 18: PRINT "the extreme left and right, respectively."
|
|
LOCATE 16, 18: PRINT "The current level of play can be found on the"
|
|
LOCATE 17, 18: PRINT "bottom-left of the screen. Bottom-center you"
|
|
LOCATE 18, 18: PRINT "will find a graph indicating the number of"
|
|
LOCATE 19, 18: PRINT "prey remaining on the current level. The cur-"
|
|
LOCATE 20, 18: PRINT "rent speed can be read bottom-right."
|
|
COLOR 15
|
|
LOCATE 16, 30: PRINT "level"
|
|
LOCATE 18, 51: PRINT "number of": LOCATE 19, 18: PRINT "prey"
|
|
LOCATE 20, 23: PRINT "speed"
|
|
COLOR 13: LOCATE 22, 25: PRINT "PRESS ANY KEY TO RETURN TO GAME..."
|
|
a$ = INPUT$(1)
|
|
|
|
PUT (100, 100), BigBOX, PSET
|
|
|
|
END SUB
|
|
|
|
SUB Intro
|
|
|
|
PutSPRITE 7, 16, Rattle + Up
|
|
PutSPRITE 7, 15, TailEND + Up
|
|
PutSPRITE 7, 14, Tail + Up
|
|
PutSPRITE 7, 13, Neck + Up
|
|
PutSPRITE 7, 12, Shoulders + Up
|
|
PutSPRITE 7, 11, Body + Up
|
|
PutSPRITE 7, 10, Body + TURN + UR
|
|
PutSPRITE 8, 10, Body + Right
|
|
PutSPRITE 9, 10, Body + TURN + RD
|
|
PutSPRITE 9, 11, Body + TURN + DL
|
|
PutSPRITE 8, 11, Body + TURN + LD
|
|
PutSPRITE 8, 12, Body + TURN + DR
|
|
PutSPRITE 9, 12, Body + TURN + RD
|
|
PutSPRITE 9, 13, Body + Down
|
|
PutSPRITE 9, 14, Body + TURN + DR
|
|
PutSPRITE 10, 14, Body + TURN + RU
|
|
PutSPRITE 10, 13, Body + Up
|
|
PutSPRITE 10, 12, Body + Up
|
|
PutSPRITE 10, 11, Body + Up
|
|
PutSPRITE 10, 10, Body + TURN + UR
|
|
PutSPRITE 11, 10, Body + Right
|
|
PutSPRITE 12, 10, Body + TURN + RD
|
|
PutSPRITE 12, 11, Body + Down
|
|
PutSPRITE 12, 12, Body + Down
|
|
PutSPRITE 12, 13, Body + Down
|
|
PutSPRITE 12, 14, Body + TURN + DR
|
|
PutSPRITE 13, 14, Body + Right
|
|
PutSPRITE 11, 12, Body + Right
|
|
PutSPRITE 13, 10, Body + Right
|
|
PutSPRITE 14, 10, Body + Right
|
|
PutSPRITE 15, 10, Body + Right
|
|
PutSPRITE 16, 10, Body + Right
|
|
PutSPRITE 17, 10, Body + Right
|
|
PutSPRITE 14, 11, Body + Down
|
|
PutSPRITE 14, 12, Body + Down
|
|
PutSPRITE 14, 13, Body + Down
|
|
PutSPRITE 14, 14, Body + TURN + DR
|
|
PutSPRITE 15, 14, Body + Right
|
|
PutSPRITE 16, 11, Body + Down
|
|
PutSPRITE 16, 12, Body + Down
|
|
PutSPRITE 16, 13, Body + Down
|
|
PutSPRITE 16, 14, Body + TURN + DR
|
|
PutSPRITE 17, 14, Body + Right
|
|
PutSPRITE 18, 10, Body + Down
|
|
PutSPRITE 18, 11, Body + Down
|
|
PutSPRITE 18, 12, Body + Down
|
|
PutSPRITE 18, 13, Body + Down
|
|
PutSPRITE 18, 14, Body + TURN + DR
|
|
PutSPRITE 19, 14, Body + Right
|
|
PutSPRITE 20, 10, Body + TURN + UR
|
|
PutSPRITE 21, 12, Body + Right
|
|
PutSPRITE 21, 10, Body + Right
|
|
PutSPRITE 20, 11, Body + Down
|
|
PutSPRITE 20, 12, Body + Down
|
|
PutSPRITE 20, 13, Body + Down
|
|
PutSPRITE 20, 14, Body + TURN + DR
|
|
PutSPRITE 21, 14, Body + Right
|
|
PutSPRITE 22, 16, Rattle + Up
|
|
PutSPRITE 22, 15, TailEND + Up
|
|
PutSPRITE 22, 14, Tail + Up
|
|
PutSPRITE 22, 13, Neck + Up
|
|
PutSPRITE 22, 12, Shoulders + Up
|
|
PutSPRITE 22, 11, Body + Up
|
|
PutSPRITE 22, 10, Body + TURN + UR
|
|
PutSPRITE 23, 10, Body + Right
|
|
PutSPRITE 24, 10, Body + TURN + RD
|
|
PutSPRITE 24, 11, Body + TURN + DL
|
|
PutSPRITE 23, 11, Body + TURN + LD
|
|
PutSPRITE 23, 12, Body + TURN + DR
|
|
PutSPRITE 24, 12, Body + TURN + RD
|
|
PutSPRITE 24, 13, Body + Down
|
|
PutSPRITE 24, 14, Body + TURN + DR
|
|
PutSPRITE 25, 14, Body + Right
|
|
PutSPRITE 26, 14, Shoulders + TURN + RU
|
|
PutSPRITE 26, 13, Neck + Up
|
|
PutSPRITE 26, 12, Head + Up
|
|
COLOR 13
|
|
LOCATE 22, 20
|
|
PRINT "Copyright (C) 2003 by Bob Seguin (Freeware)"
|
|
FOR x = 152 TO 496
|
|
FOR y = 336 TO 352
|
|
IF POINT(x, y) = 0 THEN PSET (x, y), 8
|
|
NEXT y
|
|
NEXT x
|
|
LINE (80, 106)-(560, 386), 13, B
|
|
LINE (76, 102)-(564, 390), 7, B
|
|
SetPALETTE
|
|
|
|
|
|
PLAY "MFMST200L32O0AP16AP16AP16DP16AP16AP16AP16>C<P16A"
|
|
FOR Reps = 1 TO 18
|
|
GOSUB Rattle1
|
|
NEXT Reps
|
|
|
|
Wipe
|
|
|
|
EXIT SUB
|
|
|
|
'------------------------ SUBROUTINE SECTION BEGINS --------------------------
|
|
Rattle1:
|
|
IF Reps MOD 3 = 0 THEN
|
|
LINE (509, 215)-(510, 219), 4, B
|
|
LINE (508, 210)-(508, 214), 4
|
|
LINE (511, 210)-(511, 214), 4
|
|
END IF
|
|
Hula = Hula + 1
|
|
PLAY "MFT220L64O0C"
|
|
WAIT &H3DA, 8
|
|
WAIT &H3DA, 8, 8
|
|
SELECT CASE Hula MOD 2
|
|
CASE 0
|
|
PUT (418, 300), SpriteBOX(Rattle + Up), PSET
|
|
CASE 1
|
|
PUT (422, 300), SpriteBOX(Rattle + Up), PSET
|
|
END SELECT
|
|
SOUND 30000, 1
|
|
WAIT &H3DA, 8
|
|
WAIT &H3DA, 8, 8
|
|
PUT (420, 300), SpriteBOX(Rattle + Up), PSET
|
|
IF Reps MOD 3 = 0 THEN
|
|
LINE (508, 210)-(511, 219), 8, BF
|
|
END IF
|
|
RETURN
|
|
|
|
END SUB
|
|
|
|
SUB PauseMENU (Item)
|
|
|
|
DO
|
|
GET (166, 162)-(472, 317), BigBOX
|
|
LINE (166, 162)-(472, 317), 0, BF
|
|
LINE (168, 164)-(470, 315), 8, B
|
|
LINE (170, 166)-(468, 313), 7, B
|
|
LINE (172, 168)-(466, 311), 6, B
|
|
|
|
SELECT CASE Item
|
|
CASE 1
|
|
COLOR 4: LOCATE 13, 34: PRINT "L E V E L -"; (STR$(Level))
|
|
COLOR 15: LOCATE 15, 30: PRINT "PRESS SPACE TO BEGIN..."
|
|
COLOR 9: LOCATE 16, 26: PRINT "Instructions:[I] SetSPEED:[S]"
|
|
LOCATE 17, 24: PRINT "EXIT:[Esc] TopTEN:[T] ReSTART:[R]"
|
|
COLOR 7: LOCATE 19, 25: PRINT "To pause during play press SPACE"
|
|
CASE 2
|
|
COLOR 4: LOCATE 14, 29: PRINT "- G A M E P A U S E D -"
|
|
COLOR 6: LOCATE 15, 29: PRINT "Press SPACE to continue..."
|
|
COLOR 9: LOCATE 17, 26: PRINT "Instructions:[I] SetSPEED:[S]"
|
|
LOCATE 18, 24: PRINT "EXIT:[Esc] TopTEN:[T] ReSTART:[R]"
|
|
END SELECT
|
|
|
|
DO: LOOP UNTIL INKEY$ = "" 'Clear INKEY$ buffer
|
|
|
|
DO
|
|
DO
|
|
k$ = UCASE$(INKEY$)
|
|
LOOP WHILE k$ = ""
|
|
SELECT CASE k$
|
|
CASE "I": GOSUB CloseMENU: Instructions: EXIT DO
|
|
CASE "S": GOSUB CloseMENU: SpeedSET: EXIT DO
|
|
CASE "R": GOSUB CloseMENU: Item = -1: EXIT SUB
|
|
CASE "T": GOSUB CloseMENU: TopTEN: EXIT DO
|
|
CASE CHR$(27): SYSTEM
|
|
CASE " ": GOSUB CloseMENU: EXIT SUB
|
|
END SELECT
|
|
LOOP
|
|
LOOP
|
|
GOSUB CloseMENU
|
|
|
|
EXIT SUB
|
|
|
|
CloseMENU:
|
|
PUT (166, 162), BigBOX, PSET
|
|
RETURN
|
|
|
|
END SUB
|
|
|
|
SUB PlayGAME
|
|
|
|
IF Level = 0 THEN InitGAME
|
|
InitLEVEL
|
|
SetSTONES Level
|
|
Speed = SetSPEED
|
|
|
|
GOSUB PutPREY
|
|
|
|
Col = 21: Row = 22
|
|
RowINC = 0: ColINC = 1
|
|
Direction = Right: OldDIRECTION = Right
|
|
Increase = 0: Item = 1
|
|
|
|
DO: LOOP UNTIL INKEY$ = "" 'Clear INKEY$ buffer
|
|
|
|
PauseMENU Item
|
|
IF Item = -1 THEN GOSUB ReSTART
|
|
|
|
FOR Reps = 1 TO 6
|
|
GOSUB Rattle2
|
|
NEXT Reps
|
|
|
|
DO
|
|
k$ = INKEY$
|
|
SELECT CASE k$
|
|
CASE CHR$(0) + "H"
|
|
IF RowINC <> 1 THEN RowINC = -1: ColINC = 0: Direction = Up
|
|
CASE CHR$(0) + "P"
|
|
IF RowINC <> -1 THEN RowINC = 1: ColINC = 0: Direction = Down
|
|
CASE CHR$(0) + "K"
|
|
IF ColINC <> 1 THEN ColINC = -1: RowINC = 0: Direction = Left
|
|
CASE CHR$(0) + "M"
|
|
IF ColINC <> -1 THEN ColINC = 1: RowINC = 0: Direction = Right
|
|
CASE " "
|
|
Item = 2
|
|
PauseMENU Item
|
|
IF Item = -1 THEN GOSUB ReSTART:
|
|
END SELECT
|
|
|
|
Row = Row + RowINC
|
|
Col = Col + ColINC
|
|
|
|
'Lengthen snake if prey has been eaten
|
|
IF Increase THEN
|
|
SnakeLENGTH = SnakeLENGTH + 1
|
|
FOR n = SnakeLENGTH TO SnakeLENGTH - 7 STEP -1
|
|
Rattler(n).BodyPART = Rattler(n - 1).BodyPART
|
|
NEXT n
|
|
Increase = Increase - 1
|
|
'If snake length has been increased significantly, adjust speed
|
|
IF Increase = 0 THEN
|
|
SELECT CASE SnakeLENGTH
|
|
CASE 36 TO 46: Speed = SetSPEED - 1
|
|
CASE IS > 46: Speed = SetSPEED - 2
|
|
END SELECT
|
|
END IF
|
|
END IF
|
|
|
|
FOR n = SnakeLENGTH TO 2 STEP -1
|
|
SWAP Rattler(n).Row, Rattler(n - 1).Row
|
|
SWAP Rattler(n).Col, Rattler(n - 1).Col
|
|
SWAP Rattler(n).TURN, Rattler(n - 1).TURN
|
|
SWAP Rattler(n).WhichWAY, Rattler(n - 1).WhichWAY
|
|
SWAP Rattler(n).RattleDIR, Rattler(n - 1).RattleDIR
|
|
NEXT n
|
|
|
|
IF Direction <> OldDIRECTION THEN
|
|
Rattler(2).TURN = TURN
|
|
SELECT CASE OldDIRECTION
|
|
CASE Up
|
|
SELECT CASE Direction
|
|
CASE Left: Rattler(2).WhichWAY = UL
|
|
CASE Right: Rattler(2).WhichWAY = UR
|
|
END SELECT
|
|
Rattler(2).RattleDIR = Up
|
|
CASE Down
|
|
SELECT CASE Direction
|
|
CASE Left: Rattler(2).WhichWAY = DL
|
|
CASE Right: Rattler(2).WhichWAY = DR
|
|
END SELECT
|
|
Rattler(2).RattleDIR = Down
|
|
CASE Left
|
|
SELECT CASE Direction
|
|
CASE Up: Rattler(2).WhichWAY = LU
|
|
CASE Down: Rattler(2).WhichWAY = LD
|
|
END SELECT
|
|
Rattler(2).RattleDIR = Left
|
|
CASE Right
|
|
SELECT CASE Direction
|
|
CASE Up: Rattler(2).WhichWAY = RU
|
|
CASE Down: Rattler(2).WhichWAY = RD
|
|
END SELECT
|
|
Rattler(2).RattleDIR = Right
|
|
END SELECT
|
|
END IF
|
|
|
|
Rattler(1).Row = Row
|
|
Rattler(1).Col = Col
|
|
Rattler(1).TURN = 0
|
|
Rattler(1).WhichWAY = Direction
|
|
Rattler(SnakeLENGTH).TURN = 0
|
|
Rattler(SnakeLENGTH - 1).TURN = 0
|
|
|
|
IF Rattler(SnakeLENGTH - 2).TURN = 0 THEN
|
|
Rattler(SnakeLENGTH - 1).WhichWAY = Rattler(SnakeLENGTH - 2).WhichWAY
|
|
ELSE
|
|
Rattler(SnakeLENGTH - 1).WhichWAY = Rattler(SnakeLENGTH - 2).RattleDIR
|
|
END IF
|
|
|
|
OldDIRECTION = Direction
|
|
|
|
'TEST Map values
|
|
SELECT CASE SnakePIT(Col, Row)
|
|
CASE IS >= 1000
|
|
IF SnakePIT(Col, Row) MOD 1000 = Rattler(1).WhichWAY THEN
|
|
IF SnakePIT(Col, Row) \ 1000 = 1 THEN PLAY "MBMST220L64O0BP16BO1P64B"
|
|
IF SnakePIT(Col, Row) \ 1000 = 2 THEN PLAY "MBT160L32O6A-B-B"
|
|
SnakePIT(Col, Row) = 0
|
|
PreySCORE = PreySCORE + 1
|
|
Score = Score + (Level * SpeedLEVEL)
|
|
PrintNUMS 2, Score
|
|
Increase = Increase + 5
|
|
CrittersLEFT = CrittersLEFT - 1
|
|
PrintNUMS 4, CrittersLEFT
|
|
IF PreySCORE = 10 THEN
|
|
PutSPRITE Col, Row, Blank
|
|
Wipe
|
|
PreySCORE = 0
|
|
CrittersLEFT = 10
|
|
Level = Level + 1
|
|
IF Level = 11 THEN Choice = EndGAME
|
|
IF Choice THEN GOSUB ReSTART
|
|
PrintNUMS 3, Level
|
|
EXIT SUB
|
|
END IF
|
|
SetPREY = 1
|
|
ELSE
|
|
SetPREY = 2
|
|
END IF
|
|
CASE IS < 0
|
|
PLAY "MBMST100O0L32GFEDC"
|
|
Lives = Lives - 1
|
|
PrintNUMS 1, Lives
|
|
PreySCORE = 0
|
|
GET (188, 184)-(450, 295), BigBOX
|
|
LINE (188, 184)-(450, 295), 0, BF
|
|
LINE (190, 186)-(448, 293), 8, B
|
|
LINE (192, 188)-(446, 291), 7, B
|
|
LINE (194, 190)-(444, 289), 6, B
|
|
LINE (196, 192)-(442, 287), 6, B
|
|
IF SnakePIT(Col, Row) = -1 THEN
|
|
COLOR 4: LOCATE 15, 35: PRINT "G L O R N K !"
|
|
COLOR 9: LOCATE 16, 35: PRINT "HIT THE WALL!"
|
|
ELSE
|
|
COLOR 4: LOCATE 15, 37: PRINT "O U C H !"
|
|
COLOR 9: LOCATE 16, 35: PRINT "BIT YOURSELF!"
|
|
END IF
|
|
StartTIME! = TIMER: DO: LOOP WHILE TIMER < StartTIME! + 1
|
|
PUT (188, 184), BigBOX, PSET
|
|
IF Lives = 0 THEN Choice = EndGAME
|
|
IF Choice THEN GOSUB ReSTART
|
|
CrittersLEFT = 10
|
|
Wipe
|
|
EXIT SUB
|
|
END SELECT
|
|
|
|
WAIT &H3DA, 8
|
|
FOR n = SnakeLENGTH TO 1 STEP -1
|
|
RCol = Rattler(n).Col
|
|
RRow = Rattler(n).Row
|
|
RIndex = Rattler(n).BodyPART + Rattler(n).TURN + Rattler(n).WhichWAY
|
|
PutSPRITE RCol, RRow, RIndex
|
|
IF Rattler(n).BodyPART = Body THEN
|
|
FOR nn = n TO 1 STEP -1
|
|
IF Rattler(n).BodyPART = Shoulders THEN
|
|
n = nn
|
|
EXIT FOR
|
|
END IF
|
|
NEXT nn
|
|
END IF
|
|
NEXT n
|
|
|
|
IF SetPREY THEN
|
|
IF SetPREY = 2 THEN
|
|
IF WhichPREY = 1 THEN WhichPREY = 0 ELSE WhichPREY = 1
|
|
END IF
|
|
GOSUB PutPREY
|
|
SetPREY = 0
|
|
END IF
|
|
|
|
SnakePIT(Rattler(SnakeLENGTH).Col, Rattler(SnakeLENGTH).Row) = 0
|
|
|
|
FOR Reps = 1 TO Speed
|
|
WAIT &H3DA, 8
|
|
WAIT &H3DA, 8, 8
|
|
NEXT Reps
|
|
|
|
LOOP
|
|
|
|
EXIT SUB
|
|
|
|
'------------------------ SUBROUTINE SECTION BEGINS --------------------------
|
|
|
|
Rattle2:
|
|
IF Reps MOD 3 = 0 THEN
|
|
LINE (420, 429)-(425, 430), 4, B
|
|
LINE (426, 428)-(430, 428), 4
|
|
LINE (426, 431)-(430, 431), 4
|
|
END IF
|
|
Hula = Hula + 1
|
|
PLAY "MFT220L64O0C"
|
|
WAIT &H3DA, 8
|
|
WAIT &H3DA, 8, 8
|
|
SELECT CASE Hula MOD 2
|
|
CASE 0: PUT (220, 418), SpriteBOX(Rattle + Right), PSET
|
|
CASE 1: PUT (220, 422), SpriteBOX(Rattle + Right), PSET
|
|
END SELECT
|
|
SOUND 30000, 1
|
|
WAIT &H3DA, 8
|
|
WAIT &H3DA, 8, 8
|
|
PUT (220, 420), SpriteBOX(Rattle + Right), PSET
|
|
IF Reps MOD 3 = 0 THEN
|
|
LINE (420, 428)-(430, 431), 8, BF
|
|
END IF
|
|
IF Level = 8 THEN PutSPRITE 12, 21, Stone
|
|
RETURN
|
|
|
|
PutPREY:
|
|
DO
|
|
PreyCOL = INT(RND * 30) + 2
|
|
PreyROW = INT(RND * 22) + 2
|
|
LOOP WHILE SnakePIT(PreyCOL, PreyROW) <> 0
|
|
WhichDIR = INT(RND * 4)
|
|
SELECT CASE WhichDIR
|
|
CASE 0: Way = Left
|
|
CASE 1: Way = Up
|
|
CASE 2: Way = Right
|
|
CASE 3: Way = Down
|
|
END SELECT
|
|
IF WhichPREY = 1 THEN
|
|
PutSPRITE PreyCOL, PreyROW, Frog + Way
|
|
SnakePIT(PreyCOL, PreyROW) = 1000 + Way
|
|
WhichPREY = 0
|
|
ELSE
|
|
PutSPRITE PreyCOL, PreyROW, Mouse + Way
|
|
SnakePIT(PreyCOL, PreyROW) = 2000 + Way
|
|
WhichPREY = 1
|
|
END IF
|
|
RETURN
|
|
|
|
ReSTART:
|
|
PLAY "MBMST200L32O0AP16AP16AP16DP16AP16AP16AP16>C<P16A"
|
|
Level = 0
|
|
Item = 0
|
|
Choice = 0
|
|
Wipe
|
|
EXIT SUB
|
|
RETURN
|
|
|
|
END SUB
|
|
|
|
SUB PrintNUMS (Item, Value)
|
|
|
|
PrintSCORE& = Value * 10&
|
|
|
|
SELECT CASE Item
|
|
CASE 1 'Lives
|
|
Num$ = LTRIM$(STR$(Value))
|
|
PrintX = 89: PrintY = 2
|
|
CASE 2 'Score
|
|
SELECT CASE PrintSCORE&
|
|
CASE 0 TO 9: Num$ = "0000"
|
|
CASE 10 TO 99: Num$ = "000"
|
|
CASE 100 TO 999: Num$ = "00"
|
|
CASE 1000 TO 9999: Num$ = "0"
|
|
END SELECT
|
|
Num$ = Num$ + LTRIM$(STR$(PrintSCORE&))
|
|
PrintX = 568: PrintY = 2
|
|
CASE 3 'Level
|
|
Num$ = LTRIM$(STR$(Value))
|
|
PrintX = 82: PrintY = 464
|
|
LINE (PrintX, PrintY)-(PrintX + 15, PrintY + 10), 15, BF
|
|
CASE 4 'Remaining prey
|
|
x = Value * 10 + 271
|
|
LINE (x, 466)-(x + 8, 474), 15, BF
|
|
CASE 5 'Speed
|
|
Num$ = LTRIM$(STR$(Value))
|
|
PrintX = 602: PrintY = 464
|
|
END SELECT
|
|
|
|
FOR n = 1 TO LEN(Num$)
|
|
Char$ = MID$(Num$, n, 1)
|
|
NumDEX = (ASC(Char$) - 48) * 40
|
|
PUT (PrintX, PrintY), NumBOX(NumDEX), PSET
|
|
PrintX = PrintX + 8
|
|
NEXT n
|
|
|
|
END SUB
|
|
|
|
SUB PutSPRITE (Col, Row, Index)
|
|
|
|
PUT ((Col - 1) * 20, (Row - 1) * 20), SpriteBOX(Index), PSET
|
|
|
|
SELECT CASE Index
|
|
CASE Stone: SnakePIT(Col, Row) = -1
|
|
CASE ELSE: SnakePIT(Col, Row) = -2
|
|
END SELECT
|
|
|
|
END SUB
|
|
|
|
SUB SetPALETTE
|
|
|
|
RESTORE PaletteVALUES
|
|
FOR Colr = 0 TO 15
|
|
OUT &H3C8, Colr
|
|
READ Red: OUT &H3C9, Red
|
|
READ Grn: OUT &H3C9, Grn
|
|
READ Blu: OUT &H3C9, Blu
|
|
NEXT Colr
|
|
|
|
END SUB
|
|
|
|
SUB SetSTONES (Level)
|
|
|
|
SELECT CASE Level
|
|
CASE 2
|
|
FOR Col = 10 TO 23
|
|
PutSPRITE Col, 12, Stone
|
|
PutSPRITE Col, 13, Stone
|
|
NEXT Col
|
|
CASE 3
|
|
Row1 = 8: Row2 = 17
|
|
FOR Col = 10 TO 23
|
|
PutSPRITE Col, Row1, Stone
|
|
PutSPRITE Col, Row2, Stone
|
|
NEXT Col
|
|
CASE 4
|
|
Col1 = 9: Col2 = 24
|
|
FOR Row = 7 TO 18
|
|
IF Row = 12 THEN Row = 14
|
|
PutSPRITE Col1, Row, Stone
|
|
PutSPRITE Col2, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 10 TO 23
|
|
PutSPRITE Col, 7, Stone
|
|
PutSPRITE Col, 18, Stone
|
|
NEXT Col
|
|
CASE 5
|
|
Col1 = 9: Col2 = 24
|
|
FOR Row = 6 TO 19
|
|
PutSPRITE Col1, Row, Stone
|
|
PutSPRITE Col2, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 10 TO 23
|
|
IF Col = 16 THEN Col = 18
|
|
PutSPRITE Col, 6, Stone
|
|
PutSPRITE Col, 19, Stone
|
|
NEXT Col
|
|
Row = 12
|
|
FOR Col = 2 TO 31
|
|
IF Col = 3 THEN Col = 5
|
|
IF Col = 9 THEN Col = 24
|
|
IF Col = 29 THEN Col = 31
|
|
PutSPRITE Col, Row, Stone
|
|
PutSPRITE Col, Row + 1, Stone
|
|
NEXT Col
|
|
CASE 6
|
|
Row1 = 5: Row2 = 20
|
|
FOR Col = 5 TO 28
|
|
PutSPRITE Col, Row1, Stone
|
|
PutSPRITE Col, Row2, Stone
|
|
NEXT Col
|
|
Row1 = 8: Row2 = 17
|
|
FOR Col = 8 TO 25
|
|
PutSPRITE Col, Row1, Stone
|
|
PutSPRITE Col, Row2, Stone
|
|
NEXT Col
|
|
FOR Row = 9 TO 16
|
|
IF Row = 12 THEN Row = 14
|
|
PutSPRITE 8, Row, Stone
|
|
PutSPRITE 25, Row, Stone
|
|
NEXT Row
|
|
Col1 = 5: Col2 = 28
|
|
FOR Row = 6 TO 19
|
|
IF Row = 12 THEN Row = 14
|
|
PutSPRITE Col1, Row, Stone
|
|
PutSPRITE Col2, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 11 TO 22
|
|
PutSPRITE Col, 11, Stone
|
|
PutSPRITE Col, 14, Stone
|
|
NEXT Col
|
|
FOR Row = 2 TO 23 STEP 21
|
|
PutSPRITE 16, Row, Stone
|
|
PutSPRITE 17, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 2 TO 31 STEP 29
|
|
PutSPRITE Col, 12, Stone
|
|
PutSPRITE Col, 13, Stone
|
|
NEXT Col
|
|
CASE 7
|
|
FOR Col = 14 TO 19
|
|
PutSPRITE Col, 5, Stone
|
|
NEXT Col
|
|
FOR Col = 12 TO 13
|
|
PutSPRITE Col, 6, Stone
|
|
PutSPRITE Col + 8, 6, Stone
|
|
NEXT Col
|
|
PutSPRITE 11, 7, Stone
|
|
PutSPRITE 10, 8, Stone
|
|
PutSPRITE 9, 9, Stone
|
|
PutSPRITE 22, 7, Stone
|
|
PutSPRITE 23, 8, Stone
|
|
PutSPRITE 24, 9, Stone
|
|
FOR Row = 10 TO 11
|
|
PutSPRITE 8, Row, Stone
|
|
PutSPRITE 25, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 14 TO 19
|
|
PutSPRITE Col, 19, Stone
|
|
NEXT Col
|
|
FOR Col = 12 TO 13
|
|
PutSPRITE Col, 18, Stone
|
|
PutSPRITE Col + 8, 18, Stone
|
|
NEXT Col
|
|
PutSPRITE 11, 17, Stone
|
|
PutSPRITE 10, 16, Stone
|
|
PutSPRITE 9, 15, Stone
|
|
PutSPRITE 22, 17, Stone
|
|
PutSPRITE 23, 16, Stone
|
|
PutSPRITE 24, 15, Stone
|
|
FOR Row = 13 TO 14
|
|
PutSPRITE 8, Row, Stone
|
|
PutSPRITE 25, Row, Stone
|
|
NEXT Row
|
|
FOR Col = 4 TO 10
|
|
PutSPRITE Col, 4, Stone
|
|
PutSPRITE 33 - Col, 4, Stone
|
|
PutSPRITE Col, 20, Stone
|
|
PutSPRITE 33 - Col, 20, Stone
|
|
NEXT Col
|
|
FOR Row = 4 TO 11
|
|
PutSPRITE 4, Row, Stone
|
|
PutSPRITE 4, 24 - Row, Stone
|
|
PutSPRITE 29, Row, Stone
|
|
PutSPRITE 29, 24 - Row, Stone
|
|
NEXT Row
|
|
FOR Row = 7 TO 17
|
|
IF Row = 9 THEN Row = 16
|
|
PutSPRITE 9, Row, Stone
|
|
PutSPRITE 24, Row, Stone
|
|
NEXT Row
|
|
PutSPRITE 10, 7, Stone
|
|
PutSPRITE 10, 17, Stone
|
|
PutSPRITE 23, 7, Stone
|
|
PutSPRITE 23, 17, Stone
|
|
CASE 8
|
|
FOR Col = 5 TO 25 STEP 6
|
|
IF Col = 17 THEN Col = 18
|
|
FOR Row = 5 TO 21 STEP 4
|
|
PutSPRITE Col, Row, Stone
|
|
PutSPRITE Col + 1, Row, Stone
|
|
PutSPRITE Col + 3, Row, Stone
|
|
PutSPRITE Col + 4, Row, Stone
|
|
NEXT Row
|
|
NEXT Col
|
|
FOR Row = 5 TO 20
|
|
FOR Col = 5 TO 29 STEP 6
|
|
IF Col = 17 THEN Col = 22
|
|
PutSPRITE Col, Row, Stone
|
|
NEXT Col
|
|
NEXT Row
|
|
FOR Col = 2 TO 31
|
|
IF Col = 4 THEN Col = 30
|
|
PutSPRITE Col, 12, Stone
|
|
PutSPRITE Col, 13, Stone
|
|
NEXT Col
|
|
FOR Row = 2 TO 3
|
|
PutSPRITE 16, Row, Stone
|
|
PutSPRITE 17, Row, Stone
|
|
NEXT Row
|
|
CASE 9
|
|
FOR Col = 6 TO 24 STEP 8
|
|
FOR Row = 7 TO 16 STEP 9
|
|
PutSPRITE Col, Row, Stone
|
|
PutSPRITE Col + 1, Row - 1, Stone
|
|
PutSPRITE Col + 2, Row - 2, Stone
|
|
PutSPRITE Col + 3, Row - 2, Stone
|
|
PutSPRITE Col + 4, Row - 1, Stone
|
|
PutSPRITE Col + 5, Row, Stone
|
|
PutSPRITE Col, Row + 2, Stone
|
|
PutSPRITE Col + 1, Row + 3, Stone
|
|
PutSPRITE Col + 2, Row + 4, Stone
|
|
PutSPRITE Col + 3, Row + 4, Stone
|
|
PutSPRITE Col + 4, Row + 3, Stone
|
|
PutSPRITE Col + 5, Row + 2, Stone
|
|
NEXT Row
|
|
NEXT Col
|
|
FOR Col = 4 TO 31 STEP 8
|
|
FOR Row = 12 TO 13
|
|
PutSPRITE Col, Row, Stone
|
|
PutSPRITE Col + 1, Row, Stone
|
|
NEXT Row
|
|
NEXT Col
|
|
CASE 10
|
|
FOR Col = 7 TO 25 STEP 6
|
|
FOR Row = 7 TO 17 STEP 5
|
|
FOR Col2 = Col TO Col + 1
|
|
FOR Row2 = Row TO Row + 1
|
|
PutSPRITE Col2, Row2, Stone
|
|
NEXT Row2
|
|
NEXT Col2
|
|
PutSPRITE Col - 1, Row - 1, Stone
|
|
PutSPRITE Col - 1, Row + 2, Stone
|
|
PutSPRITE Col + 2, Row - 1, Stone
|
|
PutSPRITE Col + 2, Row + 2, Stone
|
|
NEXT Row
|
|
NEXT Col
|
|
FOR Col = 2 TO 30 STEP 28
|
|
FOR Row = 2 TO 22 STEP 20
|
|
PutSPRITE Col, Row, Stone
|
|
PutSPRITE Col + 1, Row, Stone
|
|
PutSPRITE Col, Row + 1, Stone
|
|
PutSPRITE Col + 1, Row + 1, Stone
|
|
NEXT Row
|
|
NEXT Col
|
|
PutSPRITE 4, 4, Stone
|
|
PutSPRITE 29, 4, Stone
|
|
PutSPRITE 4, 21, Stone
|
|
PutSPRITE 29, 21, Stone
|
|
FOR Col = 2 TO 31
|
|
IF Col = 5 THEN Col = 29
|
|
PutSPRITE Col, 11, Stone
|
|
PutSPRITE Col, 14, Stone
|
|
NEXT Col
|
|
END SELECT
|
|
|
|
END SUB
|
|
|
|
SUB SpeedSET
|
|
|
|
GET (166, 142)-(472, 337), BigBOX
|
|
LINE (166, 142)-(472, 337), 0, BF
|
|
LINE (168, 144)-(470, 335), 8, B
|
|
LINE (170, 146)-(468, 333), 7, B
|
|
LINE (172, 148)-(466, 331), 6, B
|
|
|
|
COLOR 4
|
|
LOCATE 12, 31: PRINT "- S E T S P E E D -"
|
|
COLOR 9
|
|
LOCATE 13, 26: PRINT "The current speed setting is ";
|
|
PRINT LTRIM$(RTRIM$(STR$(SpeedLEVEL))); "."
|
|
COLOR 7
|
|
LOCATE 15, 28: PRINT "Slow............ Press [1]"
|
|
LOCATE 16, 28: PRINT "Moderate........ Press [2]"
|
|
LOCATE 17, 28: PRINT "Medium.......... Press [3]"
|
|
LOCATE 18, 28: PRINT "Quick........... Press [4]"
|
|
LOCATE 19, 28: PRINT "Fast............ Press [5]"
|
|
COLOR 6
|
|
LOCATE 15, 28: PRINT "Slow"
|
|
LOCATE 16, 28: PRINT "Moderate"
|
|
LOCATE 17, 28: PRINT "Medium"
|
|
LOCATE 18, 28: PRINT "Quick"
|
|
LOCATE 19, 28: PRINT "Fast"
|
|
COLOR 15
|
|
LOCATE 15, 52: PRINT "1"
|
|
LOCATE 16, 52: PRINT "2"
|
|
LOCATE 17, 52: PRINT "3"
|
|
LOCATE 18, 52: PRINT "4"
|
|
LOCATE 19, 52: PRINT "5"
|
|
|
|
DO
|
|
n$ = INKEY$
|
|
LOOP WHILE n$ = ""
|
|
SELECT CASE n$
|
|
CASE "1": SpeedLEVEL = 1: SetSPEED = 25
|
|
CASE "2": SpeedLEVEL = 2: SetSPEED = 15
|
|
CASE "3": SpeedLEVEL = 3: SetSPEED = 8
|
|
CASE "4": SpeedLEVEL = 4: SetSPEED = 5
|
|
CASE "5": SpeedLEVEL = 5: SetSPEED = 2
|
|
END SELECT
|
|
|
|
PrintNUMS 5, SpeedLEVEL
|
|
Speed = SetSPEED
|
|
|
|
PUT (166, 142), BigBOX, PSET
|
|
|
|
END SUB
|
|
|
|
SUB TopTEN
|
|
|
|
GET (84, 119)-(554, 359), BigBOX
|
|
LINE (84, 119)-(554, 359), 0, BF
|
|
PUT (240, 137), TTBox, PSET
|
|
COLOR 9
|
|
LOCATE 11, 15
|
|
PRINT "#"; SPACE$(2); "NAME"; SPACE$(21); "DATE"; SPACE$(10); "SCORE"
|
|
COLOR 7
|
|
LOCATE 22, 26
|
|
PRINT "PRESS ANY KEY TO RETURN TO GAME"
|
|
PrintROW = 12
|
|
FOR c = 0 TO 9
|
|
LOCATE PrintROW, 14
|
|
COLOR 9: PRINT USING "##"; c + 1
|
|
COLOR 3
|
|
IF ScoreDATA(c).PlayerSCORE > 0 THEN
|
|
LOCATE PrintROW, 18
|
|
PRINT ScoreDATA(c).PlayerNAME
|
|
LOCATE PrintROW, 40
|
|
PRINT ScoreDATA(c).PlayDATE
|
|
LOCATE PrintROW, 56
|
|
PRINT USING "###,###"; ScoreDATA(c).PlayerSCORE
|
|
END IF
|
|
PrintROW = PrintROW + 1
|
|
NEXT c
|
|
LINE (87, 121)-(551, 357), 13, B
|
|
LINE (89, 123)-(549, 355), 13, B
|
|
PSET (89, 123), 15
|
|
LINE (91, 125)-(547, 353), 13, B
|
|
PSET (91, 125), 15
|
|
LINE (100, 157)-(538, 334), 13, B
|
|
FOR LR = 174 TO 334 STEP 16
|
|
LINE (100, LR)-(538, LR), 13
|
|
NEXT LR
|
|
LINE (124, 158)-(124, 334), 13
|
|
LINE (300, 158)-(300, 334), 13
|
|
LINE (402, 158)-(402, 334), 13
|
|
|
|
a$ = INPUT$(1)
|
|
PUT (84, 119), BigBOX, PSET
|
|
|
|
END SUB
|
|
|
|
SUB Wipe
|
|
|
|
FOR n = 1 TO 660
|
|
DO
|
|
x = INT(RND * 30)
|
|
y = INT(RND * 22)
|
|
xx = x + 1: yy = y + 1
|
|
LOOP UNTIL WipeBOX(x, y) = 0
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 9, BF
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 4, BF
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 10, BF
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 15, BF
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 10, BF
|
|
LINE (xx * 20, yy * 20)-(xx * 20 + 19, yy * 20 + 19), 8, BF
|
|
WipeBOX(x, y) = 1
|
|
NEXT n
|
|
|
|
ERASE WipeBOX
|
|
|
|
END SUB
|