Code: Select all
'Meanwhile attempting to teach my brother how to program in QB I coded this
'tiny "game": some type of EGA shooter with some cheesy graphics, has some
'form of pixel by pixel scrolling and is extremely slow due to the nature
'of EGA (and how QB uses it). This is probably the slowest "game" you will
'ever encounter.
'Code is linear and not optimized at all so my brother could understand
'what has been done. Apparently he didn't and now when I'm looking this,
'I don't get it either. The ways of the QB are very mysterious...
'BTW, it runs faster on 25MHz 486 than a 3600Mhz P4
SCREEN 7, 0, 1, 0
'SCREEN 13
RANDOMIZE TIMER
CLS : PRINT "SPACE DEMO" 'cheesy way to do text effects
FOR Y% = 0 TO 7
FOR X% = 0 TO 79
A% = POINT(X%, Y%)
Y! = Y! + .4
X! = X! + -.02
XX% = 32 + X% * 3 + X!
YY% = 16 + Y% * 3 + Y!
IF A% <> 0 THEN LINE (XX%, YY%)-(XX% + 2, YY% + 2), 1 + RND * 14, BF
'IF A% <> 0 THEN PSET (XX%, YY%), 1 + RND * 14
'IF A% <> 0 THEN CIRCLE (XX%, YY%), 1, 1 + RND * 14, , , 1
NEXT
Y! = 0
NEXT
LOCATE 1, 1: PRINT " "
LOCATE 13, 13: PRINT "Cursor keys move"
LOCATE 14, 15: PRINT "Space shoots"
LOCATE 15, 16: PRINT "Esc quits"
LOCATE 16, 13: PRINT "J = Joystick mode"
LOCATE 17, 13: PRINT "K = Keyboard mode"
LOCATE 19, 10: PRINT "Hit any key to continue"
LOCATE 23, 13: PRINT "2006 TęEE co.(TM)"
PCOPY 1, 0
SLEEP
CLS
DIM NONE(64), SHIP(64), ENEMY(64), GND(64), MAP%(19, 15)
DIM SNON(16), SHOT(16), XTABLE%(19), YTABLE%(10)
GET (0, 0)-(15, 15), NONE
FOR Y% = 0 TO 15
FOR X% = 0 TO 15
READ A%: PSET (X%, Y%), A%
NEXT X%
NEXT Y%
GET (0, 0)-(15, 15), SHIP
FOR Y% = 0 TO 15
FOR X% = 0 TO 15
READ A$: PSET (X%, Y%), VAL("&H" + A$)
NEXT X%
NEXT Y%
GET (0, 0)-(15, 15), GND
PUT (0, 0), NONE, PSET
GET (0, 0)-(7, 7), SNON
CIRCLE (3, 3), 3, 14, , , 1
PAINT (3, 3), 15, 14
GET (0, 0)-(7, 7), SHOT
PUT (0, 0), NONE, PSET
CIRCLE (7, 7), 7, 2, , , 1
PAINT (7, 7), 4, 2
LINE (4, 10)-(10, 10), 3
PSET (4, 4), 15
PSET (10, 4), 15
GET (0, 0)-(15, 15), ENEMY
FOR Y% = 0 TO 15
FOR X% = 0 TO 19
READ A%: MAP%(X%, Y%) = A%
NEXT X%
NEXT Y%
FOR Y% = 0 TO 10
FOR X% = 0 TO 19
XTABLE%(X%) = X% * 16
YTABLE%(Y%) = Y% * 16 + 8
NEXT X%
NEXT Y%
CLS
X% = 159
Y% = 183
LOADHIGHSCORE:
OPEN "SDEMOHI.DAT" FOR BINARY AS #1
IF LOF(1) = 0 THEN
PTS$ = MKL$(0)
PUT #1, 1, PTS$
HIPTS& = 0
CLOSE
GOTO LOADHIGHSCORE
END IF
HIPTS& = CVL(INPUT$(4, 1))
WHILE KEYS% <> 1
KEYS% = INP(&H60)
'LOCATE 2, 1: PRINT KEYS%
IF JOY% = 1 THEN
IF STICK(0) <40> 160 THEN X% = X% + 2
SKIPSTRIGS:
IF STICK(1) <40> 160 THEN Y% = Y% + 2
SKIPSTRIGS2:
IF STRIG(0) = -1 AND FIRE% = 0 THEN FIRE% = 1
END IF
SELECT CASE KEYS%
CASE 77: X% = X% + 4
CASE 75: X% = X% - 4
CASE 80: Y% = Y% + 4
CASE 72: Y% = Y% - 4
CASE 57
IF FIRE% = 0 THEN FIRE% = 1
CASE 36
IF JOY% = 0 THEN JOY% = 1
CASE 37
IF JOY% = 1 THEN JOY% = 0
CASE ELSE: nothing$ = INKEY$
END SELECT
IF X% <0> 303 THEN X% = 303
IF Y% <8> 183 THEN Y% = 183
IF frameskip% = 2 THEN
frameskip% = 0
IF yyy% <0> 15 THEN yyyy% = yyyy% - 16
tx% = XTABLE%(XX%)
ty% = YTABLE%(YY%) + stepy%
SELECT CASE MAP%(XX%, yyyy%)
CASE 0: PUT (tx%, ty%), NONE, PSET
CASE 1: PUT (tx%, ty%), GND, PSET
END SELECT
NEXT XX%
NEXT YY%
stepy% = stepy% + 1
IF stepy% > 15 THEN yyy% = yyy% - 1: stepy% = 0
END IF
frameskip% = frameskip% + 1
IF FIRE% = 1 THEN
SX% = X% + 5
SY% = Y% - 7
FIRE% = 2
END IF
IF FIRE% = 2 THEN
SY% = SY% - 5
IF SY% <8>= 183 THEN
ENEMYX% = 0: PUT (EX%, EY%), NONE, PSET
PTS& = PTS& - 50
ELSE
PUT (EX%, EY%), ENEMY, PSET
END IF
END IF
IF ENEMYX% = 1 THEN
IF FIRE% = 2 THEN
IF EY% + 16 > SY% AND EY% <SY> SX% AND EX% - 6 <SX> Y% AND EY% <Y> EX% AND X% - 16 < EX% THEN
KEYS% = 1: LOCATE 12, 14: PRINT "Game over !!!"
END IF
END IF
END IF
PUT (X%, Y%), SHIP, PSET
IF PTS& <0> 9999999 THEN PTS& = 9999999
LOCATE 1, 1: PRINT "Points :"; PTS&
LOCATE 1, 19: PRINT "High score :"; HIPTS&
PCOPY 1, 0
PUT (X%, Y%), NONE, PSET
IF FIRE% = 2 THEN PUT (SX%, SY%), SNON, PSET
IF ENEMYX% = 1 THEN PUT (EX%, EY%), NONE, PSET
nothing$ = INKEY$
WEND
IF HIPTS& < PTS& THEN
PTS$ = MKL$(PTS&)
PUT #1, 1, PTS$
END IF
CLOSE
CLS
LOCATE 1, 1: PRINT "GAME OVER" 'cheesy way to do text effects
FOR Y% = 0 TO 7
FOR X% = 0 TO 79
A% = POINT(X%, Y%)
Y! = Y! + .4
X! = X! + .02
XX% = 32 + X% * 3 + X!
YY% = 40 + Y% * 3 - Y!
IF A% <> 0 THEN CIRCLE (XX%, YY%), 1, 1 + RND * 14, , , 1
NEXT
Y! = 0
NEXT
LOCATE 1, 1: PRINT SPACE$(40)
LOCATE 1, 1: PRINT "You got" + STR$(PTS&) + " pts."
FOR Y% = 0 TO 7
FOR X% = 0 TO 159
A% = POINT(X%, Y%)
Y! = Y! + .3
X! = X! + .005
XX% = 30 + X% * 2 - X!
YY% = 100 + Y% * 2 + Y!
IF A% <> 0 THEN PSET (XX%, YY%), 15
NEXT
Y! = 0
NEXT
LOCATE 1, 1: PRINT " "
PRINT " "
PCOPY 1, 0
SLEEP
END
'The final result is, that my brother cannot understand his own code
'and due to his stupidness I decided not to try to teach QB to him.
DATA 0, 0, 0, 0, 0, 0, 0,08,08, 0, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0, 0, 0, 0,08,08, 0, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0, 0, 0,08,07,07,08, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0, 0, 0,08,11,11,08, 0, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0, 0,08,07,11,11,07,08, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0, 0,08,11,11,11,11,08, 0, 0, 0, 0, 0
DATA 0, 0, 0, 0,08,07,11,11,11,11,07,08, 0, 0, 0, 0
DATA 0, 0, 0, 0,08,07,11,11,11,11,07,08, 0, 0, 0, 0
DATA 0, 0, 0,08,08,07,07,07,07,07,07,08,08, 0, 0, 0
DATA 0, 0, 0,08,08,07,07,07,07,07,07,08,08, 0, 0, 0
DATA 0, 0,08,07,08,07,07,07,07,07,07,08,07,08, 0, 0
DATA 0, 0,08,07,08,07,07,07,07,07,07,08,07,08, 0, 0
DATA 0,08,07,07,08,07,07,07,07,07,07,08,07,07,08, 0
DATA 0,08,07,07,08,07,07,07,07,07,07,08,07,07,08, 0
DATA 08,07,08,08,08,07,07,07,07,07,07,08,08,08,07,08
DATA 08,08, 0, 0,08,07,14,14,14,14,07,08, 0, 0,08,08
DATA f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,7
DATA f,f,f,f,f,f,f,f,f,f,f,f,f,f,7,8
DATA f,f,7,7,7,7,7,7,7,7,7,7,7,7,8,8
DATA f,f,7,7,7,7,7,7,7,7,7,7,7,7,8,8
DATA f,f,7,7,8,8,8,8,8,8,8,8,7,7,8,8
DATA f,f,7,7,8,8,8,8,8,8,8,f,7,7,8,8
DATA f,f,7,7,8,8,3,3,3,9,f,f,7,7,8,8
DATA f,f,7,7,8,8,3,9,9,1,f,f,7,7,8,8
DATA f,f,7,7,8,8,3,9,9,1,f,f,7,7,8,8
DATA f,f,7,7,8,8,9,1,1,1,f,f,7,7,8,8
DATA f,f,7,7,8,8,f,f,f,f,f,f,7,7,8,8
DATA f,f,7,7,8,f,f,f,f,f,f,f,7,7,8,8
DATA f,f,7,7,7,7,7,7,7,7,7,7,7,7,8,8
DATA f,f,7,7,7,7,7,7,7,7,7,7,7,7,8,8
DATA f,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8
DATA 7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
DATA 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0
DATA 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1
DATA 1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0
DATA 0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0
DATA 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0