投稿
そんし tairiku1122
RPGのコマンドみたいなのを作ったんですが… なんだか長い気がします。 これを短縮できないでしょうか…?
0そうだね
プレイ済み
返信[1]
親投稿
工夫すれば短く出来ますよ。一例としては、19〜22行目は、 IF BTN AND 16 THEN ON Y GOTO @ATTACK, @DEFEND, @MAGIC, @ITEM みたいに出来ると思います。 あと文の区切り(LOCATEとPRINTの間とか)をスペースにしていますが、個人的にはちゃんとした区切り記号である:(コロン)で書いた方が良いような気がします〜。
0そうだね
プレイ済み
返信[2]
親投稿
そんし tairiku1122
なるほど! ありがとうございました。 これからはコロンちゃんつけます。
0そうだね
プレイ済み
返信[3]
親投稿
頑張ってください〜。 あと同じような感じの記述がたくさん出てくる(座標など一部だけ違って後は同じとか)ところはうまくやればまとまったり短く出来るポイントだと思うので、その辺に注目して最適化するとよりよくなると思います。
0そうだね
プレイ済み
返信[4]
親投稿
PRINTは?で代用出来るので、?にしてみては?
0そうだね
プレイ済み
返信[5]
親投稿
ゆうたん yu-tan-sama
ラベル文字列を配列にして、 GOSUB COMMAND$[selected]とかGOTO COMMAND$[selected] みたいな感じにするのも手ですよねー あとは規則性を見つけて最適化ですかねー 座標なんかは変数にして、1ずつ増えるところなんかはfor文のループで処理するといいかもです コマンド名の文字列も配列にしておくとループの中で扱いやすくなるかな?
0そうだね
プレイ済み
返信[6]
親投稿
そんし tairiku1122
難しい… FOR~NEXTの文は特に難しいので、 初心者には厳しいかと…
0そうだね
プレイ済み
返信[7]
親投稿
FOR〜NEXTは便利なので出来れば早いうちに覚えたいところですね〜。 あとぱっと見に気になるのはカーソルを消すためのPRINTが多いところですね。ここをまとめればスッキリすると思います。 カーソルは座標変更前ならLOCATE 28,20+Y:PRINT " "で消せるので、例えば12行目の後(13行目のIFがY座標変更しているのでその前のタイミング)ぐらいで今の座標を変数に保存しておいて、25行目のVSYNC前辺りで座標に変化があったら消すようにすればプログラム中の消す処理がかなりなくなってスッキリすると思いますよ。 つまり12行目の後辺りに、PY = Yと保存しておいて、VSYNCの前辺りで、 IF Y != PY THEN LOCATE 28,20+PY:PRINT " " とすればプログラム中のその他のPRINT " "関係はほとんど消せると思いますよ。
0そうだね
プレイ済み
返信[8]
親投稿
ゆうたん yu-tan-sama
FOR文あたりは人間が楽をする為の命令なので、使い方だけでも覚えておかないと何を作るにしても大変になってしまうのですよ FOR カウント用変数=初期値 TO 最後の値 繰り返したい処理 NEXT 基本はこれだけ FOR文でやることは主に回数指定の繰り返しなんでそんなに難しくはないです
0そうだね
プレイ済み