みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ゲームプログラミング クラス構造について

現在、ソフトウェアエンジニアめざしてプログラミング勉強中の者です。
とりあえず、"The C Programing Language"(Kernighan&Ritchie) をようやく読み終え、最近C++の勉強を始めました。
そこで!
楽しくオブジェクト指向を身につけようと、簡単なゲームプログムを作りながら勉強する事にしたのですが、例えばマリオのような横スクロールアクションゲームの場合、どのようにオブジェクトを分類したら良いのでしょう?
たとえば、どのような基底クラスを作り、そこからどのような派生クラスを作ったら良いのでしょうか?
かんたんな構成の用な物を作っていただけるとうれしいです。

(例)
キャラクター(X,Y座標が常に変化し動きまわる)
 主役(ボタン操作によってX,Y座標が変化) 
 敵(プレイヤーのボタン操作とは関係なく動き回る)
Action
 重力(キャラクターX,Y座標にy方向加速度をくわえる) 
MAP
 床(重力によりキャラクターが下へ行き過ぎないようよう、Y座標の移動制限を制限) 
 ブロック


例は適当に作った物ですが、こんな感じにキャラクターのX,Y座標は重力などに対してPrivate:にするべきなのか?などもかいてあるとうれしいです^^

投稿日時 - 2009-10-10 18:24:14

QNo.5356862

暇なときに回答ください

質問者が選んだベストアンサー

ええとですね、質問をそのまま答えるのは、おそらくここの質問版の領域を超えています。
文字通りとらえたなら、アクションゲームのクラス設計をしてくれということになりますから、真面目に答えたらお金が欲しいレベルの質問です。

なので、質問を読んでいて私が思ったことなど書かせていただきます。

・MVC(Model View Controller)
ゲームに限らずWebなどでも最近はよく取り上げられる考え方に、MVCというものがあります。プログラムをModel, View, Controllerの三つに分けるという考え方です。
Modelはそのままデータ構造。ゲームで言えば主人公や敵キャラなどのオブジェクト。位置情報や体力情報などをそれぞれが保持します。
Viewは画面表示。Modelのデータに基づいて表示を行います。ゲームでは画面更新。
Controllerはイベント処理。キー入力やマウス入力などのイベントを、Modelへ適宜渡します。

と、このような仕組みを使うことになります。
データを持ったオブジェクトのインターフェイス(外観)は、だからControllerが呼び出すイベントや他のオブジェクトとの関係で作られます。

キャラクターが移動する、という行動は、
・キーボード入力がある
・Controllerがキー入力を受け付ける
・左右ボタンだったので、(中略)、主人公に「移動しろ」と言う
・主人公は与えられたぶん移動する、ただしマップには注意する
ということを行うと考えられます。

重力云々をどこに入れるかは設計次第で変わりますが、フレーム更新時に重力加速度と移動をかけるという部分は確定ですから、問題はそれを誰に任せるかということになります。
・移動メソッドに含ませる。Controllerからの入力は記憶しておき、更新時まで貯めておく。移動メソッドは毎フレーム呼ぶ
・更新メソッドの中に含めておく。更新メソッドはもちろん毎フレーム呼ばれる。移動メソッドはControllerから入力があればそのときに反映させる
などの方法が考えられます。他にもいろいろなやりかたがあるでしょう。

作るのはあなたです、設計含めて楽しい作業ですから、試行錯誤しながら作ってみてください。
オブジェクト指向自体は、いかに他人に任せるかを考えるとわりとうまくいきます。がんばってください。

投稿日時 - 2009-10-11 01:45:11

補足

*補足
"デザインパターン"というキーワードで検索したらいろいろと参考になりそうな情報がでてきました。
ゲームを作る前にこれについてもう少し勉強しようと思います。^^

投稿日時 - 2009-10-11 06:20:27

お礼

迅速、かつ丁寧な回答ありがとうございます。

そうですよね^^;
質問した事すべて回答してたらすごく時間かかっちゃいますもんね。
まだ高校卒業したばかりで、世間知らずの身なのでちょっと無茶な質問してしまいました。

回答の話に戻りますあが、
M.V.C.ですか~
そういう分け方もありなんですね。

キャラが動くアルゴリズムや、プログラミング言語の説明ページはGoogleで検索すれば山ほどあるのに対し、
クラス構造を説明したページや本はなかなか見つからなくて困っていたので丁寧なご回答ほんとうにありがとうございました。

投稿日時 - 2009-10-11 05:52:01

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

デザインパターンを学ぶのもよいと思いますが、デザパタとMVCとは多少違う領域ではあります。
MVCはプログラム全体に関わる設計方法であるのに対して、デザインパターンはもう少しミクロなクラス関係のための設計パターンです。継承関係とかprivateというのは、さらにミクロな(というか、話としてもやや異なる)領域です。
デザパタは、いや、勉強するのも良いんですが、たぶんあんまり理解が沸かないと思うんですよ。実際に作ってる途中に行った工夫が実はデザインパターンだったと後に知る、という身につけ方が多いようです。今の時点ではそんなに(本を買うなど)本腰入れて勉強しなくてもいいと思います、それぞれのパターンの名前と概要をなんとなく知ってる程度で。知っていれば書くときに使えるかも知れませんが、別になくても作れますし、無理に使うものでもありません。

クラス構造というか、ゲームのプログラムの基本的な構成を知りたいと言うことであれば、この本などはおすすめです:
http://www.amazon.co.jp/dp/4797344512
Amazon書評はあまり芳しくありませんが、ゲームの基本構成をなんとなく知る目的にはなかなか適しています。
この本はJavaですが、C++であってもクラス構造や関係はほとんど変わりません。ちょっと記述方法が違うだけです。

C++でゲームを作るための本としては、こちらが近頃絶賛されています。
http://www.amazon.co.jp/dp/4798021180
ただし分厚いうえ自習用の教科書という性格の書籍なので、ある程度C++に慣れていないと知識を引き出すのに苦労するでしょう。

投稿日時 - 2009-10-13 04:09:01

お礼

2どもご丁寧にありあがとうございます。
やっぱり本を読むのもいいけど、プログラムは実績ですよね^^
バカバカしい間違いをたくさんして、経験を積んでいかないと行けませんね。

そろそろ質問を閉め切ろうと思います。

貴重なお時間ありがとうございました。

投稿日時 - 2009-10-14 09:40:52

あなたにオススメの質問