投稿
ネタバレ
Daisuke 0909daiki09
プチコン初心者です。@MYをGOSUB~RETURNでループさせようと思ってるんですが、何故かループせずに終わってしまいます…親切な方教えてください…
1そうだね
プレイ済み
返信[1]
親投稿
7行目で押したXボタンを放す前に24行目を実行しているためだと思います。
0そうだね
プレイ済み
返信[2]
親投稿
Daisuke 0909daiki09
コータさん»そういうことですか!ありがとうございます!
0そうだね
プレイ済み
返信[3]
親投稿
プチコンは、人間の動きよりずっと速く実行するので、そのことを考える必要があります。あと、ボタン関数の値は、1フレーム(約1/60秒)の間同じ値を返します。
0そうだね
プレイ済み
返信[4]
親投稿
say sayer.exe
7行目ってどこやねん と、思ったけど、前の投稿からの引用とは コータさんよく見てるなぁ 24行目をコメントアウトしたらループが動いて@myが毎回呼び出しされるようになるはずですが、でもこれ動きませんよ? 29行目の yy=0:xx=0 を yy=y:xx=x にすれば一応動きそうですが それより、一度フローチャートを書いたほうがいいですね
1そうだね
プレイ済み
返信[5]
親投稿
こういう場合のボタンは押した瞬間でリピートのないBUTTON(2)を使うといいかもです。 ただその場合もボタンの処理の間にVSYNCやWAITが入らないと正確に動作しないです。ただ上記の場合は、GOSUB @MYの中でVSYNCが入ってるので正常に動作するとは思います。(ちょっとVSYNCの入れる場所としては気になる点もありますが)
0そうだね
プレイ済み
返信[6]
親投稿
Daisuke 0909daiki09
ありがとうございます! sayさん»フローチャートを書いてはみたんですが途中で自分でも意味が分からなくなりました。何かコツとかあるんですか?
0そうだね
プレイ済み
返信[7]
親投稿
sayさんの言うようにフローチャートを書くといいと思いますが、フローチャートを書かないまでもプログラムの流れをちゃんと追いながら動作の確認をしてみると良いかと思います。 そうすると29行目でXXとYYを毎回0にしていて、IFでXやYに入れているのはXXやYYに1を足したり引いたりしているので結果的にXとYは-1,0,1のいずれかにしかならない事になり、想定している動作とは違うことに気づけると思います。
0そうだね
プレイ済み
返信[8]
親投稿
Daisuke 0909daiki09
なるほど…
0そうだね
プレイ済み
返信[9]
親投稿
Daisuke 0909daiki09
でんぺんさん一つ質問です。画像ではいちいちループさせる度にPX=0にしているんですが動きます。何故なんですか?教えてください…
0そうだね
プレイ済み
返信[10]
親投稿
この時のPXは33行目でXに足すための値になってるので、ループの度にXに足される(ここの足されるというのがポイント)ので正常に動きます。 この辺も実際に流れを追ってみて、とくにPXとXがどの段階でいくつになっているかを調べてみるとわかってくるんじゃないかなって思いますよ。
0そうだね
プレイ済み
返信[11]
親投稿
Daisuke 0909daiki09
ありがとうございます!
0そうだね
プレイ済み
返信[12]
親投稿
say sayer.exe
フローチャートを書くコツかぁ… フローチャート自体がプログラムを理解するためのコツみたいなもんだからなぁ コツのコツを聞かれるとちょっと… でんぺんさんの言うように、「流れを追う」事が大事ですね 2つ前ほどの2つ目の質問なんかはいい例で、流れないところに処理を書いてもそりゃ当然処理されませんよ
0そうだね
プレイ済み
返信[13]
親投稿
Daisuke 0909daiki09
難しい…
0そうだね
プレイ済み
返信[14]
親投稿
say sayer.exe
流れの追い方がわかれば初心者卒業ですよ♪
0そうだね
プレイ済み
返信[15]
親投稿
マギー M191246
この場合に限ってのことなのですけど 式の前後に同じ変数Xがあることに 着目すると理解しやすいのでは、 ないでしょうか
0そうだね
プレイ済み
返信[16]
親投稿
プログラムは上から下に流れます。また:で連結されているものは左から右に流れます。 それを意識して頭からプログラムをきちんと追いかけて、GOTOやGOSUBが出てきたらちゃんとその場所に飛ぶ(移動)して読んでいきましょう。 変数が出てきたら、その内容を紙に書くなどしてみるのもいいかもしれません。(例えばX=0と出てきたら、Xというラベルの紙を用意して、0と書き込む)そして内容の変化があったら都度内容は消して書き換えるようにします。 IFが出てきたら、その時の条件をしっかり確認してTHEN以降が処理されるか考えます。 変数に関しては、その役割を意識して考えるといいと思います。逆に役割のわからない変数やほとんど使われてない変数が出てきた場合は入力ミスの可能性もありますし注意して確認します。 始めは大変だと思いますが頑張ってください!
0そうだね
プレイ済み
返信[17]
親投稿
Daisuke 0909daiki09
とりあえず動かす事は出来ました。 囲ってある壁には判定をつけたんですが、中の壁にはまだ判定をつけていません。IF文をズラっと書くしか方法はないですかね…?
0そうだね
プレイ済み
返信[18]
親投稿
Daisuke 0909daiki09
でんぺんさん»応援ありがとうございます!
0そうだね
プレイ済み
返信[19]
親投稿
てっく tekpro
移動先に文字があるかどうか、CHKCHRで調べるようにすれば1行で済むと思います。
0そうだね
プレイ済み
返信[20]
親投稿
Daisuke 0909daiki09
てっくさん»CHKCHRの使い方はよく分かりません…書き方だけ分かります。 M=CHKCHR(X,Y) ここからどう判定を付ければいいですか?教えてください…
0そうだね
プレイ済み
返信[21]
親投稿
てっく tekpro
要するに普通なら0、文字かあればそれ以外の値になるということなので、 IF CHKCHR(X,Y) !=0 THEN @GAMEOVER みたいな感じです。最初の写真の35行目と36行目の間に書かないと、自分自身を調べてしまうので注意です。
0そうだね
プレイ済み
返信[22]
親投稿
say sayer.exe
mに入るのはx,yの位置のキャラクタコードなので、 if m==asc("■") then @hit または if chr$(m)=="■" then @hit で、いけるんですが、今のコードをけっこう大幅に書き換えなければならないと思います
0そうだね
プレイ済み
返信[23]
親投稿
say sayer.exe
>てっくさん nullと空白文字は違うみたいですよ ☆前にそれでしばらく悩んだ 検証コード cls ? chkchr(5,5)'clsしたてなんで何も書いてない5,5を調べている locate 5,5:? " "'5,5に空白を書く ? chkchr(5,5)'同じところの文字コードの変化は如何に
0そうだね
プレイ済み
返信[24]
親投稿
Daisuke 0909daiki09
ありがとうございます!
0そうだね
プレイ済み
返信[25]
親投稿
say sayer.exe
試しに作ってみたら、何か腹立つゲームができました PKKENVKE
0そうだね
プレイ済み
返信[26]
親投稿
てっく tekpro
>sayさん、とりゅふさん これ以前にDATAでMAP生成していたのを忘れていました。すみませんでした。
0そうだね
プレイ済み
返信[27]
親投稿
Daisuke 0909daiki09
sayさんの作ったゲームが僕の作りたいゲームに似ているのでとても参考になります!所で質問なんですが、FORMAT$とはどういう時に使うんですか?教えてください…
0そうだね
プレイ済み
返信[28]
親投稿
say sayer.exe
format$をどういう時にって… 「工夫次第」としか言いようがありません print "score";sc;"hp";hp て書くより楽だから、print命令と併用してるだけです なまじ下手に工夫を薦めると、人のためにはならないと思うので、敢えて他の使い道は提案しないことにします ☆「他に思いつかない」とも言う ちなみに使い方については、ヘルプを見て既存のコードと見比べたり、自分なりに解釈して試したほうがてっとり早いです
0そうだね
プレイ済み
返信[29]
親投稿
Daisuke 0909daiki09
ありがとうございます!
0そうだね
プレイ済み