DECLARE SUB KbINIT ()
DECLARE SUB KbKILL ()
DECLARE SUB Prepare ()
DECLARE SUB FLIP ()
DECLARE SUB DrawALL ()
DIM SHARED Up%, Dn%, Lf%, Rg%
CONST Kamney = 20, SpdKam = 3, KamnepadTimer = 5
CONST ALStp = 8, ALYst = 4
DIM SHARED Act%, Viz%
DIM SHARED KamX%(Kamney), KamY%(Kamney)
DIM SHARED KamID%(Kamney), KamR%(Kamney), TimeNext%
DIM SHARED AlpX%, AlpY%, GameKadr%
DIM SHARED L%, R%, U%, D%
DIM SHARED ScrBF%(8001)
KbINIT
Prepare
DO
L% = L% OR Lf%
R% = R% OR Rg%
U% = U% OR Up%
D% = D% OR Dn%
IF GameKadr% THEN
AlpX% = AlpX% - ALStp * L%
IF AlpX% < ALStp * 2 THEN AlpX% = ALStp * 2
AlpX% = AlpX% + ALStp * R%
IF AlpX% > 639 - ALStp * 2 THEN AlpX% = 639 - ALStp * 2
AlpY% = AlpY% - ALYst * U%
IF AlpY% < ALYst * 2 THEN AlpY% = ALYst * 2
AlpY% = AlpY% + ALYst * D%
IF AlpY% > (349 - ALYst * 2) THEN AlpY% = 349 - ALYst * 2
TimeNext% = TimeNext% - 1
IF TimeNext% = 0 THEN
TimeNext% = KamnepadTimer
FOR i% = 1 TO Kamney
IF KamID%(i%) = 0 THEN
KamID%(i%) = 1
KamX%(i%) = RND * 580 + 30
KamY%(i%) = 30
KamR%(i%) = RND * 10 + 5
EXIT FOR
END IF
NEXT
END IF
FOR i% = 1 TO Kamney
IF KamID%(i%) = 1 THEN
KamY%(i%) = KamY%(i%) + SpdKam
IF KamY%(i%) > 350 THEN KamID%(i%) = 0
END IF
NEXT
GameKadr% = GameKadr% - 1
L% = 0: R% = 0: U% = 0: D% = 0
END IF
DrawALL
FLIP
LOOP UNTIL EscK%
KbKILL
END
' Процедуры прерывания
UpOn: Up% = 1: RETURN
UpOff: Up% = 0: RETURN
DnOn: Dn% = 1: RETURN
DnOff: Dn% = 0: RETURN
LfOn: Lf% = 1: RETURN
LfOff: Lf% = 0: RETURN
RgOn: Rg% = 1: RETURN
RgOff: Rg% = 0: RETURN
EscOn: EscK% = 1: RETURN
TmEVENT: PLAY "p64": GameKadr% = GameKadr% + 1
Kb$ = INKEY$: RETURN
SUB DrawALL
LINE (0, 0)-(639, 349), 9, BF
LINE (50, 10)-(150, 40), 7, BF 'PLOSHADKA
LINE (50, 10)-(150, 40), 10, B 'ploshadka
LINE (AlpX% - 10, AlpY% - 10)-(AlpX% + 10, AlpY% + 10), 12, BF 'chelovek
FOR i% = 1 TO Kamney
IF KamID%(i%) = 1 THEN
CIRCLE (KamX%(i%), KamY%(i%)), KamR%(i%), 15
PAINT (KamX%(i%), KamY%(i%)), 7, 15
END IF
NEXT
END SUB
SUB FLIP
SWAP Act%, Viz%
SCREEN , , , Viz%
WAIT &H3DA, 8
SCREEN , , Act%, Viz%
'WAIT &H3DA, 8, 8
END SUB
SUB KbINIT
' Назначаем клавишу вверх
KEY 15, "АH"
KEY 16, "А" + CHR$(200)
' Назначаем клавишу вниз
KEY 17, "АP"
KEY 18, "А" + CHR$(208)
' Назначаем клавишу лево
KEY 19, "АK"
KEY 20, "А" + CHR$(203)
' Назначаем клавишу право
KEY 21, "АM"
KEY 22, "А" + CHR$(205)
' Назначаем клавишу ESC
KEY 23, CHR$(0) + CHR$(1)
' Назначаем процедуры прерывания
ON KEY(15) GOSUB UpOn
ON KEY(16) GOSUB UpOff
ON KEY(17) GOSUB DnOn
ON KEY(18) GOSUB DnOff
ON KEY(19) GOSUB LfOn
ON KEY(20) GOSUB LfOff
ON KEY(21) GOSUB RgOn
ON KEY(22) GOSUB RgOff
ON KEY(23) GOSUB EscOn
' Включаем процедуры
KEY(15) ON
KEY(16) ON
KEY(17) ON
KEY(18) ON
KEY(19) ON
KEY(20) ON
KEY(21) ON
KEY(22) ON
KEY(23) ON
END SUB
SUB KbKILL
' Сбрасываем векторы
KEY(15) OFF
KEY(16) OFF
KEY(17) OFF
KEY(18) OFF
KEY(19) OFF
KEY(20) OFF
KEY(21) OFF
KEY(22) OFF
KEY(23) OFF
END SUB
SUB Prepare
ON PLAY(1) GOSUB TmEVENT
PLAY ON
PLAY "MB ML P64"
Act% = 1: Viz% = 0
SCREEN 9, , Act%, Viz%
AlpX% = 320: AlpY% = 320
TimeNext% = 100
END SUB