使用したコード
--------------------
@START
RTIME=MAINCNT
TIME=0
TEXT$=""
WHILE TIME<1000000
INC TIME
処理
WEND
PRINT MAINCNT-RTIME
---------------------
処理内容(ON〜GOTOの場合)
I=RND(4,4)
ON I GOTO @0,@1,@2,@3
@0:INC TEXT$+"X":GOTO @END
@1:INC TEXT$+"Y":GOTO @END
@2:INC TEXT$+"A":GOTO @END
@3:INC TEXT$+"B":GOTO @END
@END
----------------------
ON+DEFに使用した外部関数CHKNUM
DEF CHKNUM(NUM)
IF NUM==150 THEN RETURN 0
IF NUM==151 THEN RETURN 1
IF NUM==152 THEN RETURN 2
IF NUM==153 THEN RETURN 3
END
INPUT "ファイルメイ:",FILENAME$
UNKNOWN_STR=0
FOR I=0 TO LEN(FILENAME$)-1
CHKSTR$=MID$(FILENAME$,I,1) '1文字だけ取り出して
SCODE = ASC(CHKSTR$) 'アスキーコードに変換して
IF( (SCODE==45) OR
(SCODE==46) OR
(SCODE>=48 AND SCODE<=57 ) OR
(SCODE>=64 AND SCODE<=90 ) OR
(SCODE==95) OR
(SCODE>=97 AND SCODE<=122) )THEN
'OKの場合の処理(必要なし?)
ELSE
'NGの場合の処理
PRINT "NG →" + CHKSTR$
UNKNOWN_STR=1
ENDIF
NEXT
IF(LEN(FILENAME$)==0 OR LEN(FILENAME$)>14 OR UNKNOWN_STR==1)THEN
'ファイル名が不正な場合の処理
ELSE
SAVE "TXT:"+FILENAME$, TXTDATA$
ENDIF
この式で決め打ちされている、176と15という数値の意味が気になりますよね。
試しに(プチコン3号で)、
FOR I=0 TO 190:?I MOD 176<15;:NEXT
を実行してみると、最初と最後が1の連続になり、間に0の連続がある並びになりました。
このことから、この式の意味は、
『迷路の最上段または最下段を作る時は、変数Pの値は1』だろうと読み解きました。
敵を5匹、1匹ずつランダムで動かして自機が触ったら消える用にしたいの
ですがうまくいきません、関係ない敵が止まってしまいます。
どうしたらよろしいのでしょうか?
ACLS
SPSET 100,496
SPCOL 100
DIM X[5]
DIM Y[5]
DIM ED[5]
FOR I=0 TO 4
X[I]=192
Y[I]=112
ED[I]=0
SPSET 0+I,1060
SPOFS 0+I,192,112
SPCOL 0+I
NEXT
@LOOP
GOSUB @MY
GOSUB @TEKI
VSYNC 1
GOTO @LOOP
@MY
B=BUTTON( )
IF B AND 1 THEN PY=PY-1
IF B AND 2 THEN PY=PY+1
IF B AND 4 THEN PX=PX-1
IF B AND 8 THEN PX=PX+1
SPOFS 100,PX,PY
RETURN
@TEKI
FOR I=0 TO 4
IF ED[I]==-1 THEN RETURN
R=RND(4)
IF R==0 THEN VX=0:VY=-4
IF R==1 THEN VX=0:VY=4
IF R==2 THEN VX=-4VY=0
IF R==3 THEN VX=4:VY=0
X[I]=X[I]+VX:Y[I]=Y[I]+VY
SPANIM 0+I,"XY",-16,X[I],Y[I]
IF SPHITSP(100,0+I) THEN GOSUB @ED
NEXT
RETURN
@ED
BEEP 12
ED[I]=-1
SPCLR 0+I
RETURN
GOTO @LOOP
三角関数が分からないなりに自分勝手に考えを続けてみています。
FOR I=0 TO 360
X=100+COS(RAD(I))*50
Y=100+SIN(RAD(I))*50
NEXT
↑これは、よくある三角関数を使って円を描くプログラムで、
変数Iの値が、われわれ人間が普段よく使う角度の値として、
ゼロ度から360度まで1度毎に点を打つ、というものですが、