コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
スーパーアイス (~ ◆Ut2/l67kIid3
2019/7/25 0:59
質問
>つづける がんばる
みたいな感じの
矢印を動かして決定する奴の
作り方を教えてください。
ちなみにプチコン3号です。

コメント

アバター
Soybeanman 2019/7/25 9:15 ◆SDLkyXUP6WqK
文字はPRINTやGPUTCHRなどで簡単に表示できます。
矢印で選ぶ、と言うことはおそらくボタン入力が必要になるのでBUTTON関数も必要になってくるでしょう。
矢印の位置を保存する為に変数を用意する必要がありそうです(PRINTの際はCHKCHR関数で矢印の位置を特定できるが非常にややこしくなるのでここでは使わない)
つづける、がんばるの選択肢も配列を使うと便利になりますが、それはまたの機会に。
最終的にプログラムはどうなるかと言うと、(文の最初の.はインデント用なので実際書くときは空白を入れて下さい)
ACLS
PRINT " つづける" '最初の空白を忘れずに
PRINT " がんばる"
WHILE BUTTON() AND #A 'Aボタンで終わる
. IF BUTTON() AND #UP THEN
. . N=N-1 '上に移動
. ENDIF
. IF BUTTON() AND #DOWN THEN
. . N=N+1 '下に移動
. ENDIF
. N=MAX(N,0) '0未満にならないようにする
. N=MIN(N,1) '1超過にならないようにする
. LOCATE 0,N
. PRINT "→"
. WAIT 1
WEND
PRINT N '最後に0が出たらつづける
'1ならばがんばる

みたいになると思います。
アバター
キルル2 2019/7/25 10:12 ◆rGE712Ruejv7
配列を使った方が良いです
配列を使う例を示します
ACLS
VAR X[2]
VAR Y[2]
VAR MSG$[2]
VAR C[2]
VAR N
VAR I
VAR B1
VAR MOVESE=矢印移動時の音番号
VAR SELECTSE=決定ボタン押下時の音番号
X[0]=つづけるのX座標
Y[0]=つづけるのY座標
MSG$[0]="つづける"
C[0]=つづけるの色
X[1]=がんばるのX座標
Y[1]=がんばるのY座標
MSG$[1]="がんばる"
C[1]=がんばるの色
'決定ボタンが押されるまでループ
REPEAT
'ボタン取得、連射機能付き
B1=BUTTON(1)
'上ボタンが押されたら矢印移動
IF B1 AND #UP THEN
INC N
'矢印が範囲外にならないようにする
IF N>1 THEN
N=0
ENDIF
BEEP MOVESE
ENDIF
'下ボタンが押されたら矢印移動
IF B1 AND #DOWN THEN
DEC N
'矢印が範囲外(ry
IF N<0 THEN
N=1
ENDIF
BEEP MOVESE
ENDIF
'決定ボタン押下判定(AとX)
IF B1 AND (#A+#X) THEN
BEEP SELECTSE
'少し待つ
WAIT 30
'ループ脱出
BREAK
ENDIF
'つづける、がんばるの順に描画
FOR I=0 TO 1
GPUTCHR X[I],Y[I],MSG$[I],1,1,C[I]
NEXT
'矢印描画
GPUTCHR X[N]-8,Y[N],">"
UNTIL 0
アバター
だにえる 2019/7/25 12:50 ◆m76OCAQyrWGt
サンプル
WHILE 1
 VSYNC
 CLS
 B=BUTTON()
 IF B AND #LEFT THEN
  DEC N
 ELSEIF B AND #RIGHT THEN
  INC N
 ENDIF
 LOCATE N*5,0
 PRINT ">"
WEND
アバター
みなつ 2019/7/25 13:04 ◆hJTkStjweib1
こんな感じでもいけるかも!( ゚∀゚)
WHILE 1
 B=BUTTON()
 IF B AND #LEFT THEN A=0 ’左を押したら「つづける」(A=0)
 IF B AND #RIGHT THEN A=1 ’右を押したら「がんばる」(A=1)

 LOCATE 10,10
 IF A==0 THEN
  PRINT ">つづける  がんばる"
 ELSE
  PRINT " つづける >がんばる"
 ENDIF

  'Aボタンを押したらループを抜ける
 IF B AND #A THEN BREAK
 VSYNC
WEND
アバター
ツララ 2019/7/25 13:14 ◆ArUdBYOYME1V
んーと、つまり・・・
矢印が「特定の位置にある」時に決定ボタンを押した場合の「分岐のさせ方」が知りたいんですよね?

矢印が特定の場所にしか動かせない処理は
場所を番号で表すとして、例えば十字キーの右を押すと+1、左で-1されて左右でループ
番号をN、選択肢の数をMとすると
BTN=BUTTON(1)
N=(N+!!(BTN AND #RIGHT)-!!(BTN AND #LEFT)+M)MOD M
キルル2さん方式で、矢印の表示座標は予め配列に入れておいて
番号で (X[N],Y[N]) みたく簡単に指定できるようにすると楽。

んで、番号というか数値で処理を分岐させるなら
ON 数値 GOTO @ラベル0,@ラベル1,… の形が使えるので
決定ボタンで入力待ちループを抜けたら、選択してる番号のラベルにジャンプさせればいいんじゃないんです?

Soybeanmanさんはすごい分かりやすく丁寧に書いてくれてますけど
スーパーアイスさんもまるっきりの初心者ってわけでもないので

ACLS
CX=0:CY=0
LOCATE CX,CY:?"→つづける":?" がんばる"
REPEAT
 BTN=BUTTON(1) AND (3+#A)
 IF BTN AND 3 THEN
  LOCATE CX,CY+N:?" ";
  N=MIN(MAX(N+!!(BTN AND 2)-(BTN AND 1),0),1)
  LOCATE CX,CY+N:?"→";
 ENDIF
UNTIL BTN AND #A
LOCATE CX,CY+3
?"N=";N
IF N TNEN ?"がんばるをせんたく" ELSE ?"つづけるをせんたく"

みたく書いても大丈夫なんじゃないんです?
アバター
スーパーアイス (~ 2019/7/26 4:47 ◆Ut2/l67kIid3
出来ました!
皆様丁寧に教えてくださり、
ありがとうございます!

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -