>>234
補足
IF A==・・・
を覚えたら
IF A<=10 THEN PRINT A ELSE BEEP
これは
もし変数Aが10より小さかったら変数Aを表示それ以外だったらBEEP
です。
IF A>=1 THEN PRINT A ELSE BEEP
これは
もし変数Aが1より大きかったら変数Aを表示それ以外だったらBEEP
です。
ほかにも
IF A!=1 THEN BEEP ELSE PRINT"ヘンスウAノカズハ1!”
もし変数Aが1以外だったらBEEP 1だったらPRINT〜です。
!はプチコンでは真偽反転という意味があります。
まぁこれを理解できたら覚えましょう(殴
僕から言えることは以上です。
ACLS:CLEAR:SYSBEEP=0
BGMSTOP:TALKSTOP
@LOOP
VSYNC 1
LOCATE X,Y:?"↑"
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y-Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
IF X<0 THEN X=0
IF X>31 THEN X=31
IF Y<0 THEN Y=0
IF Y>23 THEN Y=23
LOCATE X,Y:?"↑"
GOTO @LOOP
>>331
ご指摘ありがとうございます。
ACLS:CLEAR:SYSBEEP=0
BGMSTOP:TALKSTOP
@LOOP
VSYNC 1
LOCATE X,Y:?" "
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y-Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
IF X<0 THEN X=0
IF X>31 THEN X=31
IF Y<0 THEN Y=0
IF Y>23 THEN Y=23
LOCATE X,Y:?"↑"
GOTO @LOOP
@LOOP
VSYNC 1:GCLS
B=BUTTON()
IF B AND 1 THEN Y=Y-1
IF B AND 2 THEN Y=Y+1
IF B AND 4 THEN X=X-1
IF B AND 8 THEN X=X+1
SPHOME 0,-X,-Y
SPOFS 0,X,Y;16
GOTO @LOOP
>>352
WAIT 1
PB=BUTTON()
IF (PB AND 1) AND ATU!=1 THEN PY=PY-1:PMUKI=30
IF (PB AND 2) AND ATS!=1 THEN PY=PY+1:PMUKI=26
IF (PB AND 4) AND ATH!=1 THEN PX=PX-1:PMUKI=28
IF (PB AND 8) AND ATM!=1 THEN PX=PX+1:PMUKI=24
S=S+1
IF S>10 THEN PMUKI=PMUKI+1
IF S==20 THEN S=0
SPSET 0,PMUKI,2,0,0,2,16,16
SPOFS 0,PX,PY
PMUKI=PMUKI-PMUKI%2
ATU=0:ATS=0:ATH=0:ATM=0:ATAI=0
FOR ATAY=0 TO 2
FOR ATAX=0 TO 2
IF ATAX==0 AND ATAY==0 THEN @ATASK
IF ATAX==2 AND ATAY==2 THEN @ATASK
IF ATAX==2 AND ATAY==0 THEN @ATASK
IF ATAX==0 AND ATAY==2 THEN @ATASK
IF ATAX==1 AND ATAY==1 THEN @ATASK
ATAI=ATAI+1
PATX(ATAI)=FLOOR(PX/8)+ATAX
PATY(ATAI)=FLOOR(PY/8)+ATAY
BGREAD(1,PATX(ATAI),PATY(ATAI)),CHR(ATAI),PAL,H,V
IF CHR(1)!=72 AND CHR(1)!=73 AND CHR(1)!=105 AND CHR(1)!=104 THEN ATU=1
IF CHR(2)!=72 AND CHR(2)!=73 AND CHR(2)!=105 AND CHR(2)!=104 THEN ATH=1
IF CHR(3)!=72 AND CHR(3)!=73 AND CHR(3)!=105 AND CHR(3)!=104 THEN ATM=1
IF CHR(4)!=72 AND CHR(4)!=73 AND CHR(4)!=105 AND CHR(4)!=104 THEN ATS=1
@ATASK
NEXT ATAX
NEXT ATAY
>>381
すいません全部のプログラムリスト
ACLS
PX=110
PY=90
B=64
VISIBLE 1,1,1,1,1,1,
SPSET 1,64,2,0,0,0
SPANM 1,4,20,0
@LOOP
SPOFS 1,PX,PY
A=BUTTON()
IF A==4 THEN PX=PX-1
IF A==8 THEN PX=PX+1
IF A==1 THEN PY=PY-1
IF A==2 THEN PY=PY+1
IF A==9 THEN PY=PY-1:PX=PX-1
IF A==5 THEN PY=PY+1:PX=PX-1
IF A==10 THEN PY=PY-1:PX=PX+1
IF A==6 THEN PY=PY+1:PX=PX+1
IF A==8 THEN B=64
IF A==4 THEN B=72
IF A==1 THEN B=76
IF A==2 THEN B=68
VSYNC 1
GOTO @LOOP
CLEAR:ACLS
L=100
R=0
V=0
P=0.95
TK=0
@LOOP
GPAGE 0,N,2-N:N=2-N
C=128
W=200
GCLS 224
GFILL 0,Y,255,255,10
Z=5
J=J+1
WZ=W:VZ=V
Y=191
FOR I=0 TO L-1 STEP 2
GFILL C+W+VZ,Y,C-W+VZ,Y-Z*2,13
GFILL C+W/1.1+VZ,Y,C+W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/1.1+VZ,Y,C-W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/18+VZ,Y,C+W/18+VZ,Y-Z*2,15-(J%12<6)*2
C=C+R:Y=Y-Z:VZ=VZ*P:W=W*P:Z=Z*P:J=J+1:Y=Y-TK
NEXT
'WAIT 1
K=BUTTON()
IF K AND 1 THEN TK=TK+0.1
IF K AND 2 THEN TK=TK-0.1
IF K AND 4 THEN V=V+5
IF K AND 8 THEN V=V-5
IF K AND 16THEN R=R+0.1
IF K AND 32THEN R=R-0.1
GOTO @LOOP
@LOOP
GPAGE 0,N,2-N:N=2-N
(NEW!!!)CLS
C=128
W=200
GCLS 224
GFILL 0,Y,255,255,10
Z=5
(変更!!!)J=0
(NEW!!!)LOCATE 25,0
(NEW!!!)PRINT FLOOR(JJJ*40);"km/h"
(NEW!!!)IF JJJ<0 THEN JJJ=0
(NEW!!!)JJ=JJ+JJJ
(NEW!!!)J=J+JJ
WZ=W:VZ=V
Y=191
FOR I=0 TO L-1 STEP 2
GFILL C+W+VZ,Y,C-W+VZ,Y-Z*2,13
GFILL C+W/1.1+VZ,Y,C+W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/1.1+VZ,Y,C-W+VZ,Y-Z*20,1-(J%12<6)*1
GFILL C-W/18+VZ,Y,C+W/18+VZ,Y-Z*2,15-(J%12<6)*2
C=C+R:Y=Y-Z:VZ=VZ*P:W=W*P:Z=Z*P:J=J+1:Y=Y-TK
NEXT
'WAIT 1
K=BUTTON()
IF K AND 1 THEN TK=TK+0.1
IF K AND 2 THEN TK=TK-0.1
IF K AND 4 THEN V=V+5
IF K AND 8 THEN V=V-5
(NEW!!!)IF (K AND 16)==16 AND JJJ<3 THEN JJJ=JJJ+0.05
(NEW!!!)IF (K AND 16)==16 AND JJJ>3 AND JJJ<7 THEN JJJ=JJJ+0.005
(NEW!!!)IF (K AND 16)!=16 AND JJJ>0 THEN JJJ=JJJ-0.05
(NEW!!!)IF (K AND 32)==32 AND JJJ>0 THEN JJJ=JJJ-0.1
(変更!!!)IF K AND 512THEN R=R+0.1
(変更!!!)IF K AND 256THEN R=R-0.1
GOTO @LOOP
>>520
とりあえず基本的なものなら
BTN:ボタン、X:x座標、y:Y座標
BTN=BUTTON()
IF BTN AND 1 THEN Y=Y-8:SPCHR 管理番号,キャラ番号(上向きの絵)
IF BTN AND 2 THEN Y=Y+8:SPCHR 番号,下向き
・・・・
BGOFS 0,X,Y,10
こんなかんじですね。当然これだけでは動かないので参考程度に。
下画面に四角いボタンをいくつか表示して
そこをタッチすると何か動作する(音が出るとか色が変わるとか)
というプログラムを作ってるんだけど
@MAIN
TOUCH OUT T,X,Y
IF X<50 AND X>90 AND Y<50 AND Y>90 THEN @SUB1
GOTO @MAIN
@SUB1
(他の命令)
GOTO @MAIN
というわけで質問を少し変更させてもらいます。
どこをタッチしたか判定する際に、ボタンをシンプルな四角とかにして
IF X>50 AND X<90 AND Y>50 AND Y<90 THEN @SUB1
とやるくらいしか自分には思いつかないのですが
もっと複雑な形のボタンとか、移動するスプライトをボタンがわりにするとかのときには
この方法では限界がありそうです。
これに関連する命令とかってないでしょうか。
連投すみません。
20面ダイスをふるプログラムを書こうとしたのですが、
一度走らせると大量の結果が吐き出されます。
FOR〜NEXTを入れてもまるでダメ。
このままだとパラノイアをプレイするのに幸福ではありません!
何卒お力添えをお願いします。
以下プログラムです。
@DICE
B=BUTTON(2)
IF B=16 THEN GOTO @RAMDOM
IF B!=16 THEN GOTO @DICE
@RAMDOM
D=RND(21)
IF D=0 THEN GOTO @RAMDOM
PRINT D
GOTO @DICE
ACLS
SPSET 0,127+2048
SPOFS 0,200,120
FOR I=1 TO 2
SPSET I,1194
SPSCALE I,0.25,100
SPROT I,(I AND 1)*90
SPLINK I,0
NEXT
@LOOP
VSYNC
IF BUTTON(2)==16 THEN
SPROT 0 OUT R
FOR I=0 TO 2
SPANIM I,"R",-60,R+360+(I AND 1)*90,0
NEXT
SPSTART
ENDIF
IF BUTTON(0)==0 THEN SPSTOP
GOTO @LOOP
@LOOP
VSYNC
OTX=TX:OTY=TY 'タッチ移動量を知るための比較用に、前にタッチした位置を覚えておく。OldTouchX/Y
TOUCH OUT STTM,TX,TY '現在のタッチ位置を知る
IF STTM==0 THEN GOTO @LOOP 'タッチしてない時は何もしない
IF STTM==1 THEN OTX=TX:OTY=TY 'タッチした瞬間だけは移動させない処理
SPOFS 0 OUT X,Y 'マウスカーソルの現在位置を知る
X=X+TX-OTX 'タッチ移動量分だけ変数X/Yを変化ざる
Y=Y+TY-OTY
IF X<0 THEN X=0 'マウスカーソルが画面外に行きそうなのを矯正する処理ここから
IF X>399 THEN X=399
IF Y<0 THEN Y=0
IF Y>239 THEN Y=239 'ここまで
SPOFS 0,X,Y '結果を元にマウスカーソルの位置を設定する
GOTO @LOOP
使用したコード
--------------------
@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度毎に点を打つ、というものですが、