
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)の順に画像を切り替えながら移動
を左から順にコマ送りで移動させたい
歩行しているように
この場合if関数を使えば良いはずなのですが
プログラムの組み方がイマイチ初心者講座HPで見ても動画で見ても、図書館等で勉強しても分らなかったので
出来る方の知恵をお貸し頂きたく
質問します。
画像もupしときましたので参考に見てくださいね。
◆自分で書いたプログラム◆
title "カーソルキーによる移動とアニメ処理"
buffer 2 :picload "歩行.bmp"
screen 0,640,480
cls 4
x=128 :y=128
*main
redraw 0
boxf x,y,x+127,y+127
stick ky,15
if (ky=1) {x-=15
pt=x/15\4
pos x,y :gcopy 2,pt*64,0,64,64
redraw 1
wait 10
goto *main
}
if (ky=4) {x+=15 //左
pt=x/15\4
pos x,y :gcopy 2,pt*64,0,64,64
redraw 1
wait 10
if (ky=4) {x+=15 //右
pt=x/15\4
pos x,y :gcopy 2,pt*64,64,64,64
redraw 1
wait 10
goto *main
}
if (ky=2) {x+=15 //上
pt=x/15\4
pos x,y :gcopy 2,pt*64,128,64,64
redraw 1
wait 10
goto *main
}
if (ky=8) {x+=15 //下
pt=x/15\4
pos x,y :gcopy 2,pt*64,192,64,64
redraw 1
wait 10
goto *main
◆ここまで◆
でプログラムの書き方間違っているのだと思うのですが
どこをどう変更して良いのか分からず悩んでいます
ヘルプの参照等見ていても
良くわからなかったので
間違ってる部分の指摘または
新たにサンプルプログラム(ソース)を解説付きで
教えていただけると有難いです
○┓ペコリ

No.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に戻らないプログラムの流れがある
・右にしか移動しない→各キー毎の「移動」の処理を考える
・アニメーションが逆、変化しない→パターンの選択方法を考える
プログラミングで重要なのは、設計と修正です。
関数だの文法だのは、存在だけ覚えておいて、実際使うときにヘルプで確認すればいいことです。
勉強するなら、本に書いてあることをそのまま暗記するのではなく、その内容を自分なりに理解して、原理を覚えるようにしましょう。
返信が遅れてしまいましたことをお詫び申し上げます
(:>_<詫)ペコ
どこが間違っててどう考えてプログラミングしていったら良いのか等全然分からなく、僕のような頭の悪い人でも分かりやすい回答をしてくださって有難うございました。
(((礼((>o<↓)
今後つまづいたりしても自分で考え頑張って勉強していく所存でございます。
本当に有難うございました。
No.2
- 回答日時:
本当に理解するためには、プログラムを分解していかないといけません。
サンプルを理解するために分解してしまいましょう。キー入力とアニメーションは別要素なので分解できますか?
つまり、アニメーションしないけどカーソルキーによる移動をするプログラムとアニメーションだけして移動しないプログラムに分けれるかということです。
No.1
- 回答日時:
ヘルプとか見ても、「あなたの作りたいプログラム」が載っていることは、まずありません。
考えるのは自分です。
プログラムのやりかたがわからなければ、まずは「日本語」で書くことです。
やり方の説明もできないのに、プログラミングなんかできません。
どんな原理でやろうとしているのか、説明できますか?
人に解説聞く前に、御自身で御自身のプログラムを解説してください。
重要なのは「何をやっているか」ではなく「何のためにやっているか」です。
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のサンプルプログラム(ソース)を見ながら色々と試しに弄ったりしながら学びの最中です。
サイト等でも参照できそうな物を探していますがなかったので分かるのであれば教えを請いたく知恵をお貸し下さいませ
もしくは、参考になりそうな本名やサイトのアドレス等、課題として宿題みたいな感じでも良いので。
説明ベタで初心者すぎて何が聞きたいのか、分からないのか
分かりづらくて本当に申し訳なく思っておりますが
何卒宜しくお願いします(↓>_<謝)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COBOLのS9タイプからXタイプへ...
-
Pascalの時刻表検索プログラム...
-
Excel VBA で、データベースフ...
-
openGLで物体を半透明にして表...
-
C言語(プログラミング)の質問で...
-
マウスカーソルの表示・非表示
-
Macターミナルで実行中のプログ...
-
TCP/IP通信時のサーバーからの受信
-
Excel(VBA)でSetTimer関数を使...
-
AIXでのプロセス使用メモリの最...
-
C# シリアル通信でデータ受信...
-
FOM出版の公認テキスト&問題集...
-
メッセージボックスのボタン名変更
-
powershell を使いカレントディ...
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
-
エクセルVBA 大容量CSVファイル...
-
UdpClient 送信元のIPアドレ...
-
vb.netでEXCEL起動がうまくでき...
-
アプリケーションが終了するま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba listviewにおけるtextのAli...
-
マイコンからプログラムを読み...
-
指定したフォルダーを最前面表...
-
2値化した画像の黒い部分のピク...
-
COBOLのS9タイプからXタイプへ...
-
自分のHTMLサイトでRSSを読み込...
-
プロダクションコードとは?
-
VB6 画面サイズ変更について
-
Pythonで仮想通貨の自動売買が...
-
C言語primeについて
-
世界一美しいソースコード
-
誕生日占いをプログラムで作成...
-
gccでスタックオーバーフローの...
-
VBA
-
プログラムってコードに性格っ...
-
三次元のグラフを書きたいので...
-
XPathの関数「text()="value"」...
-
Visual C++で作ったプログラム...
-
C言語にすごく悩んでいます。
-
C++で書いてあるフリーソフトの...
おすすめ情報