トピック
ゆうま miyamayuma

矢印を1つにする方法を教えてください

このプログラムでやると矢印が上のほうに行き過ぎたり矢印がたくさん出てしまうのですがどうすればよいですか?
1そうだね
プレイ済み
返信[1]
親投稿
イスターリャ arduinotexter
まず、10行目と11行目は条件式を分けたほうが良さそうです 例) IF B==1 AND 0<Z AND Z<5 THEN Z=Z-1 例) IF B==1 AND 5>Z AND Z>0 THEN Z=Z+1 また、矢印が増える問題ですが、これは前に表示した内容を消す処理が入っていないからです コンソールの文字を消す命令と言えばCLSですが、これだと3〜7行目で表示した内容も消えてしまいますので 矢印が表示され得る場所すべてに空白を表示させましょう 例) LOCATE 0,24:PRINT " "
1そうだね
プレイ済み
返信[2]
親投稿
ゆうま miyamayuma
こうしたのですが今度は矢印が動かせなくなりました・・・もう一度教えてください!
0そうだね
プレイ済み
返信[3]
親投稿
5の部分を28にしたらいいかもしれません。保証は無いですが((
0そうだね
プレイ済み
返信[4]
親投稿
16行目をよく見てみましょう。 下ボタンを押した時の処理を書こうとしていると思いますが、条件に、Zが5より小さく、0より大きいとき、とあります。 始め、Zの値は0からスタートですよね? と言うことは、既に条件外になってしまっていることになります。 と言うのが原因です。
0そうだね
プレイ済み
返信[5]
親投稿
ゆうま miyamayuma
できない・・・
1そうだね
プレイ済み
返信[6]
親投稿
(Y座標なのに変数名がZなのにツッコんでいい?)
1そうだね
プレイ済み
返信[7]
親投稿
意味が理解できないなら、座標チェックを除去して動かしてみれば? というより、私はIF文の段階で座標チェックする方式はおすすめしません。 (MAXとMINを使う方式が好きです) IF B==1 THEN Z=Z-1 IF B==2 THEN Z=Z+1
1そうだね
プレイ済み
返信[8]
親投稿
おおみの Omi-no-mino-398
風呂でお茶でも飲みましょうか。 ◎前準備:コマンド名表示して⑧へ(最初の矢印表示) ①ループ開始、ボタン取得 ②Aが押された→⑨へ ③↑または↓が押された→⑤へ ④それ以外なら①へ ⑤今の座標に空白を書いて矢印を消す ⑥押されたのが↑ならZを1減らす、↓ならZを1増やす ⑦Zが範囲を超えたなら補正する ⑧矢印を表示して①へ ⑨終了
1そうだね
プレイ済み
返信[9]
親投稿
ゆうま miyamayuma
これでもダメか トホホ・・
0そうだね
プレイ済み
返信[10]
親投稿
イスターリャ arduinotexter
よくプログラムを見直して見てください。 ループを構成しているのは21行目のIF文の後のジャンプと、13行目のラベルです。 そして、矢印を消す処理は3~7行目です。 矢印の跡は毎回消す必要があります。 つまり、3~7行目は毎フレーム実行される位置で、なおかつ19行目の矢印を速攻で消してしまわない位置である必要があります。 また、14行目と15行目の、Zの範囲を制限するIF文にも問題があります。 このままでは、制限したい範囲を1だけ超えてしまえるようです。 等しい、または大きい・小さいことを表す「<=」「>=」という記号がありますから、是非お使いください。 大なり小なりの記号の前に「=」を追加することで、大きいか小さいかだけでなく等しいことも条件に加えることができます。
1そうだね
プレイ済み
返信[11]
親投稿
ゆうま miyamayuma
あと少しなのですが問題が2つ ・こうげきが増えてしまう ・矢印の動くスピードが速すぎてコマンド2,3などを選べない(これはZが1回ずつ+-すればよいのですがLOOPの処理をもっとゆっくり?1回ずつにする方法も教えて下さい)
0そうだね
プレイ済み
返信[12]
親投稿
ゆうま miyamayuma
↑のプログラムです
0そうだね
プレイ済み
返信[13]
親投稿
おおみの Omi-no-mino-398
>こうげきが増えてしまう 29行目にセミコロンなしPRINTすると改行されてスクロールします。 ということはどこかでZが5になっているということです。 >矢印の動くスピードが速すぎ BREPEATで押しっぱなし時の検知間隔を変更できます。 上下ボタンのインターバルを20くらいにすればいいと思います。
1そうだね
プレイ済み
返信[14]
親投稿
おおみの Omi-no-mino-398
訂正: ×29行目 ○30行目(Y座標29)
0そうだね
プレイ済み
返信[15]
親投稿
ぷうた FUTA.2004
こんなのどうですか? 「PRINT」を「?」に 「@LOOP」を「WHILE」にしてみました スライドパッドも使えるようにしてみました 勝手にアレンジしてすみません
0そうだね
プレイ済み
返信[16]
親投稿
いくつかアドバイス。 14、15行目は、数値の方を変えたのなら、不等号は<と>でも大丈夫ですね。 (まあ今でも動作上問題があるわけではないですし意味がわかってればいいと思いますが) 14、15行目の位置補正は、値を変更した後にしたすぐした方がいいです。つまりこの場合だと、17、18行目で値を変更しているので、その後の19行目(PRINT)の辺りがベストです。 BUTTON命令は引数なしだと押している間は常に変化するので押しっぱなしだと毎フレーム動いて高速になります。キャラの移動などではその方が都合が良いのですが、今回のカソールの場合は、1か2を指定して押した直後のみ実行されるようにした方が都合がいいと思います。BREPEATを使う場合も1にしないと意味が無いので、BREPEATを使いたい場合は、 B=BUTTON(1) とすると良いと思います。
0そうだね
プレイ済み
返信[17]
親投稿
ゆうま miyamayuma
ほぼOKなのですが矢印がこうげきの上に1つ行ってしまうのですがどうすれば良いですか?
0そうだね
プレイ済み
返信[18]
親投稿
ゆうま miyamayuma
上のプログラムです。
0そうだね
プレイ済み
返信[19]
親投稿
僕のアドバイスを元に変えたのかもしれませんが、とりあえず19〜20行目の位置がおかしいですね。この行は矢印のPRINTより前にする必要があります。 始めの位置に対して、どうしてそこに移動した方が良いのかとかをちゃんと考えた方がいいですよ。言われたから変えてるだけだと見落としが発生しますしね。 何故そこに移動するのかというと16、17行目でZを変更した場合、想定する範囲外になる可能性があります。19、20行目のIFはそれを補正して正すためのものなので、なるべく早く行った方がいいからです。 とくに今回のようにPRINTでZを使っている場合は、当然ですが、その前に補正しないと補正前の値で表示してしまいます。と言うことで、その場所に移動する、という事になるのを考えればPRINTの後になるという事は絶対にないので、こういった間違えが起こらなくなると思いますよ。
0そうだね
プレイ済み
返信[20]
親投稿
ゆうま miyamayuma
色々変えましたがZが-1になってしまいました IF Z>=1 THAN ・・・ をPRUNTの前にもってきたけどだめでした。
0そうだね
プレイ済み
返信[21]
親投稿
ゆうま miyamayuma
これで出来ました 皆さんありがとうございます!
1そうだね
プレイ済み