ページ 11

プログラミングの練習のために作ってみました。

Posted: 2016年9月21日(水) 21:47
by もるも
インベーダーぽいゲームです。
ソースコードも入れてあるので、
クラスの設計のアドバイスや、添削してくださると嬉しいです。

よろしくお願いします。

Re: プログラミングの練習のために作ってみました。

Posted: 2016年9月24日(土) 18:15
by peot
こんにちは。

ゲーム自体はとても良くできています。
ですが、ソースの中身を見させていただいた際に気になる部分が幾つかありました。
もるもさんも希望されているようなので、素人目ではありますがアドバイスをさせていただきます。


new Controlがdeleteされていません。適切に開放するか、スマートポインタを使えば自動的に開放してくれます。

Characterクラスにいろいろと詰め込みすぎています。プレイヤー、敵、弾、爆発はそれぞれ別のクラスに分けたほうがよいです。また、スコアと残機に関するもの(自分以外の情報もですが)を各キャラクターごとに持っているのはおかしいです。これはControlクラスに移動させるか、これも別クラスとして設定してしまうのがよいでしょう。

Controlクラスからプレイヤー、敵、弾、爆発に関することは、各クラスを作ることでそちらに移動できます。
Control::All()の中身も長大になっているので、分岐ごとに関数化したほうが見やすくなります。
Control::All()以外のメンバ関数はpublicである必要がありません。すべてprivateにしておきましょう。

最後にObjectクラスのアクセサ(set,getのこと)についてですが、人によって意見が分かれるという前提で聞いてください。
メンバ変数にアクセサを用意すること自体は常套なのですが、セッターとゲッターのどちらもが必要になった場合には、その変数が本当にそこにいるべきなのかをよく考えてください。またアクセス先のその動作はこちらが引き受けるべきものかもしれません。どちらにせよセッターゲッター両方が存在するという事はカプセル化されていないという事です。アクセサを介しているから大丈夫という考え方は安易ですし危険だと思います。


以上、参考になれば幸いです。

Re: プログラミングの練習のために作ってみました。

Posted: 2016年9月25日(日) 14:40
by もるも
たくさんのアドバイスありがとうございますー。
大変勉強になりました。
少しずつ理解を深めながらやっていこうと思います。
アクセサの件とかどういう形が好ましいのか難しいですね(^^;)

見やすいコードを目指して頑張ります。

Re: プログラミングの練習のために作ってみました。

Posted: 2016年12月08日(木) 21:14
by もるも
弾の種類、自機ショットのパワーアップを追加しました。
最初のステージをクリアすると敵の攻撃が強くなります。