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

自分で作ったゲームや動画、面白いネタをみんなに宣伝しましょう!
また、気軽に作品の感想をコメントで残してあげて下さい。
アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

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

#1

投稿記事 by もるも » 7年前

インベーダーぽいゲームです。
ソースコードも入れてあるので、
クラスの設計のアドバイスや、添削してくださると嬉しいです。

よろしくお願いします。
添付ファイル
shooting_game.png
shooting_game.png (8.49 KiB) 閲覧数: 10170 回
ShootingGame.zip
(2.51 MiB) ダウンロード数: 332 回

peot

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

#2

投稿記事 by peot » 7年前

こんにちは。

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


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

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

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

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


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

アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

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

#3

投稿記事 by もるも » 7年前

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

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

アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

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

#4

投稿記事 by もるも » 7年前

弾の種類、自機ショットのパワーアップを追加しました。
最初のステージをクリアすると敵の攻撃が強くなります。
添付ファイル
ShootingGame (2).zip
(2.73 MiB) ダウンロード数: 295 回

返信

“作品お披露目掲示板” へ戻る