投稿
みほ kanachi_2002
公式サイトのプログラムの2行目と5行目の意味を教えて下さい! SPSET 0,501 WHILE 1 TOUCH OUT I,X,Y IF I THEN SPOFS 0,X,Y WEND
0そうだね
プレイ済み
返信[1]
親投稿
おにぎり EasyPuzzler65
WHILE ~ ... WEND で,「~が成り立っている間...を繰り返す」 という意味になります。このサンプルの場合は~の部分が1になっていますが、これはプチコン3号のBASICでは「常に成り立つ」ことを意味します。つまり誰かがSTARTキーを押すなどして無理やり止めない限り、ずっと繰り返し続けることを意味します.
2そうだね
プレイ済み
返信[2]
親投稿
みほ kanachi_2002
なるほど。「1」というのはそういう意味だったのですね。ありがとうございました!
0そうだね
プレイ済み
返信[3]
親投稿
おにぎり EasyPuzzler65
こっからはちょっと難しい話なのでわからなければ飛ばしてください。 ~の部分に書けるのは条件式といって、真か偽かどちらかに決まるもの、です.たとえば Aという変数に2という値が入っていたら A<=2 という条件式は真となり、A>3という条件式は偽となります。プチコン3号ではじつは、条件式は真なら1、偽なら0になるように作られています.なのでここに1と書いてあるのは、常に真、という意味になるのです。 プチコン3号にはTRUEとFALSEという名前の変数が用意されていて、TRUEには1が、FALSEには0が入っています。ですから、わかりやすく書くなら WHILE TRUE ... WEND と書いてもいいと思います。
1そうだね
プレイ済み
返信[4]
親投稿
おにぎり EasyPuzzler65
むずかしい話その2。WHILE 1 の謎が解けると、このサンプルプログラムに新たな謎が生じます。それは TOUCH OUT I,X,Y IF I THEN SPOFS 0,X,Y の2行です。TOUCH命令というのは、下画面にタッチペンで触ると、触ったよという情報をIに、触った位置をX,Yに返してくれるのですが、ペンで画面にタッチしたままペンを離さないでいると、Iの値はどんどん増えていきます。触っていた時間がフレーム数の単位で返ってくるのです。これをつかって、ちょんと触ったときと長押しをしたときとで動作を変えたりすることができます。それはいいのですが、もしそうだとすると Iに1より大きな数が入ったら IF I THEN SPOFS 0,X,Y は動かなそうですよね?
2そうだね
プレイ済み
返信[5]
親投稿
おにぎり EasyPuzzler65
ところがこのサンプルはちゃんと動きます。実はプチコン3号では、IFやWHILE,UNTILなどで条件式を書くところでは、0だったら偽、0じゃなかったら真、と判定するようなのです。(ようなのです、というのははっきりマニュアルに書いていないからです。)この考え方は、Cというプログラミング言語と同じもので、珍しい考え方ではないのですが、プチコン3号で BASICを学ぶ方がはまりやすいポイントのひとつだと思っています。(おわり)
2そうだね
プレイ済み
返信[6]
親投稿
Godot orz_127
基本的にプログラムの世界では、 0が偽、それ以外は真となっています。 便宜的に真偽を表すとき 真に1、偽に0が割り当てられています。 昔のBASICでは、真が-1となるものもありました。もともと0以外が真なのでこの実装でも問題ありません。 C言語の例があがっていましたが、C言語でもFALSEは0で、TRUEは1で定義されています。 #define TRUE (1) 多分こんな感じ。 WHILE文は条件式が真であれば WENDまでの間を繰り返します。 1は0ではないので真と言うことになりループが繰り返される事になります。 条件式が変わることなく永遠に繰り返す事になるので、一般てきにこのループを「無限ループ」と呼びます。 このループから抜けるためには中のしょりで抜ける条件を確認して、条件に合致したらBREAKで抜けるのが常等手段となっています。
1そうだね
プレイ済み
返信[7]
親投稿
みほ kanachi_2002
難しい話までありがとうございます! プチコンは0でなければ真と判断するのですね。
0そうだね
プレイ済み
返信[8]
親投稿
Godot orz_127
このサンプルプログラムでは抜ける気がないのでBREAKは使っていないようですが… というわけで、ここは1ではなく、-1でも問題ありません。 しかし、変に数値として書いてしまうと、この数値は何を意味しているの?と混乱を招く原因となります。 このサンプルとしては1は単に真であると言うことを意味しているので明示的にTRUEを使うべきだと思っています。 慣れてくれば直ぐわかるのでどうでもよいですが、初めたばかりの人がみるものとしては、余計な混乱や誤解を招かないようにTRUEとしておくべきだったのでは? と思ったりw
1そうだね
プレイ済み
返信[9]
親投稿
みほ kanachi_2002
そうですよね。TRUEを使うことにします。
0そうだね
プレイ済み
返信[10]
親投稿
Godot orz_127
気になる部分を切り出してきて 小さなプログラムにして色々値を変えて試してみると良いですよ。 理解が深まります。
1そうだね
プレイ済み
返信[11]
親投稿
みほ kanachi_2002
なるほど。勉強がんばりました。
0そうだね
プレイ済み