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

アバター
ドラキーマカレー ◆3jIC4XsSXrZX
2019/7/13 19:38
質問
【初心者】DATAとREAD
人のプログラムをいじってると、大半のプログラムにDATAやREADがありますが、
どのように使うんですか?

コメント

アバター
でんぺん 2019/7/14 21:02 ◆HfSy5ayxtyTa
よく使うのはやっぱりWHILEの方になりそうな気がしますが人によってはREPEATの方を好んで使う人もいそう?

使い分けはやっぱりループの中を1回は実行したいかどうかか基準でしょうね。
僕がよく使うパターンとしては、

REPEAT:WAIT:UNTIL BUTTON(1)==#A

というのがありますね。これはAボタンが押されるまでループする命令です。
BUTTON命令は基本VSYNC(やWAIT)のタイミングでボタン情報が更新されるので、それを必ず実行してから判定する事でボタン判定の挙動を安定させる目的があります。
それに上記の場合はAボタンを押したらループを抜けるので、その意味もWHILEよりなんとなくわかりやすい気がしませんか?
WHILEの場合にAボタンが押されるまでループする時はBUTTON(1)!=#Aという条件になるので、なんとなく条件文的にAボタンじゃないならみたいにも読めるので…。
アバター
ツララ 2019/7/14 21:11 ◆ArUdBYOYME1V
>アオタクさん
WHILE文とREPEAT文の使い分けって、上の方で何回も出てますけど
そのループ中の処理を必ず一回は実行したいか、したくないかの違いなんじゃないんです?

具体的な例だとWHILE文で書いておけば WHILE 1 を WHILE 0 にするだけで
簡単にそのループ中の処理をそっくり飛ばせるから
仮の処理を書くときとかに便利。
CLS:?"PUSH A":?"SOUND OFF":F=0
REPEAT
 VSYNC 1
 B=BUTTON(1)
 IF B AND #A THEN LOCATE 0,1:?"SOUND ON ":F=1
 WHILE F
  VSYNC 1
  B=BUTTON(1)
  IF B AND #A THEN LOCATE 0,1:?"SOUND OFF":F=0
  BEEP 1
 WEND
UNTIL B AND #X

追記
またでんぺんさんの悪い癖の自信無い病が出てるー
間違ってても他の人が指摘することで話が繋がっていくから結果オーライなので
気にせず言い切っちゃいましょうよ。
失敗や間違いの方が得るものは大きいんですから。
アバター
アオタク 2019/7/14 21:32 ◆6Tx4tgOERFcr
>>でんぺんさん
ループ内を1回は実行したいかどうかか、がやはり基準になるんですね。てっきり、WHILEの直前に処理を置いて条件をREPEATの逆になるようにすればWHILEだけに統一出来るかと思いましたが、今考えるとそうした場合その命令は1度きりの実行になるんでしたwとなるとやはり使い分けが必要ですね()
なるほど、特定のボタンやキーの入力をBUTTONやINKEY$のループで待つ時は確かにそのほうが見る側も分かりやすいですね!VSYNCやWAITも入力系条件の先に入る良さがありますから...。
確かに条件文的にそういう感じ方も出来ちゃいますね...。

使い分けは大事だった。
アバター
アオタク 2019/7/14 21:43 ◆6Tx4tgOERFcr
おっと、↑の最初が「どうかか、が」になってました、本当は「どうか、が」です。すみません。

>>ツララさん
やはりそうなんですね、ありがとうございます。

仮の処理を書くとき...。それは確かに役に立ちそう。

なるほど、場合によりFの値をtrueやfalseに変えて、whileでのループをしたりしなかったりする、けどrepeat直後は必ず実行出来る、という感じなんですね。
アバター
アオタク 2019/7/14 21:49 ◆6Tx4tgOERFcr
自信が無くなりがちなのは僕もなんですよね......。
素で間違えると、やはりどうしても恥ずかしいものがある。
(stillとuntilとかstillとuntilとかsti...)
アバター
Na 2019/7/14 21:59 ◆QoELVrBXBQCI
自分は基本的にはREPEAT〜UNTILは使いませんねー。
つい癖でWHILE 1って書き始めちゃうっていうのと
UNTILだとループの最後に条件があって読みにくい...(自分だけ?)
アバター
アオタク 2019/7/14 23:52 ◆6Tx4tgOERFcr
>>Naさん
あー、確かにWHILEに慣れた人にとってはあまり使われないのかもしれませんね。
アバター
うょリウム(元 SPDX) 2019/7/15 10:56 ◆UTOEg1c1vr.B
私はREPEATしか使っていません。
末尾をUNTIL 1にして
抜けるときはBREAKを使うことも多いです。
(まぁ、これならWHILEでもいいんですけどね。)
ターン制のゲームで
決着がついたらBREAKする…みたいな感じです。
あとREPEATばかり使うのは、
そもそも1回は実行しないと
WHILEの条件を満たせないことが多いとかですね。

FOR I=100 TO 0 STEP -1
 REPEAT
 VSYNC 1
 UNTIL BUTTON(1)==#A
CLS:?”Aをおせ あと”;:? I
NEXT

みたいなのはWHILEではできませんからね。
まぁ、逆にWHILEでしかできないこともありそうですね。
アバター
うょリウム(元 SPDX) 2019/7/15 10:58 ◆UTOEg1c1vr.B
FOR I=0 TO 1 STEP 0
VSYNC 1
I=(BUTTON(1)==#A)
NEXT

とかいうやり方があるから
そもそもFORだけでも大丈夫ですけどね!
(言ってはいけないこと)
アバター
アオタク 2019/7/15 11:15 ◆6Tx4tgOERFcr
>>うょリウム(元 SPDX)さん
Naさんとは逆にREPEATしかあまり使わないんですね。
...UNTIL 1だともう成立するから1発で抜けてしまわないですか?間違ってたら教えて下さい。

ターン制のゲームで決着がついたらBREAK...確かに使えそうですね。
WHILEの条件を満たす目的もあるんですか...なるほど。
(だんだん頭が整理出来なくなってくる)

ほぉ...、そうなんですか。
まあFORだけでもOKですね(
アバター
アオタク 2019/7/15 11:17 ◆6Tx4tgOERFcr
気付けば、質問をしているのがトピック主中心だったのに、僕が中心になっていた
しかも、元のDATAとREADの話から僕のせいでそれてしまった感じ
...まいっか
アバター
こういち 2019/7/15 11:27 ◆ou0jbJnEJ0Kb
ボクはループはWHILEとUNTILどっちも使える場合、速度重視したいならUNTIL、短さ重視の場合WHILEを使うことが多いかな。
ちなみにbreakとcontinueは宗教上の理由で使ってません。
アバター
ugly777 2019/7/15 12:26 ◆B7lOIJDWuOqi
>宗教上の理由で使ってません。
?????
アバター
アオタク 2019/7/15 13:18 ◆6Tx4tgOERFcr
>>こういちさん
ふむふむ、なるほど。
アバター
Na 2019/7/15 13:26 ◆QoELVrBXBQCI
WHILEのほうがすっきり書ける例
WHILE LEN(A):B=POP(A):WEND
(Aは配列変数)
アバター
アオタク 2019/7/15 14:03 ◆6Tx4tgOERFcr
>>Naさん
なるほど、全然分かりません。
(即諦めた)
アバター
Na 2019/7/15 14:59 ◆QoELVrBXBQCI
一応解説すると
LEN(A)→Aの長さ(Aの中のデータの個数)
WHILE LEN(A)→LEN(A)が0でない間→Aにデータが入っている間
POP(A)→Aからデータを1つ取り出す
B→取り出した(いらない)データを入れる適当な変数
つまりAを空にするプログラムなんですが...
初心者向けの例ではないですね。
アバター
アオタク 2019/7/15 15:01 ◆6Tx4tgOERFcr
>>Naさん
なるほど、どんどんAを空にするものだったんですね(
アバター
アオタク 2019/7/16 23:02 ◆6Tx4tgOERFcr
MML演奏を組み込む時って、BGMSETと曲番号を使う形か、BGMSETDとDATA、READを使う形のどちらがおすすめですか?
後者は小節単位など好きなところで区切れるのが利点ではありますが。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -