SmileBASIC

プログラムリスト

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

ページトップへ