トップページgamedev
585コメント234KB

ゲームにおけるデータ構造・クラス設計・パターン2

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/05/23(金) 21:10:59ID:8M1gqhPX
具体的なゲーム名を挙げて、
どのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。

関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。

前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/

テンプレ追加事項あったらよろすく
0002名前は開発中のものです。2008/05/23(金) 22:15:47ID:KYZLgWWh
■デザインパターン
必須ではないが用語として便利なのでしばしば話題に上がる

[参考サイト]
Gameつくろー! デザインパターン習得編
http://marupeke296.com/DP_main.html

サルでもわかる 逆引きデザインパターン
http://www.nulab.co.jp/designPatterns/designPatterns1/designPatterns1-1.html

[参考書籍(Amazonリンク)]
オブジェクト指向における再利用のためのデザインパターン
http://amazon.co.jp/o/ASIN/4797311126/

デザインパターンとともに学ぶオブジェクト指向のこころ
http://amazon.co.jp/o/ASIN/4894716844/

>>1
一応デザパタ軽く。
0003名前は開発中のものです。2008/05/24(土) 01:01:32ID:hwB5uNnT
3ゲトー1乙。ずっと待ってたぜ。
0004名前は開発中のものです。2008/05/24(土) 01:10:28ID:hwB5uNnT
・オブジェクト指向といったら特に指定しない限りクラスベース(所謂最も一般的なオブジェクト指向)
・インスタンスの方がより正しい場合は極力インスタンスという用語を使い、オブジェクトの使用は避ける。

とかスレの前提としてどうだろう。
0005名前は開発中のものです。2008/05/24(土) 01:16:03ID:fCOY9f2q
インスタンスってつまりは実体のこと?
Foo foo = new Foo() とすると foo がインスタンス?
0006名前は開発中のものです。2008/05/24(土) 01:24:20ID:WrI+RE5A
デザインパターンとOpen-Closed Principle
http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/dp-ocp.html

これも
0007名前は開発中のものです。2008/05/24(土) 02:07:45ID:hwB5uNnT
>>5
揚げ足取りな事はわかってるんだが一応。
fooは変数だから、fooが参照してる参照先の何か、がインスタンスじゃね?
文脈でわかるけど、ここら辺の表記も少し気をつけた方がいいかも。
0008名前は開発中のものです。2008/05/24(土) 02:41:35ID:/DdfEDqz
「ゲームとはPrettyなインターフェースを備えたデータベースである」
っていう文言がどっかのペーパーに書いてあったけど、
スクリプト指向が進めば進むほど現実味を帯びてくるな
0009名前は開発中のものです。2008/05/24(土) 16:24:52ID:WrI+RE5A
スクリプト指向の意味がさっぱりわからない
0010名前は開発中のものです。2008/05/24(土) 17:17:01ID:LLc7AXF7
今最高峰のプログラマって、全員WEB系じゃん?
WEB系ってぶっちゃけスクリプト志向なんだよね
これでわかるかな?
0011名前は開発中のものです。2008/05/24(土) 17:53:41ID:hwB5uNnT
>>8
ゲームをやる側から見た場合のRPG、特にFFなんかは5辺りから
ある意味その言葉を既に体現してる気がする。
0012名前は開発中のものです。2008/05/24(土) 21:56:16ID:WrI+RE5A
メリットやデメリットを言えないくせに
「これはすごいんですよ、これを使えば安心です」って言ってるだけか
タスクシステム信者と同じだな

それで、教祖様は誰がなる予定なの?
0013名前は開発中のものです。2008/05/24(土) 23:02:12ID:zxthQanT
>>12
今出てるのってそんな話か?
俺には世間話に>>10が適当な横槍入れただけに見えるが
0014名前は開発中のものです。2008/05/24(土) 23:16:51ID:6QB8Oyw/
プ板から厨房誘致すればこのスレは盛り上がる。間違い無いw
0015名前は開発中のものです。2008/05/24(土) 23:28:05ID:PtHN405f
たてなきゃいいのに布教スレなんかたてるからこうなる
0016名前は開発中のものです。2008/05/25(日) 00:49:54ID:9gKbes0q
もう厨房が数匹住み着いたのか
0017名前は開発中のものです。2008/05/25(日) 10:55:20ID:9DfW5HgH
プ板?
ム板のことか?
0018名前は開発中のものです。2008/05/25(日) 11:05:10ID:93aOxetu
マ板じゃね?
0019名前は開発中のものです。2008/05/27(火) 12:06:43ID:NfKeIEM4
これも貼っておこう

やる夫で学ぶデザインパターン
ttp://mojalog.com/cgi/mt/mt-search.cgi?tag=%E3%82%84%E3%82%8B%E5%A4%AB%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&blog_id=1
0020名前は開発中のものです。2008/05/28(水) 00:17:53ID:EMOoLtkb
途中からゲーム関係なくね?
0021名前は開発中のものです。2008/05/28(水) 09:16:17ID:rm2+ecl2
俺には全部ゲームに関係した話に見えるけど?
サンプルコードもゲームだしわかりやすくていいと思うが
0022名前は開発中のものです。2008/05/28(水) 10:19:46ID:jKXaFTfv
なんか、無理矢理ゲームに例えてる感がひしひしと。
0023名前は開発中のものです。2008/05/28(水) 12:07:15ID:yrY1wCou
日本語も満足に読めないのか
0024名前は開発中のものです。2008/05/28(水) 12:58:54ID:aV/WuK9Y
お、2スレ目立ってたのね。
なんだかんだで前スレは良スレだったと思っていたので嬉しいじゃない。
0025名前は開発中のものです。2008/05/28(水) 19:17:39ID:rm2+ecl2
>>22
そりゃ「デザインパターン使えばこんなにゲーム作りやすいよ!」じゃなくて
「例としてゲーム使ってデザインパターン解説してみた」だからそんなもんだろ
無理に読めとは言わないが、全く関係ないって事は無い
0026名前は開発中のものです。2008/06/01(日) 20:32:11ID:CN3GNXI+
俺のレベルではよくわからんが
ゲーム屋からみれば変な設計なん?
0027名前は開発中のものです。2008/06/01(日) 20:35:37ID:9GWV5N72
デザインパターンを丸々入れ込むとゲームだと描画とかで
速度でないゴミになりそうな悪寒
0028名前は開発中のものです。2008/06/01(日) 22:40:05ID:IjC+ZLNy
関数呼び出しとか仮想関数分のオーバーヘッドってそんなに響くか?
まぁ使い過ぎが良くないってのには同意だけど
0029名前は開発中のものです。2008/06/02(月) 00:45:33ID:u3nq1AKu
クラスというか、同じ関数名が増えまくるオブジェクト思考言語は、GTAGS使えないので嫌いです。継承構造とかも嫌い。
こんなんじゃ、ゲーム屋って無理?
0030名前は開発中のものです。2008/06/03(火) 13:20:56ID:Up2rlfhT
>>29
マならどんな屑でもなれるし、無理じゃないよ
個人的には一緒に仕事したくないタイプだな
他社にいても移植とかサンプルとかでそういうコード渡ってきたらゲンナリする…
0031名前は開発中のものです。2008/06/03(火) 13:37:21ID:60nvGBII
>>29
利点理解した上で必要ないと言い切る奴は性質の悪い秀才
食わず嫌いで利点なしと判断してごねてるならただの馬鹿
環境によっては使わない方がいい事もあるかもしれんけど
0032名前は開発中のものです。2008/06/03(火) 14:28:32ID:FP0Va/Ol
cscopeならglobalと同じような事をC++やjavaのコードに対してもできるぜ
0033名前は開発中のものです。2008/06/03(火) 18:34:30ID:R8vkDVly
CodeWarriorとか、OOPでもばんばんタグジャンプできるから問題ないのでは?
どうしてもGTAGSがいいの?GTAGSってGNU Tags?Google Tags?
0034名前は開発中のものです。2008/06/04(水) 03:53:09ID:8a5x1JRq
>>33
>GTAGSってGNU Tags?Google Tags?
カエレw
0035名前は開発中のものです。2008/06/07(土) 05:38:48ID:PKYwPYRJ
>>27
デザインパターンはシステムに応じて最適化することを前提としてる。
お前が考えているように、パターンを丸々適用するのは危険。
ただ、デザパタを適用する事による処理コストなんて大したことない。
物理演算や描画周りの重さに比べればメソッド呼び出しがちょっと増えるくらい誤差みたいなもん。

デザインパターンは省メモリプログラミング手法でもなければ、高速化手法でもない。
どのデータに対してどの処理を行うかを、継承と抽象化を使って示しているにすぎない。

皆がパターンやオブジェクト指向をありがたがるのはソースコードが肥大化しても
グダグダになりにくいという利点があるからであって、そこに処理速度の話を持ち込むのは
少々お門違いな気もする。
0036名前は開発中のものです。2008/06/08(日) 20:08:17ID:1W8n4o1x
シューティング作っているんだけど
参考になるサイトでもある?
0037名前は開発中のものです。2008/06/08(日) 20:17:15ID:WckjqjCh
積み木ファイターのひととか
0038名前は開発中のものです。2008/06/10(火) 10:07:55ID:nTtkz+dw
ゲーム作るときってどうやってプログラム組んでいく?

全体構造を決めてから、トップダウンアプローチで作る
その場 その場で決めていき 作っていく スパイラルモデル
0039名前は開発中のものです。2008/06/10(火) 10:18:30ID:XooPHqWt
>>38
その場その場で決まることを組み合わせて全体構造を決めていく。
都合が悪けりゃさっさと変える。

これじゃ毒にも薬にもならんかも。・・・トップダウンとかスパイラルとか、
アプローチの方向を固定化するのは良くない、って感じ?
0040名前は開発中のものです。2008/06/10(火) 11:31:11ID:K9Q1TpUp
>>38
まず、誰にでも読める企画書とプレイマニュアルを作成する。
俺自身がどんなゲームを作る気なのかわかっていないことが多いから。
0041名前は開発中のものです。2008/06/10(火) 12:26:21ID:hsBh970A
趣味で1人で作るのか、同人誌即売会狙いで数人で作るのか、会社の業務として作るのかで変わるとは思うけどな。
まあ、最後はありえねーとしてもw
0042名前は開発中のものです。2008/06/10(火) 19:02:52ID:ZqBN8Kq4
>>38
どうしても単体テスト完了した部品を繋ぎ合わせる格好でやるので
最初は全体構造は無視

エンジン本体が部品の扱うデータ構造とズれる事はしょっちゅうなんで
ブリッジ用コードやデータの再パーサだらけになるorz
0043名前は開発中のものです。2008/06/12(木) 08:01:35ID:IMyaUQnN
>>42
でも一番趣味でやる構築なら手ごろな手法っぽい。
ブリッジとアダプタさえあればドウトデモナルサー的な感じで。
0044名前は開発中のものです。2008/06/14(土) 10:10:24ID:ITcMwq//
まずはトップダウンでモデル作って、作りながら問題があれば
モデルにフィードバック入れてくってやり方以外で
マトモなプログラムを作る方法はないだろ。
0045名前は開発中のものです。2008/06/14(土) 14:13:33ID:GhaLcPKx
それができないから、他に方法が無いかと模索してるんでしょうね。お察しください。
0046名前は開発中のものです。2008/06/14(土) 15:55:22ID:vUcsb6CI
あのgoogleですらボトムアップだという
0047名前は開発中のものです。2008/06/14(土) 21:53:33ID:TLBVclDV
それはプロジェクト的な意味でだろ。
0048名前は開発中のものです。2008/06/23(月) 00:38:10ID:fMSgUVEh
デバイスへのポインタってグローバルにしたほうが明らかに管理しやすいよな
0049名前は開発中のものです。2008/06/23(月) 01:30:28ID:eCdVbunT
>>48 は?なんで?
0050名前は開発中のものです。2008/06/23(月) 01:34:12ID:pTJzzIh1
俺はどっかにまとめるなあ
グローバルとか、デバイス差の吸収とか必要になったとき困らね
0051名前は開発中のものです。2008/06/23(月) 02:05:44ID:NUHlpJuv
Direct3Dのデバイスの話とまず仮定。
そして、
・デバイスへアクセスする処理(関数)まで引数渡しでデバイスポインタを渡す
・どの処理(関数)からでもグローバルにアクセス出来るように保持する
との2択から、管理しやすさについて語っているのだと推測。

で、俺の意見は>>48と一緒。
理由は、引数で渡していくのは手間が増えるだけだと思うから。

引数で渡すのは、複数のデバイスを使う場合には意味を持つのかなと思うんだけど、
ゲームにおいて複数のデバイスを使う時って無いんじゃないだろうか。
0052名前は開発中のものです。2008/06/23(月) 02:31:28ID:/DBWn/TJ
ヘッダーが重たくなるから一部のソースでデバイス関連のインクルードして、
そのソースだけでインスタンスの管理やアクセスを許して、
他のソースではインスタンスのポインター保持だけできるようにしてる。
0053名前は開発中のものです。2008/06/23(月) 08:22:39ID:mKIom38M
オレはシングルトンクラスに持たせてそこからgetter呼ぶかなあ
0054名前は開発中のものです。2008/06/23(月) 14:04:29ID:/Ozl3kU4
レイヤスーパータイプじゃないの
シングルトンはインスタンス数の制限が目的だし、組み合わせて使うならいいけど
0055名前は開発中のものです。2008/06/23(月) 22:16:08ID:T9NriNFy
デバイスを使うような処理は関数で囲っちゃって、
普段はデバイスに直接触りすらしないようにしちゃうのは異端かな?
0056名前は開発中のものです。2008/06/23(月) 22:34:15ID:X6Q0hHes
>>55
俺もー
0057562008/06/23(月) 22:37:13ID:X6Q0hHes
↑でも、ビューアとかデバッグ系のプログラムは別だけどね。
0058名前は開発中のものです。2008/07/02(水) 02:46:33ID:Z7PtKJGp
お前らシーンの遷移ってどういう風に管理してる?
俺は最初、各シーンクラス内で次シーンオブジェクトを直接生成してたんだが、遷移の修正がし難くなるから止めた。
そこでより上位で、静的なシーン遷移管理クラスが現在シーンからイベントを受け取って、
現在の色々な状態をチェックして適切なシーン遷移を行うのを考えたんだが、
これでも、一定のまとまりのあるシーン遷移が積層した場合には泥臭いコードが増えると思ったんで止めた。
んで今やってみてるのは、先のシーン遷移管理クラスをオブジェクト化して、それらをスタック状に積み上げておいて、
現在シーンからのイベントを、処理できる奴まで上から順にたらい回しにしていく方法。
遷移管理オブジェクトのポップ忘れに注意が必要だけど、今のところそう悪くない構造だと思ってる。
他にはどういうやり方があるだろう。
0059名前は開発中のものです。2008/07/02(水) 03:01:12ID:US3ampRT
シーンクラスじゃなくて管理クラスの方を積むの?
俺の鳥頭じゃちょっとイメージしにくい・・・
0060名前は開発中のものです。2008/07/02(水) 08:11:54ID:1rjp9Xph
シーンなぞ市販のゲームだって両手の指で足りるくらいしかないのに
なんでそんなものの遷移だけで無駄にコードをいじりまわすのか
現在アクティブな遷移管理オブジェクトを隠蔽してなにか楽しいことがあるの?
0061名前は開発中のものです。2008/07/02(水) 10:15:59ID:25mPqNml
シーンねぇ
なんか適当な名前のグローバルな列挙定数でswitch文で制御しているけど駄目なんかなぁ。
0062名前は開発中のものです。2008/07/02(水) 19:16:17ID:noQk3O5d
それで問題感じなきゃ無問題
設計次第だしね
抽象化次第では面白い構造になりそうかも
抽象化不要なゲームなら別にswitchでよくね
0063名前は開発中のものです。2008/07/02(水) 22:59:17ID:zDJJl2HF
シーンの切替で驚いた事といえば、
RPGとかで、フィールドからダンジョンや町などに入る/出るときにシーンの切替をするって言うのを聞いた時。
何か自分とはシーンというものの大きさが著しく違うのか、それとも自分が思っているRPGとは違うものなのか。
■ このスレッドは過去ログ倉庫に格納されています