コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ジドオブ ◆C5SvT64/Rtme
2022/8/7 16:45
協力
【公開キー:4TAX3K394】制作しているプログラムの進歩です。
「画面内でプチキャラが攻撃して体力を削り合いながら生き残る対戦アクションゲーム」を作っています。
画面を揺らす処理の準備やプレイヤー処理の統一等、やれるだけやってみました。
でもまだ私初心者なので色々な命令の意味を理解しきれてません。なので命令の無駄とかを教えていただきたいです。

コメント

アバター
あきと 2022/8/7 22:54 ◆qGd5dQw2g3a2
落としてみました。
一から作っているんですね。

GOSUBを使って配列を初期化している箇所はDEF文を使うと便利になります。

キャラ移動の所でSPANIMとSPCHRが続く所はDEF文で関数化すれば一行にまとめることができると思います

591行目からのデータの羅列と代入をIF文で行っている所はREAD,DATA文でスッキリ書けます。RESTOREも使ってみてください。

細かい所までは見ていませんが、横移動時に壁にめり込んだ時にブルブル震えてしまうのは移動と壁の判定が前後しているからだと思うので、全ての移動処理が終わってから壁や攻撃の判定と補正処理に行けるといいですね。
アバター
こういち 2022/8/8 0:14 ◆ou0jbJnEJ0Kb
せっかく求められてるので全力で指摘しようと思いましたが、まさかの4専用でしたか。
軽く読んでみましたが、セオリー通りでお手本のような良いコードだと思いました。

いくつか気になった点
前のコメントのDEFとGOSUBは機能としてはどちらもサブルーチンを作るものなので、完全に好みになります。DEFだと、DEF〜END内のみで使える「ローカル変数」というものを使えますが、その分速度が遅くなります。配列の初期化ならGOSUBも十分ありだと思います。

せっかくキャラの移動をサブルーチン化されてるので、SPFUNCを使えるとスマートかつ高速になります。(ただし、難しいです)最初にSPFUNCでスプライトごとのサブルーチンを設定して、メインループ内でGOSUBの代わりにCALL SPRITEです。

座標を配列で書いてますが、SPOFS OUTを使うと必要なくなるかもしれません。(ただし、統一感が無くなるので好みになります)

メインループはLOOP〜ENDLOOPの方が個人的には好みです。(GOTOは出来るだけ無い方が好まれます。個人的にはBREAK,CONTINUEよりはましだと思います)

SPCOLをキャラクタの移動時に毎回書いてるように見えますが、最初に一回書くだけで良いです。
アバター
ジドオブ 2022/8/8 20:40 ◆C5SvT64/Rtme
あきとさん、こういちさん、アドバイスありがとうございます!
すみません後で個別に返信しますのでしばらくお待ちください…
アバター
ジドオブ 2022/8/8 21:29 ◆C5SvT64/Rtme
すみません一旦更新しましたが、まだ少ししか意見を反映させてないです…
>>あきとさん
ごめんなさい、まだDEF文の理解に時間がかかるのでゆっくりと理解していこうと思います…!
>>こういちさん
一応GOTOをLOOPに変えることはできました。これからも頑張ります!
アバター
ジドオブ 2022/8/9 20:26 ◆C5SvT64/Rtme
更新しましたが…技の当たり判定が上手く統一できないです…誰かいい方法を教えてください!
アバター
あきと 2022/8/10 16:45 ◆Bz8zeG7wRHNQ
見てみました。

「ダメージはんてい」の箇所、
プレイヤーを表している「P」と判定用にループさせている「ID」がごちゃまぜになっている印象です。配列の中のPとIDを再度確認したほうが良さそう。

最初の配列定義でPLCOUNTは5としていますが、実際には0は使用せず1〜4を使用して表示・判定しているようですが、ソース内にFORループをID=1から書いている箇所と直接配列参照を「+1」で書いているところが混在しています。
おそらくこれが判定のズレる原因になっている思います。(PとループしているIDの判定をしたいのに、判定行にPBOD[ID]+1みたいな記述があると一つズレてしまう)
なかなか慣れないかもしれませんがPLCOUNT=4
0〜3で扱うプログラムに全変更することをおすすめします。そうすれば+1と書く必要がなくなります
アバター
ジドオブ 2022/8/11 6:27 ◆C5SvT64/Rtme
更新しましたが…
>>あきとさん
2回も丁寧にアドバイスしてくださってるのに反映してなくてすみません…
後私のこだわりでプレイヤー1Pは1の変数ってやりたいのです…
アバター
ジドオブ 2022/8/12 18:09 ◆C5SvT64/Rtme
更新しました。
超簡易的なAIを搭載しました
後音とか調整してます。
…そろそろ新しいトピックを作るべきでしょうか?
アバター
あきと 2022/8/24 3:06 ◆Bz8zeG7wRHNQ
ソースコードに手を入れてみました。
公開キー【4QZ25JXA3】
ファイル名「MAIN2.PRG」

と言ってもスペースを入れまくってインデントの調整だけしたソースだけです。

インデントの方針としては
・GOSUBの中に入ったら一段下げる
・IF,FORの中に入っても一段下げる
・IF,ElSE,ENDIFは同じ段に揃える
・FOR,NEXTも同じ段に揃える
私はこのように記述しています

一箇所だけソースから関数化してみました。
949行目のIF文が右端まで行っているので関数化しました。
970行目からのDEF文になります。
参考になれば幸いです
アバター
ジドオブ 2022/8/25 17:23 ◆C5SvT64/Rtme
>>あきとさん
おおおお…!
すごく見やすくなってます!
ふむふむ、関数とはそういう感じなのか…
ありがとうございました!
アバター
あきと 2022/8/26 19:58 ◆Bz8zeG7wRHNQ
お役に立てて良かったです。
現状のソースコードを見てて思うのは
・二次元配列も使ったほうが良さそう
・IF〜ENDIFの間が1ページ越えるような長い処理はGOSUBにまとめる
など行うと見やすくなりそう。

入れたいものどんどん組み込んでください
アバター
ジドオブ 2022/8/27 18:19 ◆C5SvT64/Rtme
あきとさん、ありがとうございます!

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -