投稿
nobu divine-creator
アドベンチャーゲームのように、Aボタンが押されるまでテキストが止まって待ち、ボタンを押されるごとに繰り返しテキストが表示されるようにするには、どのような命令を使うのが最適でしょうか?
3そうだね
プレイ済み
返信[1]
親投稿
ゆう© YUTO617
IF B AND 16 THEN PRINT¨(好きな言葉)¨ですかねぇ......。LOCATE使わないと座標はだめだけど
2そうだね
プレイ済み
返信[2]
親投稿
nobu divine-creator
つまり、一文ずつ送りたい場合には、IF文をずっと繰り返さなければならないということですか? また、複数の文をまとめて表示する場合には、文のかたまり毎にIF文を繰り返すことになるわけですか?
0そうだね
プレイ済み
返信[3]
親投稿
KU kerorinU
DIM TEXT$[MAX] FOR I=0 TO MAX-1 REPEAT:UNTIL BUTTON(2)!=0 PRINT TEXT$[I] NEXT とかですね。予めTEXT$[]にはREADかなんかでテキストを代入しておいてください。
2そうだね
プレイ済み
返信[4]
親投稿
こうやま kouyama1967
>また、複数の文をまとめて表示する場合には、文のかたまり毎にIF文を繰り返すことになるわけですか?  同じ処理を毎回書く必要はありません。ある程度の長さまで同じプログラムを書く処理が、三回以上続くなら、「サブルーチン」と呼ばれる処理を作りましょう。例えば PRINT "(文章を表示する) @GOSUB MATSU PRINT "(文章を表示する)  : @MATSU 'ボタンがおされるまで しばらく まつ (しばらく待つ処理を、ここに書く) RETURN  とすれば、待つ処理は一回書けば間に合います。
2そうだね
プレイ済み
返信[5]
親投稿
ゆう© YUTO617
あ、『手間を省くなら』ということでしたか。
0そうだね
プレイ済み
返信[6]
親投稿
nobu divine-creator
KUさんの方法ですと、テキストをDATAにしてまとめて書いておき、READで読み込むということになるのですかね? その方法でも、文字の色を変えたり、選択肢による分岐と合わせて使用することができるのでしょうか? ついさっき思い付いたのですが、REPEATとUNTILを繰り返し使用することでも良いのでしょうか?
0そうだね
プレイ済み
返信[7]
親投稿
こうやま kouyama1967
 質問からゲームの細かい仕様がわかりにくいので、ちょっと即興でアドベンチャーゲームぽいものを作ってみました。こんな感じのものを作りたいのですか? ACLS PRINT "イヌに つづいて こんどは サルが あらわれた! GOSUB @MATU PRINT "サル「キジを さがしてるなら むこうに いるぞ」 GOSUB @MATU PRINT "この サルを なかまに しますか? END @MATU WAIT 30:PRINT "なにか ボタンを おせ REPEAT:UNTIL BUTTON():BEEP:WAIT 30 RETURN
2そうだね
プレイ済み
返信[8]
親投稿
InDoor TheInDoor12
文字の色を変えるのならこんなかんじですかね~。 DATA"あいうえお" DATA"<C>",5 DATA"かきくけこ" DATA"" WHILE 1 READ A$ IF A$=="" THEN BREAK IF A$=="<C>" THEN READ A:COLOR A CONTINUE ENDIF ?A$ (中略) WEND
1そうだね
プレイ済み
返信[9]
親投稿
DATA文で色を変えるなら、 サンプルのスタッフロールが 参考になるかもしれません。 ボタンの入力待ちは、りぴーとよりも、 ほいーる !ぼたん()WEND が短くて良いかと。 Aボタンに限定するなら、 ほいーる (ぼたん() あんど 16)==0WEND って感じですかね。
1そうだね
プレイ済み
返信[10]
親投稿
nobu divine-creator
皆さん、いろいろな手段を教えていただき、ありがとうございました♪ こうやまさん御提案のサブルーチンを使用する方法が初心者にも導入しやすく、それによりボタンの入力待ちをさせることができるようになりました♪(なお、今回使用できなかった方法は、自分がそれを扱えるようになったら、導入してみたいと思います♪) しかし、WAITを挟んで文を表示させると、後から文が表示される時に、その前に表示されていた文が上にスクロールしてしまうのですが、それは仕方がないのでしょうか? それを見越して、次に表示される文の位置を空けて表示させるようにするしかないのでしょうか?
0そうだね
プレイ済み
返信[11]
親投稿
ようすけ youslzh
公式の4/1企画のアレを参考にしてみては。
2そうだね
プレイ済み
返信[12]
親投稿
恐らくWAITは関係無いと思います。 画面の一番下でPRINTすると、 一行分スクロールします。 PRINT"あいうえお"; 最後にセミコロンを付けると スクロール(改行)しません。
1そうだね
プレイ済み
返信[13]
親投稿
nobu divine-creator
なるほど、そういうことでしたか! ボタンを押すように表示させていたものを、一番下の行に設定していたので、スクロールしてしまったのですね♪ これで、文の表示に関しては大丈夫になりました♪ (まだ他の課題は山積みですけど…。)
0そうだね
プレイ済み
返信[14]
親投稿
こうやま kouyama1967
 「WAIT 30」は「60分の30秒つまり0.5秒待つ」という命令です。これを入れておかないと、ボタンを押した後すぐパッと動いてしまうので、人間の眼では判断できないほど、速く動いてしまうのです。  REPEATとUNTILはセットで使う命令で「UNTILのすぐ後に書いてある条件をみたすまで、何度も繰り返す」という命令です。ここではUNTIL BUTTON()と書いていますが、これで「何でもいいからボタンを押すまで」という条件になります。  よくプログラム初心者で「キャラを移動させるプログラムを作ったが、BUTTON()を入れてもその瞬間で終わってしまう。なぜ?」という質問がありますが、それはREPEAT、WHILE、GOTOなどの繰り返し命令を入れていないため、一度しか実行されないという事が原因です。
1そうだね
プレイ済み
返信[15]
親投稿
nobu divine-creator
詳しく分かりやすい解説をありがとうございます♪ ところで、ボタン判定の種類の違いが、ヘルプやガイドブックを読んでもハッキリと理解できないのですけど、ボタンを押した時に判定する場合のリピート有りと無しでは、何が変わるのでしょうか? いっそ「ボタンを放した時に判定」のほうが、押し間違う可能性が少なくなる気がするのですけど、押した時と放した時の判定は、どう使い分けるのが良いのでしょうか?
0そうだね
プレイ済み
返信[16]
親投稿
InDoor TheInDoor12
使い分けは場合によるので、両方試してみてしっくりくる方を使えばいいと思います。 リピートは、 BREPEAT 4,30,5 'リピート設定 WHILE 1 BT=BUTTON(1) 'リピートあり IF BT AND 16 THEN BEEP VSYNC 1 WEND ↑このプログラムでAボタンを長押ししてみると違いがわかるんじゃないでしょうか。
1そうだね
プレイ済み
返信[17]
親投稿
nobu divine-creator
リピート有りだと、ボタンを長押しした場合に、その処理を繰り返すってことですか? そして、リピート無しだと、ボタンを長押ししても、繰り返さないということですね♪ つまり、多くの人がリピート無しにしている理由は、同じボタンを押し続けても、繰り返してしまわないようにするためですかね?
0そうだね
プレイ済み
返信[18]
親投稿
InDoor TheInDoor12
そういうことです。(たぶん)
0そうだね
プレイ済み
返信[19]
親投稿
nobu divine-creator
その逆に、リピート有りを使ったほうが良い場合って、どのような時なのでしょうか? 長押しすることが必要な場合ですよね? 例えば、クレーンゲームは長押ししますけど、押している間中クレーンが動き続けるように…ですか? でも、その場合は、ボタンを放したら止まるという判定で良いような…?
0そうだね
プレイ済み
返信[20]
親投稿
KU kerorinU
ツール系プログラムとかで、利用者が使いやすいような設定にする、とかですかね。あとシューティングで、連射ウェイトを設定できるゲームがあった気がします。
0そうだね
プレイ済み
返信[21]
親投稿
nobu divine-creator
利用者が使いやすいような設定…ですか?抽象的で、イメージができません…(?_?)。 連射で押し続けると…というのは、分かる気がします♪ まぁ、リピートが必要になるソフトを作る機会が無ければ、きちんと分かっていなくても問題ないですけどね…♪ とりあえずは、リピート無しの設定を使う機会が多そうです!
1そうだね
プレイ済み
返信[22]
親投稿
BUTTON()の種類。 BUTTON(0)→押している間ずっと感知 BUTTON(1) BUTTON(2)→押した瞬間だけ感知 BUTTON(3)→放した瞬間だけ感知 BUTTON(1)は、リピートです。 リピートって言うのは、「BREPEATで設定した秒数長押しされていることを感知したら、今度は一定のテンポで連打している状態になり、放すと止まる。」と言う機能なんですけど、 主に十字キーで項目を選択するときに、 「BUTTON()だと早く変わり過ぎちゃうからBUTTON(2)にしたけど、連打しなくちゃいけなくて面倒。」 なんて時に使います。
2そうだね
プレイ済み
返信[23]
親投稿
プチコンのキーボードも リピート機能があって、 同じキーを長押しすると、 「一定秒待ってから、一定の速さで連打。」 している状態になるのが分かります。 ちなみにキーボードのリピートは、 設定をいじると、 連打を速くしたり、 連打を始めるまで長押しする時間を 短くしたりできます。 説明ヘタクッそでごめんです(´>ω<・`)
1そうだね
プレイ済み
返信[24]
親投稿
nobu divine-creator
いや、充分に解りやすい説明ですよ♪ キーボードにも同じような機能があったなんて気付いていませんでしたΣ(゚Д゚)!
0そうだね
プレイ済み