プログラムリスト
SYS/GAME1DOTRC
トップメニュー「SmileBASICでプログラムを作る」から、LOAD"SYS/GAME1DOTRC"↵
でプログラムが読み込まれます。キーボードの「EDIT」キーを押すと、このプログラムが自由に編集できます。
'
' GAME1DOTRC
' DOT-RACER V1.1 イショクバン
'
XSCREEN 0
DISPLAY 0
VISIBLE 1,1,1,1
CLS
COLOR 15
'
LOGOSP=0:SPSET LOGOSP,4095:SPHIDE LOGOSP
'
MUTEKI=0
DOT$="."
SPC$=" "
ENE$=""
FX=9
FY=3
FW=24
FH=24
DIM MYCHR$[4],VX[4],VY[4]
DATA "", 1, 0 '0:RIGHT
DATA "", 0, 1 '1:DOWN
DATA "",-1, 0 '2:LEFT
DATA "", 0,-1 '3:UP
FOR I=0 TO 3
READ MYCHR$[I],VX[I],VY[I]
VX[I]=SGN(VX[I])
VY[I]=SGN(VY[I])
NEXT
'---
EMAX=5 'ENEMY COUNT MAX
DIM E[EMAX,16]
_X=0:_Y=1:_Z=2:_C=3:_D=4:_W=5:_WM=6 'ID
'---
FL=0:RQ=FL:BGMW=FALSE
GOSUB @TITINIT
'---
WHILE 1
OLDB=B
B=STKANDBTN()
'
GOSUB @FLOW
'
VSYNC 1
WEND
END
'
@FLOW 'ガメンセンイ'
'
IF RQ!=FL THEN
IF BGMW AND BGMCHK() THEN RETURN
BGMW=FALSW
'--- アタラシイ ガメンヘ
ON RQ GOSUB @TITINIT,@SSINIT,@GAMEINIT,@GOVINIT,@SCINIT
FL=RQ
'--- ガメンゴトノショリヘ
ENDIF
ON FL GOTO @TIT,@SSTART,@GAME,@GOVER,@SCLEAR
RETURN
'
'HIT ANY BUTTON
'
@ANYBUT
BTN=FALSE
IF OLDB THEN RETURN
IF B==0 THEN RETURN
BTN=TRUE
RETURN
'
@TIT
'
GOSUB @TITPUT
GOSUB @ANYBUT
IF BTN==FALSE THEN RETURN
BGMSTOP
'
SPANIM LOGOSP,"XY",-30,330,210
'
RQ=1
RETURN
'---
@TITINIT
CLS
GCLS
GPRIO 1024
FOR I=0 TO 200 STEP 6
GBOX I,I,399-I,239-I,RGB(0,48,0)
NEXT
BGMPLAY 14
STG=0 'STAGE
SCO=0 'SCORE
I=0
RETURN
@TITPUT
C=VAL("&H"+MID$("8C9DDFFDD9C8",FLOOR(I),1))
I=I+0.1
IF I>=12 THEN I=0
COLOR C
X=15:Y=11:Z=-200
LOCATE X,Y+0,Z:PRINT" "
LOCATE X,Y+1,Z:PRINT" "
LOCATE X,Y+2,Z:PRINT" "
COLOR 13
X=17:Y=Y+7:Z=0
LOCATE X,Y,Z:PRINT"PUSH ANY BUTTON!"
COLOR 15
X=10:Y=Y+5
LOCATE X,Y,Z
PRINT"(C)2011-2014 SMILEBOOM CO.LTD."
'
SPOFS LOGOSP,200,48,-32:SPSHOW LOGOSP
RETURN
'
@SSTART
'
W=W-1
IF W>=0 THEN
GOSUB @ANYBUT
IF BTN==FALSE THEN RETURN
ENDIF
RQ=2
RETURN
'---
@SSINIT
CLS
BGMSTOP
X=22:Y=14
W=60*1
LOCATE X,Y:PRINT"READY?"
RETURN
'
@SCLEAR
'
X=12:Y=12:Z=-200
COLOR RND(15)
LOCATE X,Y,Z:PRINT"OMEDETOU GOZAIMASU!"
GOSUB @ANYBUT
IF BTN==FALSE THEN RETURN
RQ=0
RETURN
@SCINIT
BGMPLAY 9
W=60*1
RETURN
'
@GOVER
'
C=C-0.1
IF C<0 THEN C=C+256
Z=-180
FOR TY=-4 TO 4
FOR TX=-4 TO 4
COLOR (SQR(POW(TX,2)+POW(TY,2))+C) MOD 16
X=MX+TX
Y=MY+TY
IF X<0 OR Y<0 OR X>49 OR Y>29 THEN CONTINUE
LOCATE X,Y,Z
PRINT ""
NEXT
NEXT
COLOR 15
X=17:Y=14:Z=-200
LOCATE X,Y,Z:PRINT"GAME OVER"
IF BGMCHK() THEN RETURN
GOSUB @ANYBUT
IF BTN==FALSE THEN RETURN
RQ=0
RETURN
'---
@GOVINIT
BGMPLAY 6
BGMW=TRUE
RETURN
'
@GAME
'
GOSUB @MYCAR
GOSUB @ENEMY
GOSUB @PUTSCO
IF DOT>0 THEN RETURN
'---
BEEP 32
COLOR 15
X=16:Y=14:Z=-200
LOCATE X,Y,Z:PRINT"STAGE CLEAR"
STG=STG+1
IF STG==4 THEN RQ=4:RETURN
'---
BGMPLAY 4
BGMW=TRUE
RQ=1
RETURN
'---
@MYCAR
MW=MW+1
IF MW<WMAX THEN RETURN
MW=0
LOCATE MX,MY:PRINT SPC$
WHILE 1
X=MX+VX[MD]:Y=MY+VY[MD]
D=MD
IF MS==FALSE THEN
'--- ニュウリョクカクニン
GOSUB @GETVEC
ELSE
MS=FALSE
ENDIF
'---
X=X+KX:Y=Y+KY
GOSUB @CHKDOT
IF C$==ENE$ AND MUTEKI==0 THEN
BEEP 55,-1000
RQ=3 'DEAD
RETURN
ENDIF
IF HIT==FALSE THEN BREAK
'--- ホウコウチョウセイ
D=(D-1) AND 3 'TURN LEFT
MD=D
WEND
'--- イドウ
IF C$==DOT$ THEN
'--- ドットゲット
DOT=DOT-1
SPD=(1+WTOP-WMAX)
SCO=SCO+SPD
WAV=52
PCH=SPD*300
PAN=127*(MX-FX)/FW
VOL=48
BEEP WAV,PCH,VOL,PAN
ENDIF
MX=X:MY=Y
GOSUB @PUTMCAR
RETURN
'---
@GETVEC
KX=0:KY=0:
IF B AND 1 THEN KY=-1:ND=3 'UP
IF B AND 2 THEN KY= 1:ND=1 'DOWN
IF B AND 4 THEN KX=-1:ND=2 'LEFT
IF B AND 8 THEN KX= 1:ND=0 'RIGHT
IF B AND 16 THEN
GOSUB @SPDUP
ELSE
GOSUB @SPDDOWN
ENDIF
'---
ND2=(ND+2) AND 3
IF (D!=ND) AND (D!=ND2) THEN
OX=X+KX:OY=Y+KY
C$=CHR$(CHKCHR(OX,OY))
IF C$==DOT$ THEN MS=TRUE:RETURN
IF C$==SPC$ THEN MS=TRUE:RETURN
ENDIF
KX=0:KY=0:MS=FALSE
RETURN
'---
@SPDUP
WMAX=WMAX-1
IF WMAX<2 THEN WMAX=2
RETURN
@SPDDOWN
WMAX=WMAX+1
IF WMAX>WTOP THEN WMAX=WTOP 'WAIT
RETURN
'---
@ENEMY
'IF ECNT==0 THEN RETURN
FOR I=0 TO ECNT-1
WM=E[I,_WM]
W=E[I,_W]
W=W+1
IF W>=WM THEN
W=0
WHILE 1
X=E[I,_X]:Y=E[I,_Y]:Z=0
D=E[I,_D]
COLOR 7
LOCATE X,Y,Z:PRINT CHR$(E[I,_C])
X=X+VX[D]:Y=Y+VY[D]
IF X==MX AND Y==MY AND MUTEKI==0 THEN
BEEP 55,-1000
RQ=3 'DEAD
RETURN
ENDIF
GOSUB @CHKDOT
IF HIT==FALSE THEN BREAK
D=(D+1) AND 3 'TURN RIGHT
E[I,_D]=D
WEND
E[I,_X]=X:E[I,_Y]=Y
E[I,_C]=CHKCHR(X,Y)
GOSUB @PUTENE
ENDIF
E[I,_W]=W
NEXT
RETURN
'---
@CHKDOT
C$=CHR$(CHKCHR(X,Y))
IF C$==DOT$ THEN HIT=FALSE:RETURN
IF C$==SPC$ THEN HIT=FALSE:RETURN
HIT=TRUE
RETURN
'---
@PUTSCO
COLOR 15
X=37
Y=5
Z=0
LOCATE X,Y,Z
PRINT FORMAT$("%5D",STG+1)
Y=Y+3
LOCATE X,Y,Z
PRINT FORMAT$("%5D",SCO)
Y=Y+3
LOCATE X,Y,Z
PRINT FORMAT$("%5D",1+WTOP-WMAX)
Y=Y+3
LOCATE X,Y,Z
PRINT FORMAT$("%5D",DOT)
RETURN
'---
@GAMEINIT
CLS
BGMPLAY 13
'---
COLOR 11
Z=-100
X=36
Y=4
LOCATE X,Y,Z:PRINT"STAGE";
Y=Y+3
LOCATE X,Y,Z:PRINT"SCORE";
Y=Y+3
LOCATE X,Y,Z:PRINT"SPEED";
Y=Y+3
LOCATE X,Y,Z:PRINT"REST";
COLOR 9
Y=Y+5
LOCATE X,Y:PRINT ":MOVE"
Y=Y+2
LOCATE X,Y:PRINT ":SPEED UP"
'---
MW=0
WTOP=8
WMAX=WTOP 'WAIT
MS=FALSE
'---
@STAGE1
'---
DATA""
DATA"......................"
DATA". ."
DATA"...................."
DATA".. .."
DATA".................."
DATA"... ..."
DATA"................"
DATA".... ...."
DATA".............."
DATA". . . . .. . . . ."
DATA". . . . .. . . . ."
DATA". . . . .. . . . ."
DATA". . . . .. . . . ."
DATA".............."
DATA".... ...."
DATA"................"
DATA"... ..."
DATA".................."
DATA".. .."
DATA"...................."
DATA". ."
DATA".......... ..........."
DATA""
DATA 11,22,-90,0 'ジキ スタ-トイチ X,Y,Z,DIR
DATA 11, 3,-90,0 'テキ1 シュツゲンイチ
DATA 11, 7,-90,0 'テキ2
DATA 11, 5,-90,0 'テキ3
DATA 11, 9,-90,0 'テキ4
'---
RESTORE @STAGE1
DOT=0
FOR Y=0 TO FH-1
READ C$
FOR X=0 TO FW-1
A$=MID$(C$,X,1)
IF A$==DOT$ THEN
COLOR 7
Z=0
DOT=DOT+1 'ドット ヲ カゾエル
ELSE
COLOR 13
Z=-120
ENDIF
LOCATE X+FX,Y+FY,Z
PRINT A$
NEXT
NEXT
'--- ジブン スタ-トイチ
READ MX,MY,MZ,MD
MX=MX+FX
MY=MY+FY
GOSUB @PUTMCAR
'--- テキノハッセイ
ECNT=STG+1
IF ECNT>EMAX THEN ECNT=EMAX
IF ECNT==0 THEN RETURN
FOR I=0 TO ECNT-1
READ X,Y,Z,D
X=X+FX
Y=Y+FY
E[I,_X]=X:E[I,_Y]=Y:E[I,_Z]=Z
E[I,_D]=D
E[I,_C]=CHKCHR(X,Y)
E[I,_WM]=20+RND(10)
GOSUB @PUTENE
NEXT
'---
RETURN
'---
@PUTMCAR
COLOR 3
LOCATE MX,MY,MZ
PRINT MYCHR$[MD]
RETURN
'---
@PUTENE
COLOR 5
LOCATE E[I,_X],E[I,_Y],E[I,_Z]
PRINT ENE$
RETURN
'-----
DEF STKANDBTN()
SLV=0.2 'THRESHOLD
BTN=BUTTON()
STICK OUT SX,SY
IF (SY>SLV) THEN BTN=BTN OR 1
IF (SY<-SLV) THEN BTN=BTN OR 2
IF (SX<-SLV) THEN BTN=BTN OR 4
IF (SX>SLV) THEN BTN=BTN OR 8
RETURN BTN
END