- ベストアンサー
ゲームプログラミングでオブジェクトの分類方法とクラス構造について
- ゲームプログラミングにおけるオブジェクトの分類方法とクラス構造について知りたいです。
- 例えば、マリオのような横スクロールアクションゲームでは、どのようにオブジェクトを分類すれば良いのでしょうか?
- また、キャラクターのX,Y座標はPrivateにするべきかなども教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ええとですね、質問をそのまま答えるのは、おそらくここの質問版の領域を超えています。 文字通りとらえたなら、アクションゲームのクラス設計をしてくれということになりますから、真面目に答えたらお金が欲しいレベルの質問です。 なので、質問を読んでいて私が思ったことなど書かせていただきます。 ・MVC(Model View Controller) ゲームに限らずWebなどでも最近はよく取り上げられる考え方に、MVCというものがあります。プログラムをModel, View, Controllerの三つに分けるという考え方です。 Modelはそのままデータ構造。ゲームで言えば主人公や敵キャラなどのオブジェクト。位置情報や体力情報などをそれぞれが保持します。 Viewは画面表示。Modelのデータに基づいて表示を行います。ゲームでは画面更新。 Controllerはイベント処理。キー入力やマウス入力などのイベントを、Modelへ適宜渡します。 と、このような仕組みを使うことになります。 データを持ったオブジェクトのインターフェイス(外観)は、だからControllerが呼び出すイベントや他のオブジェクトとの関係で作られます。 キャラクターが移動する、という行動は、 ・キーボード入力がある ・Controllerがキー入力を受け付ける ・左右ボタンだったので、(中略)、主人公に「移動しろ」と言う ・主人公は与えられたぶん移動する、ただしマップには注意する ということを行うと考えられます。 重力云々をどこに入れるかは設計次第で変わりますが、フレーム更新時に重力加速度と移動をかけるという部分は確定ですから、問題はそれを誰に任せるかということになります。 ・移動メソッドに含ませる。Controllerからの入力は記憶しておき、更新時まで貯めておく。移動メソッドは毎フレーム呼ぶ ・更新メソッドの中に含めておく。更新メソッドはもちろん毎フレーム呼ばれる。移動メソッドはControllerから入力があればそのときに反映させる などの方法が考えられます。他にもいろいろなやりかたがあるでしょう。 作るのはあなたです、設計含めて楽しい作業ですから、試行錯誤しながら作ってみてください。 オブジェクト指向自体は、いかに他人に任せるかを考えるとわりとうまくいきます。がんばってください。
その他の回答 (1)
- beefisdead
- ベストアンサー率63% (92/145)
デザインパターンを学ぶのもよいと思いますが、デザパタとMVCとは多少違う領域ではあります。 MVCはプログラム全体に関わる設計方法であるのに対して、デザインパターンはもう少しミクロなクラス関係のための設計パターンです。継承関係とかprivateというのは、さらにミクロな(というか、話としてもやや異なる)領域です。 デザパタは、いや、勉強するのも良いんですが、たぶんあんまり理解が沸かないと思うんですよ。実際に作ってる途中に行った工夫が実はデザインパターンだったと後に知る、という身につけ方が多いようです。今の時点ではそんなに(本を買うなど)本腰入れて勉強しなくてもいいと思います、それぞれのパターンの名前と概要をなんとなく知ってる程度で。知っていれば書くときに使えるかも知れませんが、別になくても作れますし、無理に使うものでもありません。 クラス構造というか、ゲームのプログラムの基本的な構成を知りたいと言うことであれば、この本などはおすすめです: http://www.amazon.co.jp/dp/4797344512 Amazon書評はあまり芳しくありませんが、ゲームの基本構成をなんとなく知る目的にはなかなか適しています。 この本はJavaですが、C++であってもクラス構造や関係はほとんど変わりません。ちょっと記述方法が違うだけです。 C++でゲームを作るための本としては、こちらが近頃絶賛されています。 http://www.amazon.co.jp/dp/4798021180 ただし分厚いうえ自習用の教科書という性格の書籍なので、ある程度C++に慣れていないと知識を引き出すのに苦労するでしょう。
お礼
2どもご丁寧にありあがとうございます。 やっぱり本を読むのもいいけど、プログラムは実績ですよね^^ バカバカしい間違いをたくさんして、経験を積んでいかないと行けませんね。 そろそろ質問を閉め切ろうと思います。 貴重なお時間ありがとうございました。
お礼
迅速、かつ丁寧な回答ありがとうございます。 そうですよね^^; 質問した事すべて回答してたらすごく時間かかっちゃいますもんね。 まだ高校卒業したばかりで、世間知らずの身なのでちょっと無茶な質問してしまいました。 回答の話に戻りますあが、 M.V.C.ですか~ そういう分け方もありなんですね。 キャラが動くアルゴリズムや、プログラミング言語の説明ページはGoogleで検索すれば山ほどあるのに対し、 クラス構造を説明したページや本はなかなか見つからなくて困っていたので丁寧なご回答ほんとうにありがとうございました。
補足
*補足 "デザインパターン"というキーワードで検索したらいろいろと参考になりそうな情報がでてきました。 ゲームを作る前にこれについてもう少し勉強しようと思います。^^