- ベストアンサー
HSPで歩行アニメーションのプログラムの組み方
- HSPのソースコード(プログラム)の組み方について質問します。
- カーソルキーの入力によってアニメーションしながら移動するような歩行移動のプログラムの組み方について教えてください。
- プログラムの書き方について分からない部分があり、ヘルプの参照やサンプルプログラムも理解できずに困っています。正しい書き方や具体的なサンプルプログラムの解説をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
プログラムのミスには (1)「エラー」になって、コンピュータからメッセージで教えてくれるもの (2)「エラー」にはならないけど、期待している事とは違う動作をしているもの の2通りがあります。 ここで言う「エラー」とは、プログラミング用語の「エラー」です。広い意味での「失敗」を指していません。 (1)は、非常に簡単です。 そのエラーメッセージを読んで理解して、指定された箇所を中心に見直せばいいのです。 エラーがあったら即「教えて」ではなく、まずは、自分でそのエラーの意味と対処方法を調べてみましょう。 人に聞くのはそれでもわからなかったときです。 繰り返しになりますが、まずは「日本語」でプログラムを書いてみましょう。 初期設定 *main もし 右キー なら 移動→(1)(2)(3)(4)の順に画像を切り替え もし 左キーなら 移動→(5)(6)(7)(8)の順に画像を切り替え もし 上キーなら 移動→(9)(10)(11)(12)の順に画像を切り替え もし 下キーなら 移動→(13)(14)(15)(16)の順に画像を切り替え 後処理 *mainへ戻る これを、実際のプログラムに変換すると if (右キー) { 移動 (1)(2)(3)(4)の順に画像を切り替え } if (左キー) { 移動 (5)(6)(7)(8)の順に画像を切り替え } ... という構造になります。 ここで、さらに「移動とはなにか?」「画像切り替えはどうするのか?」と分解して、それぞれをプログラムにしてくくことで、全体としてプログラムが完成します。 で、上記の「設計図」ができているなら、少なくとも { } の対応が取れていないこと、どこに } を入れたらいいのか、ということくらいはわかるはずです。 }を適切に入れれば、とりあえずエラーは無くなります。 あとは、(2)のエラーにならない間違いです。 これも、設計図があれば大半は解決できます。 プログラムの動作を観察し、何を期待しているのにそれがどうなっているか/なっていないかを把握し、そうなる理由を推理し仮説を立て、その仮説一つ一つを確かめていきます。 たとえば。 このままだと、左に行かないはずです。(観察) →左を押しても反応しない (現状の把握) →左キーの判定がちゃんと行なわれていないのではないだろうか?(仮説) →判定している部分を探す if (ky=4) {x+=15 //左 if (ky=4) {x+=15 //右 右と左で ky が同じ?あきらかに変。 → 修正する。 他にも次の「不具合」があるように思います。 ・一瞬で終わる→*mainに戻らないプログラムの流れがある ・右にしか移動しない→各キー毎の「移動」の処理を考える ・アニメーションが逆、変化しない→パターンの選択方法を考える プログラミングで重要なのは、設計と修正です。 関数だの文法だのは、存在だけ覚えておいて、実際使うときにヘルプで確認すればいいことです。 勉強するなら、本に書いてあることをそのまま暗記するのではなく、その内容を自分なりに理解して、原理を覚えるようにしましょう。
その他の回答 (2)
- zwi
- ベストアンサー率56% (730/1282)
本当に理解するためには、プログラムを分解していかないといけません。サンプルを理解するために分解してしまいましょう。 キー入力とアニメーションは別要素なので分解できますか? つまり、アニメーションしないけどカーソルキーによる移動をするプログラムとアニメーションだけして移動しないプログラムに分けれるかということです。
- kmee
- ベストアンサー率55% (1857/3366)
ヘルプとか見ても、「あなたの作りたいプログラム」が載っていることは、まずありません。 考えるのは自分です。 プログラムのやりかたがわからなければ、まずは「日本語」で書くことです。 やり方の説明もできないのに、プログラミングなんかできません。 どんな原理でやろうとしているのか、説明できますか? 人に解説聞く前に、御自身で御自身のプログラムを解説してください。 重要なのは「何をやっているか」ではなく「何のためにやっているか」です。 pt=x/15\4 を 「xを15で割った商を、4で割った余りを pt に代入」 なんてことは、見ればわかります。 必要なのは、このptは何なのか、それをどういう理由で、この計算式になっているのか、です。 このプログラム、明らかに { と } の対応が取れていません。 これって、エラーになりませんか? エラーになっただけで「できない」と諦めてませんか? エラーメッセージを読んで理解して修正する、というのはプロでもやっていることです。 全てのプログラマはエラーから学んでいます。
補足
その言ってる意味自体理解出来てないため質問しています。 title "カーソルキーによる移動とアニメ処理" buffer 2 :picload "歩行.bmp" screen 0,640,480 cls 4 x=64 :y=64 *main redraw 0 boxf x,y,x+63,y+63 stick ky,15 if (ky=4) :x+=15 pt=x/15\4 pos x,y :gcopy 2,pt*64,0,64,64 redraw 1 wait 10 goto *main ↑内容で(1)~(4)までを(1)(2)(3)(4)の順でアニメーションさせながら移動させることはできましたが似たような命令文でIF関数をhelpを参照しながらIFの書き方を見ながら書きました。 プロではなく、まだまだ、覚えなきゃいけないのですが、色んなHSPの本を見ても分からなかったので質問しています。 失敗(エラーは付きもの)なのは当然なのですが自分の持ってる知恵だけで解決できるならばはっきり言って恥を忍んで人に頭を下げてこのサイトを利用しません。 やりたいことは上にも書きましたが 画像参照 (1)~(4) 右キー (1)(2)(3)(4)の順に画像を切り替えながら移動 (5)~(8) 左キー (5)(6)(7)(8)の順に画像を切り替えながら移動 (9)~(12) 上キー (9)(10)(11)(12)の順に画像を切り替えながら移動 (13)~(16) 下キー (13)(14)(15)(16)の順に画像を切り替えながら移動 なので、 buffer 2 :picload "歩行.bmp" でbuffer2に "歩行.bmp"をロードして メイン画面を screen 0,640,480 横640×縦480の大きさにして clsコマンドで 画面をクリアして x=64 :y=64 (1)~(16)まで各1枠 64×64の大きさと仮定しています その後の説明はhelpのサンプルプログラム(ソース)を見ながら色々と試しに弄ったりしながら学びの最中です。 サイト等でも参照できそうな物を探していますがなかったので分かるのであれば教えを請いたく知恵をお貸し下さいませ もしくは、参考になりそうな本名やサイトのアドレス等、課題として宿題みたいな感じでも良いので。 説明ベタで初心者すぎて何が聞きたいのか、分からないのか 分かりづらくて本当に申し訳なく思っておりますが 何卒宜しくお願いします(↓>_<謝)
お礼
返信が遅れてしまいましたことをお詫び申し上げます (:>_<詫)ペコ どこが間違っててどう考えてプログラミングしていったら良いのか等全然分からなく、僕のような頭の悪い人でも分かりやすい回答をしてくださって有難うございました。 (((礼((>o<↓) 今後つまづいたりしても自分で考え頑張って勉強していく所存でございます。 本当に有難うございました。