投稿
いがぐりた ginkamen16
同じ種類の敵を倒すとコンボが溜まり、得点が大きく増えるようにしたいのですが思うように増えません。上のプログラムのどこが間違いでしょうか?
1そうだね
プレイ済み
返信[1]
親投稿
printf printf
質問をする場合は、プログラムで使っている変数、GEKIHA、A、B、C、H、SCのそれぞれの意味(どういった役割なのか)を書いておくといいかもしれませんねー
0そうだね
プレイ済み
返信[2]
親投稿
ちら見だけど IF A[0]>=1 AND A[H]==1 の所かな A[0]>=1 これが敵を倒したコンボ数の確認で B!=0 これが倒した敵の番号のチェックであれば A[H]==1 はいらないかも あとC[H]がコンボ数ならA[H]と同じ数値になるのでいらないかな?
0そうだね
プレイ済み
返信[3]
親投稿
いがぐりた ginkamen16
すみません。 GEKIHAが敵を1匹倒した時のカウントで、Aがコンボ数です。 Bは倒した時の敵の種類を表しています。B!=Hの部分で、BとH(0~3が入ります)が同じじゃなければコンボ数が0になります。 、Cはスコア計算をする際に、同じ部分をループで何度も計算しないようにするためのストッパー役です。1コンボでCに1が入るのでA(コンボ数)に1が入っていてもAND C[H]<=0の条件があるのでコンボ1の時の計算は二度行われないという意味です。
0そうだね
プレイ済み
返信[4]
親投稿
いがぐりた ginkamen16
また、FOR H=0 TO 21 というのは全種類の敵の変数を意味していて、 FOR H=0 TO 3 は、同じ種類(ここではスライム)を意味しています。
0そうだね
プレイ済み
返信[5]
親投稿
いがぐりた ginkamen16
試しにA[H]==1とC[H]の部分を片方、または両方消してみましたが無理でした…。 スコアの+値をいじって検証してみた結果、コンボ2までは加算されてるみたいなんですが、コンボ3以降の加算をしてないみたいです…
0そうだね
プレイ済み
返信[6]
親投稿
いがぐりた ginkamen16
↑のはスクショのままのプログラムを起動した時のスコア変化のことです。念のため。
0そうだね
プレイ済み
返信[7]
親投稿
printf printf
意図した通りの処理なのかを上から順番に見て行きましょう 先ずは「’テキをたおした」のループですが、この部分は 一体の敵を倒した時にだけ通るのか、複数の敵を倒した状態でも通るのか、どちらでしょう? 例えば一体だけ倒した状態でこの処理が実行されると仮定した場合、 GEKIHA[20]にだけ1がセットされていた場合、この処理を通ると、A[20]だけが1になり、 GEKIHAとAのその他の値は全て0になりますが、それでオッケーですか?
0そうだね
プレイ済み
返信[8]
親投稿
いがぐりた ginkamen16
GEKIHA[H]は各敵が倒された際に1のチェックが入るようになっています。21の敵が倒されたとして、この処理だと21以外の0~20のGEKIHA[H]が0になってしまいますが、GEKIHA[H]が0になっても、一度1が入ったA[H](コンボ数)は下がらないので大丈夫のはずです。
0そうだね
プレイ済み
返信[9]
親投稿
printf printf
次に「'おなじしゅるいのてきをたおせばコンボがふえる」 の部分ですが、A[0]〜A[3]は固定して使っているようです この4つだけ特別な意味があるのでしょうか?
0そうだね
プレイ済み
返信[10]
親投稿
いがぐりた ginkamen16
ちょっと一からプログラムを根本的変えて考えてみますね。協力してくれたあんへるたんさんとprintfさんありがとうございました。どうしてもできなかったら、また改めて質問させてもらいます。
0そうだね
プレイ済み
返信[11]
親投稿
たとえばGEKIHA[21]に1が入って他が0でも構わないのであれば これはGEKIHA=21でも問題ないはずです FOR H=0 TO 21 IF GEKIHA==H THEN A[H]=A[H]+1 ELSE A[H]=0 NEXT こんなのとか
0そうだね
プレイ済み
返信[12]
親投稿
いがぐりた ginkamen16
本当は下4~7の場合、8~11の場合(それぞれ種類が同じでコンボ対象)も書いてありますが、わかりやすいようにと思ったのと画面の範囲の関係で一種類のみのバージョンだけ抜き出しました。
0そうだね
プレイ済み
返信[13]
親投稿
いがぐりた ginkamen16
ちょっと出掛けないといけないので、あんへるたんさんの言ってくれたプログラムはあとで試そうと思います。ありがとうございました。
0そうだね
プレイ済み
返信[14]
親投稿
printf printf
なるほど Aの0〜3、4〜7、8〜11はそれぞれ同じ種類の敵だと言う事ですね となるとGEKIHA[0]〜GEKIHA[2]までの三体を倒した場合 「'おなじしゅるいのてきをたおせばコンボがふえる」までの処理がこのプログラムの状態では A[0]=6 A[1]=5 A[2]=4 となりますが A[0]=1 A[1]=1 A[2]=1 となるのが正解という事でいいですか?
0そうだね
プレイ済み
返信[15]
親投稿
けい kei0baisoku
ソース部分の具体的なご助言は他の方がされているので、違う観点からアドバイスしてみます。 ・変数やラベルなどには、面倒でも意味のある名前を付けた方が良いです。名前をつけることで、間違った使い方をしようとした時などに自分で気付きやすくなります。 ・計算結果が意図通りにならない不具合は、途中の変数の値を逐一出していって、どこまで意図通りでどこから意図と違っているかを辿るのが効果的です。 ・(今予定されているようですが)コンボになっているかを判定するだけの割にアルゴリズムが複雑すぎる印象がありますので、同じことをもっとシンプルな考え方で出来ないか、考え直すのも手です。
0そうだね
プレイ済み
返信[16]
親投稿
いがぐりた ginkamen16
あー、なるほど。指摘されて考え直してみたらコンボが増える時の処理が、3体以上倒したときにこれでは何度も重複してコンボ増の処理ができちゃいますね…。問題点がわかりました。 けいさんのアドバイスもありがとうございます。コンボの簡略化は色々考えてはみたのですけど、私の頭では上手い省略法が見つからなくて、思いつくままに書いた結果がこれでした。しかし、やはり穴がありましたね…
0そうだね
プレイ済み
返信[17]
親投稿
printf printf
プログラミングはある種のパズルのような面もあるので、何度も試行錯誤して頑張ってくださいねー 思い通りに動くまで頑張れれば、その先には最高の満足感が待ってますよー 処理の流れを紙に書いて、丁寧に一つ一つの処理をじっくり考えるのも一つの手だと思いますよ
0そうだね
プレイ済み
返信[18]
親投稿
けい kei0baisoku
紙に書くのも手………て書こうとしたら既に書かれてた!/(^O^)\ printfさんのおっしゃる通りだと思います。頑張ってください(^^)
0そうだね
プレイ済み
返信[19]
親投稿
いがぐりた ginkamen16
みなさんのおかげできちんと動くようになりました。アドバイスを取り入れて、一応こんな感じになりました。
2そうだね
プレイ済み
返信[20]
親投稿
けい kei0baisoku
おお!だいぶスッキリ分かりやすくなりましたね!(^O^) 無事動いたようで良かったです
0そうだね
プレイ済み