Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
16 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
次のページ(過去)
返信[55]
親投稿
ケイン KEIN.HORGAN
うーん。まずそもそも 『Yの値を直す』 と言うのがどういう意味か分かりますか? と、もうラスコメなので、続きはまた次にしましょう。
0そうだね
プレイ済み
返信[53]
親投稿
ケイン KEIN.HORGAN
いや、うん、それでは何にも変わらないですね。 Yの値を正しい値に直す文を書かないと! ……えっと、分からない事があったら、『○○が分かりません』と言って下さいね。 ただ分からない、と言われても、どう説明したらいいのか分からないので。
0そうだね
プレイ済み
返信[51]
親投稿
ケイン KEIN.HORGAN
そんな感じですね! Yの条件はよく考える必要がありますが、とりあえず次は、IFの行とTHENの行との間に、Yの値を正しい値に直す文をかけばいいですね
0そうだね
プレイ済み
返信[49]
親投稿
ケイン KEIN.HORGAN
なるほど。 それでしたら、@MOVE の次の行あたりからIFを書けばいいと思います。 IFの書き方は覚えてますか? もし忘れてしまっていたら、このトピックで説明しましたので、読み返してみて下さい
0そうだね
プレイ済み
返信[47]
親投稿
ケイン KEIN.HORGAN
考え方は二つあります。 1.Yの値を変化させる前にチェックして、おかしな値にしないようにする 2.カーソルを移動させる時にYの値をチェックして、おかしな値だったら修正する どっちでもいいですが、好きな方を選んで下さい
0そうだね
プレイ済み
返信[45]
親投稿
ケイン KEIN.HORGAN
なるほど、とレスが来るという事は、思い付いていないのかな。 Yの値がおかしい時はその値は使わない、とは、言い換えれば、『もし、Yの値がおかしければ、その値は使わない』という事です。 もし、と言うのは、IF を使えばできるので、考えてみて下さい!
0そうだね
プレイ済み
返信[43]
親投稿
ケイン KEIN.HORGAN
おお、がんばりしたね! プログラムがわかっていれば、どうして動かなくなるか、も分かるとは思いますが、とりあえず大事なのは、カーソルがおかしな位置に移動してしまった時のYの値です。 LOCATE命令を実行する時、その値を使わないようにすればいいのです!
0そうだね
プレイ済み
返信[41]
親投稿
ケイン KEIN.HORGAN
えーと、じゃあ試しに、 51行目のYの値をいろいろと変えて試してみてください。 例えば、 LOCATE X,1 とか、 LOCATE X,10 とか、 LOCATE X,17 とか、 LOCATE X,20 とか、 LOCATE X,23 とか、こういう感じに。 いろいろ数値を変えて試してみたらどうなりますか?
0そうだね
プレイ済み
返信[39]
親投稿
ケイン KEIN.HORGAN
そうですね! 表示したカーソルの位置がずれる、ということは、つまりPRINT 命令をする前に実行したLOCATE 命令で何かやらかした、という事になります。 X座標は横方向、Y座標は縦方向の事なので…… おそらく、Xをいじってしまったので横方向にずれてしまったのでしょう。 と、それはさておき。 さっきの画像をみる限り、Y=17 は(カーソルの表示される高さとしては)特に問題はないみたいでしたね。 では、改めて…… カーソルの表示される高さがおかしくなるのは、Yの値がどんな時になるか考えてみてください。 「○○より大きい時におかしくなる」とか、そういう条件が出てきませんか?
0そうだね
プレイ済み
返信[37]
親投稿
ケイン KEIN.HORGAN
これはまた予想外な結果に…… えーと、今まではカーソルは上下に行き過ぎるだけで、それ以外は普通に動いていたんですよね? そうだとすると、何か変なところをいじってしまってこうなったと思うのですが…… そもそも、どうしてカーソルがこんなところに表示されてしまうかは分かりますか? (今まで勉強した事を思い出せば、分かるとは思います!)
0そうだね
プレイ済み
返信[35]
親投稿
ケイン KEIN.HORGAN
なるほど…… さて、ではフランケンさんの予想のY=17 の時にどうなるか、ですが…… こういう時には、直接プログラムをいじってしまうのが確認するには分かりやすいです。 51行目を、 LOCATE X,17 と一時的に直してみて、そしてプログラムを実行してみて下さい。 どうなりましたか? カーソルは変なところに表示されますか?
0そうだね
プレイ済み
返信[33]
親投稿
ケイン KEIN.HORGAN
あれ、49行目と51行目が、また+3 されていますが、これはどうしてこういうふうにしたんですか? (ここがずれていると、またおかしな事になると思いますが……)
0そうだね
プレイ済み
返信[31]
親投稿
ケイン KEIN.HORGAN
そうですね! では、同じプログラムで…… Y=9だったら? Y=11だったら? Y=10の時にカーソルが正しい位置に表示されるわけですから、Yがそれ以外の時は正しい位置に表示されません。 このように、Yの値によってカーソルの表示される行が変化します。つまり、「カーソルが上や下に行き過ぎちゃう」というのは、Yの値がおかしいから発生する問題なのです。 さて、本題であるフランケンさんのプログラムでは、Yの値がどんな時におかしな事になりますか?
0そうだね
プレイ済み
返信[29]
親投稿
ケイン KEIN.HORGAN
うーん。どう説明したら分かってもらえるのかなぁ…… えーと、じゃあ、次のようなプログラムを考えてみてください LOCATE 8,10 "メッセージ" LOCATE 5,Y ?"→" これで、"メッセージ"の左にカーソルを表示したいとします。 このとき、Y にはどんな値を入れればいいですか?
0そうだね
プレイ済み
返信[27]
親投稿
ケイン KEIN.HORGAN
その通りです! 移動前に表示していた文字を空白文字で上書き出来なかったから、カーソルが増えてしまったんです。 さて、これでカーソルが移動する仕組みについては分かったと思います。 そこで、ようやく「カーソルが変なところに移動しない為にはどうすればいいのか?」の話になるわけですが…… そもそも「カーソルが変なところに移動する」のは、どういう時に発生すると思いますか? LOCATE PX,PY ?" " LOCATE X,Y ?"→" この4行でカーソルの移動を行っているわけですが、X や Y がどんな時におかしな事になりますか?
0そうだね
プレイ済み
返信[25]
親投稿
ケイン KEIN.HORGAN
とりあえず、どうしてカーソルが動くように見えるのか。ここから説明しましょうか。 そもそも「文字が動く」というのはどういうことか。 これは、 1.移動する前に表示してある文字を消す 2.移動先の座標に文字を新しく表示する ということなんです。 でも、「文字を消す」という命令は、プチコン(smile BASIC)にはないんですね。 だから、文字を消す代わりに、" "(空白文字です)で上書きしてあげるんです。 ここまで説明したら、さっきの「何故かカーソルが増えてしまった」という問題の原因も分かると思います。 どうしてだかわかりますか? ちょっと説明してみてもらえますか?
0そうだね
プレイ済み
返信[23]
親投稿
ケイン KEIN.HORGAN
あれ? えーと、よく思い出してみてください。 一番最初は、+3 をしなくてもカーソルは増えていなかったと思うのですが…… 試しに、LOCATE 命令の時のPY+3 とか、Y+3 とかを、ただのPYや Y にしてみてもらえますか?
0そうだね
プレイ済み
返信[21]
親投稿
ケイン KEIN.HORGAN
あ、えーと、それはそれであっているんですが、それだと、プログラムの修正をする時に困ります。 例えば…… LOCATE PX,PY+3 この命令を実行すると、次にPRINT 命令をした時に、座標(PX,PY+3) の位置に表示をします と、こういうような理解が必要です。 そして、こうなった時に、「"PY+3"って、一体どういうつもりで指定したのかな?」となるわけです。 どうしてフランケンさんは、PY+3 としたのですか?
0そうだね
プレイ済み
返信[19]
親投稿
ケイン KEIN.HORGAN
ごちゃごちゃになった時は、一度元に戻してみるのもひとつの手です。 まずは、 49,50行目、53,54行目、57,58行目を削除してみてください。 その後…… えーと、 LOCATE PX,PY+3 LOCATE X,Y+3 この二行をどういうつもりで書いたのか、ここに説明してみてください。
0そうだね
プレイ済み
返信[17]
親投稿
ケイン KEIN.HORGAN
えーと、あれ? もしかして、 「どうしてカーソルが上の方に表示されてしまうのか?」 については、分からないですか? LOCATE X,Y ?"→" が何をしているのかは分かったんですよね?
0そうだね
プレイ済み