c++で龍神録

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
とっち
記事: 56
登録日時: 12年前
住所: 岡山

c++で龍神録

#1

投稿記事 by とっち » 12年前

いつもお世話になっています。
今回龍神録の館、四聖龍神録Plus・次回作のオープンソースを参考にしながら、
c++版龍神録を作ってみました。

龍神録の館とまったく同じ動作をするものを目標として作成しました。
ただ作っていなものとして以下の章の内容は作成していません。
31,32,33,36,42,51~,番外(ごめんなさい)

龍神録の館のプロジェクトのdatフォルダをそのままRyujin.exeのある場所にコピペしていただくと
動作します。

しかしc++はほとんど独学で、ネット上のコードを見よう見まねで作ったので、
いくつか気になるところがあります。

気になるところ
1.全体の構成
管理人さんのコードを参考に書いているのですがところどころオリジナルのものにしています。
クラスの構成や継承など、おかしいところはありませんか?
こうしたほうがいいという意見がありましたらお願いします。
2.stageCount
stageCountをグローバル変数で書いてます。やはりグローバル変数はやめて別の書き方のほうがいいのでしょうか?
3.shotの管理
baseChar.hのクラスでbullet情報を取得してcharMgr.cppのProcess関数でhitを検出、
ヒットした弾を削除したデータをbaseChar.hのクラスのSet関数で新しく上書きするような
方法にしてます。個人的に凄く汚いなぁと思ったのですが、
他にいい方法が浮かびませんでした。いい方法があればお願いします。
4.boss登場時
ラスボス登場時にいろいろな処理をするため、一瞬処理落ちします。
特にBGMを登場時読み込むので処理落ちが激しく、プレイに支障が出るほどです。
やはり初期に読み込んでおくべきでしょうか?
5.baseShot.hのBulGet関数
baseShot.hのBulGet関数はbossShotの様々な弾幕に対応するためデフォルト引数を
たくさん使って何とかしています。BulGet関数をオーバーロードしたほうがきれいかな
と思ったんですがどちらがいいでしょうか?
6.singleton
このプログラムではplayer.h,image.h,effect.hの3箇所でシングルトンパターンを
使っています。これは多いのでしょうか?特にeffectとplayerをシングルトンで書くのは
どうかなと思いましたがいい意見があればお願いします。
7.動作環境
現在私のパソコンでしか動作することを確認していないのでみなさんのパソコンでも
動作するか確認していただけると嬉しいです。特に低スペックな環境で動作するか不安
なので、そんな環境がある方はぜひお願いします。

以上この7つのことに答えていただけるとありがたいです。
またこのほかにも意見がありましたら言っていただけると嬉しいです。
よろしくお願いします。
添付ファイル
龍神録.zip
(762.04 KiB) ダウンロード数: 93 回

nil
記事: 428
登録日時: 12年前

Re: c++で龍神録

#2

投稿記事 by nil » 12年前

1.ファイル数が多いので大まかにしか見ていないのでわかりません。
2.ローカル変数で持ち、引数で渡すのが理想です。
4.処理落ちが激しいようであればはじめに読み込むべきです。
6.imageは個々のクラスで管理してもいいのではないでしょうか
playerはシングルトンで書かないほうがいいと思います。
7.
Windows7 Home Premium 64bit
CPU:Intel Pentium
物理メモリ4GB
60FPSを維持できてますがボス前の読み込みは重かったです。

気になったところを、
まずコメントの量は少ないように感じられました。
あと外からは呼ばれてほしくない筈の関数(関数ポインタの中身など)はprivateにしたほうがいいと思います。
systemMgrの役割と処理内容が食い違っています。
列挙体の命名規則が一部CamelCaseになっていますが他に合わせてSNAKE_CASEにしたほうがいいのでは
同じく列挙体の接頭辞がわかりづらいです。
pは特にポインタと混同しやすいです。

ついでですが、deleteの順番はnewをした逆の順番で行ったほうがいいです。
デバッグ用のマクロも関数化していいのでは?

コード:

inline void Assert( bool cond ){ if( !( cond ) ) DebugBreak();}

とっち
記事: 56
登録日時: 12年前
住所: 岡山

Re: c++で龍神録

#3

投稿記事 by とっち » 12年前

お返事ありがとうございます。
>2.ローカル変数で持ち、引数で渡すのが理想です。
そうですか。前はcharMgr.hでローカル変数としていたのですが
music.cppでstageCountが必要になって引数でつないでいこうとすると
すごく大変だったのでグローバルにしてしまいました。もう一度検討してみます。
>4.処理落ちが激しいようであればはじめに読み込むべきです。
そうですね。龍神録がこの方法だったので今回はあわせましたが、次回は
最初に読み込みます。
>6.
imageに関しては管理が簡単そうだったので今回こういう方法にしました。
個々のクラスで管理してもいいですね。

>playerはシングルトンで書かないほうがいいと思います
実は今回のプログラムで一番悩んだのがここなのです。
シングルトンで書きたくはなかったのですが、playerの座標情報はあちこちで
参照しますし、それをポインタでつないでいくとなれば非常にややこしくなりそうなんです。
なにかいい方法はないでしょうか?
やはりポインタでつないでいくべきなのでしょうか?


>ボス前の読み込みは重かった
もう少し改良しなければなりませんね。

コメント量は確かに少なかったです。
すべて一人で完成させたのでコメントをつけなくてもなにをしているかわかったためです。
人に見せるコードはもう少しコメントを書くべきですね。

>あと外からは呼ばれてほしくない筈の関数(関数ポインタの中身など)はprivateにしたほうがいいと思います。
それはなおさなくてはいけませんね!
指摘ありがとうございます。

>systemMgrの役割と処理内容が食い違っています。
ほんとですね。
今回はFPS制御だけですので名前変えるべきですね。

命名規則はぐちゃぐちゃでした。申し訳なかったです。
統一したいと思います。

>deleteの順番はnewをした逆の順番で行ったほうがいいです
学校ではdeleteすら教えてもらえなかったので、勉強になりました。

>デバッグ用のマクロも関数化していいのでは?
このマクロはソフト屋さんのRPG講座のものをコピペしたものでした。
c++ならマクロよりインライン関数にすべきですね。


いろいろ答えてくださって本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る