ゲームにおけるデータ構造・クラス設計・パターン
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2006/08/10(木) 20:27:06ID:BnvyxuCBどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
0002名前は開発中のものです。
2006/08/10(木) 20:45:47ID:X/dQa2Wp0003名前は開発中のものです。
2006/08/10(木) 20:46:24ID:8+CwRGdy技術を語れるかが見物だ。
0004名前は開発中のものです。
2006/08/10(木) 22:23:22ID:BnvyxuCB⊃「パックマン」
敵に関しては、敵の抽象クラスを継承したサブクラスで
移動アルゴリズムをオーバーライドするよりも、
アルゴリズムを別のクラスで用意して
それに対する参照を敵のクラスに持たせる方がいいのかな?
0005名前は開発中のものです。
2006/08/10(木) 23:26:41ID:BnvyxuCB+-----------------------+
| CEnemy |
+-----------------------+
| move() |
| (strategy->execute()) |
+-----------<>----------+
| strategy
|
|
+-----V-----+
| Strategy |
+-----------+
| execute() |
+-----A-----+
|
+------+---------+----------+
| |
+------+-------+ +------+------+
|AkabeeStrategy| |PinkyStrategy|
+--------------+ +-------------+
| execute() | | execute() |
+--------------+ +-------------+
クラス図で書くとこうなるのか?まあ絶対ズレているだろうがな…。
俺自身は超初心者だから間違いがあったら指摘お願い。
0006名前は開発中のものです。
2006/08/10(木) 23:27:33ID:BnvyxuCBいくらなんでもズレすぎだ…。
0007名前は開発中のものです。
2006/08/10(木) 23:29:52ID:GhkTPLBd敵キャラの個別化をしたければテンプレートメソッドパターンぐらいで十分。
好きにすればよい。
0008名前は開発中のものです。
2006/08/10(木) 23:38:42ID:BnvyxuCB確かにその通りなんだが、
まあいきなり大規模なものを持ってきても
話しづらいかなと思って。
0009名前は開発中のものです。
2006/08/10(木) 23:39:13ID:BnvyxuCB+-----------------------+
| CEnemy |
+-----------------------+
| move() |
| (strategy->execute()) |
+-----------<>----------+
| strategy
|
|
+-----V-----+
| Strategy |
+-----------+
| execute() |
+-----A-----+
|
+------+------------+----------+
| |
+------+-------+ +------+------+
| AkabeeStrategy | | PinkyStrategy |
+--------------+ +-------------+
| execute() | | execute() |
+--------------+ +-------------+
0010名前は開発中のものです。
2006/08/11(金) 00:00:57ID:YoP5XUOsファクトリメソッドパターンかな・・・
0011名前は開発中のものです。
2006/08/11(金) 00:24:48ID:C/hX80Tzみたいなことは大体わかるのだが、
全体をまとめようとするとうまくいかないのはオレだけか?
0012名前は開発中のものです。
2006/08/11(金) 00:39:49ID:jjyZUyYuタスクシステムの内容を統一した方がいいんじゃね??
0013名前は開発中のものです。
2006/08/11(金) 01:37:19ID:tpCf6gfL0014名前は開発中のものです。
2006/08/11(金) 05:13:38ID:XHr3GWC70015名前は開発中のものです。
2006/08/11(金) 07:46:49ID:8h85L6qqCEnemyのCって何?
0016名前は開発中のものです。
2006/08/11(金) 07:51:46ID:sJYQdfLa0017名前は開発中のものです。
2006/08/11(金) 08:14:44ID:pd/2z5bI0018名前は開発中のものです。
2006/08/11(金) 08:22:18ID:sJYQdfLa0019名前は開発中のものです。
2006/08/11(金) 10:46:52ID:fe4sLs9R0020名前は開発中のものです。
2006/08/11(金) 11:46:44ID:YxjqBpJS0021名前は開発中のものです。
2006/08/11(金) 13:15:07ID:NMgVyy7Y0022名前は開発中のものです。
2006/08/11(金) 13:16:16ID:defJrMH60023名前は開発中のものです。
2006/08/11(金) 13:32:51ID:DmUndduC0024名前は開発中のものです。
2006/08/11(金) 14:04:44ID:XHr3GWC7Cの1文字ぐらい脳内削除できんのかね
0025名前は開発中のものです。
2006/08/11(金) 15:22:03ID:AWZ202Sp今出回ってる雑誌や書籍、それにオープンソースのコードに
Cつけてるものがどれほどあるか見てみろ。
MSなんか、C#では逆にCを「つけるな」と言ってるしな。
>コードスタイルはクラス設計とは関係ないだろ
わざわざ変なスタイルを使うやつは、高確率で変なクラス設計をする。
普通にコードを書く気が最初からないんだから。
0026名前は開発中のものです。
2006/08/11(金) 15:37:25ID:mPv7ZiBtコードスタイルについてはごもっともだけど、
>わざわざ変なスタイルを使うやつは、高確率で変なクラス設計をする。
って誰が言ってたのさ。統計とったの?
そうですか、あなたの経験上ですか。では、変なクラス設計の基準はどこに?
0027名前は開発中のものです。
2006/08/11(金) 15:56:24ID:XHr3GWC7お前の言っていることは間違いではないが、焦点がズレているな
俺が言いたかったことは、>>9の敵クラス名がCEnemyだろうがEnemyだろうが
クラス図には何の影響もないということだ
変なスタイルを使う奴は云々という決め付けはいらない
設計がそこに転がっているんだからその優劣を語ればよい
0028名前は開発中のものです。
2006/08/11(金) 16:01:15ID:DmUndduC何でそんなに興奮してるんだ?
コードスタイルは分かりやすさ、第一。
別にコード公開する気もないし。
0029名前は開発中のものです。
2006/08/11(金) 16:32:11ID:C/hX80TzTemplate Methodパターンだと、実行時に移動アルゴリズムを
変更したくなったときに面倒じゃないか?
パックマンがパワー餌を食べたことがMediatorを通して
通知されたとき、strategyを逃げるアルゴリズムに
変更すれば、同じ呼出しで適切な移動が可能。
まあ、オリジナルだと逃げるアルゴリズムは共通だから
それは組み込んでおいて通常移動はオーバーライドでも
問題ないけど、通常移動も動的に変更したいのならStrategyかな。
実際問題、パックマンを作るのにここまで慎重に設計する必要は
ないが、設計スレだし色々探ってみるのがよさそうだ。
0030名前は開発中のものです。
2006/08/11(金) 18:51:41ID:Vuvb9Lvy俺もその辺はよく悩むな。
最近はゲーム全体の構造について再度考え直そうと思って、
ttp://www.jeffplummer.com/Writings/Thesis/Thesis_with_Appendix.pdf
このあたりを読んで研究中。
GDC'06のTim Sweeneyの講演(Building a Flexible Game Engine)のスライド早く公開されないもんかな。
0031名前は開発中のものです。
2006/08/11(金) 20:08:38ID:Ip8C/yOXGDCのじゃないけどTim Sweeneyの別の場所での講演
スライド。参考までに。
ttp://www.cs.princeton.edu/~dpw/popl/06/Tim-POPL.ppt
時間表現からレンダリング、シミュレーションの並列実行化という
レベルの全体構造を考えるならGDC06のSim, Render, Repeat
? An Analysis of Game Loop Architecturesおすすめ。
0032名前は開発中のものです。
2006/08/11(金) 21:10:41ID:C/hX80TzSUGEEEEEEE!!!
英語苦手だけど頑張って読んでみるか。
0033名前は開発中のものです。
2006/08/11(金) 21:44:28ID:Vuvb9Lvyおぉ、トンクス。参考になりまつ。
やっぱり並列化も次世代機を考慮すると重要なトピックになりつつあるんだなぁ…
0034名前は開発中のものです。
2006/08/11(金) 21:54:05ID:Ip8C/yOXマルチコアを使い切る→並列同時実行
0035名前は開発中のものです。
2006/08/12(土) 00:11:13ID:Eayw3C5nSTLのlist使ってたんだけど、
動的メモリ確保で遅くなるから配列を使った方がいいと聞いて…。
それから単方向ではなく双方向リスト構造にする利点があれば教えてくれ。
0036名前は開発中のものです。
2006/08/12(土) 02:27:39ID:pnW+o/wl0037名前は開発中のものです。
2006/08/12(土) 02:41:00ID:Xdt1RmGF>Template Methodパターンだと、実行時に移動アルゴリズムを
>変更したくなったときに面倒じゃないか?
フラグのOF/OFFの分岐でいいべ。パックマン程度だったらその方がずっとコード
が分かりやすい。移動パターンが何種類もあると言うんだったら別だが。
0038名前は開発中のものです。
2006/08/13(日) 01:11:05ID:o/UAG1nJオブジェクト同士が相互作用しまくりで
処理内容が多岐にわたるゲームの場合、
updateしたよあとよろしくね♪じゃMadiatorの仕事が多すぎる。
結局俺の場合、例えばシューティングで当たり判定をとるんだったら
自機インスタンスへのポインタを敵のクラスのメンバに持たせたり
自機インスタンスをグローバルにしちゃったりする。
よくないことはわかりつつも。何か良い方法はないものかね。
003938
2006/08/13(日) 02:36:16ID:o/UAG1nJ今までは、Mediatorクラスが持つ関数は
呼び出し側の参照を引数として取るupdateただひとつだけで、
updateは引数から得られる情報を元に適切な処理を選択し、
適切なオブジェクトに通知するのだと思っていた。が、
Mediatorに複数の関数を持たせて
呼び出す側が選択するというのもありなんだな。
例えば当たり判定処理のためのhitCheckとか。
タスクリストを持つクラスにMediatorを兼任させるのもありか。
ごちゃごちゃするが。
>>35
listのままでおk
0040名前は開発中のものです。
2006/08/13(日) 08:56:01ID:y5vatLvS0041名前は開発中のものです。
2006/08/13(日) 11:24:21ID:vE5CRkDFまぁゲームシステムにもよるだろうなぁ。自機が一機しかなければ
自機クラスにMediatorの仕事やらせてもまず大差ないだろうし。
弾のような飛び道具出すにしても、
自機の敵キャラクタのインスタンス配列をそのまま渡せば
そこまで複雑になるとも思えない。むしろこっちの方が楽そう。
マリオみたいに敵同士の当たり判定がある場合は、
Mediatorみたいなものは必須だと思うけど。
0042名前は開発中のものです。
2006/08/15(火) 01:28:43ID:mFMpUmTh昔、GraphicsクラスやらInputクラスやらを
シングルトンにしようとしたが、初期化するための引数が多いせいで
Graphics.getInstance()なんて簡潔な呼び出しをすることが
不可能だと気づいて泣いたぜ
0043名前は開発中のものです。
2006/08/15(火) 01:53:25ID:EK48DUhBinitializeメンバ関数を別途用意して最初の方で呼び出せばいいだけの話じゃ?
0044名前は開発中のものです。
2006/08/15(火) 02:22:10ID:mFMpUmThそれやるくらいなら俺はシングルトンパターンを適用せずに
フィールドを全部staticにする
初回のgetInstance()呼び出しでコッソリ初期化、
表面上は初期化いらずな点がシングルトンの利点だと勝手に思っているから
0045名前は開発中のものです。
2006/08/15(火) 03:30:20ID:EPdRstT40046名前は開発中のものです。
2006/08/16(水) 12:54:24ID:kC6PmX5a呼び出し側のタスクがその順番で並んでいないときは発狂する。
0047名前は開発中のものです。
2006/08/19(土) 01:00:05ID:aLDfzS42プレイヤーへのポインタを保持する敵タスク(リスト)ばかりだ。
ttp://d.hatena.ne.jp/kenmo/20051215#p1にMediatorの解説があるが
接触判定のような単純な通信にしか使えんな。これは。
0048名前は開発中のものです。
2006/08/19(土) 10:25:32ID:IzB67zRr0049名前は開発中のものです。
2006/08/19(土) 10:59:20ID:Br4d5o3Iタスクシステムでググると出てくる。GameDevPukiWikiにも載っている。
http://gamdev.org/w/?%5B%5B%A5%BF%A5%B9%A5%AF%A5%B7%A5%B9%A5%C6%A5%E0%5D%5D
0050名前は開発中のものです。
2006/08/19(土) 12:03:47ID:Ozyz6ud5向こうではDDAやらエンジン単位でのアーキテクチャが主流なのかな
0051名前は開発中のものです。
2006/08/19(土) 12:16:19ID:IzB67zRr0052名前は開発中のものです。
2006/08/19(土) 13:19:26ID:Br4d5o3I0053名前は開発中のものです。
2006/08/19(土) 14:40:17ID:NMv1rX3bこうすると走査が面倒ななるから、必要なTCBだけMediatorに登録。
0054名前は開発中のものです。
2006/08/23(水) 17:59:02ID:i8zrNBaj敵管理タスクが当たり判定や弾の狙い撃ちをするために、
自機タスクから座標などの情報を取得するにはどうすればいい?
0055名前は開発中のものです。
2006/08/23(水) 20:30:16ID:M0hCP3PAモデルの実装は普通にやればいいと思うんだけれども、
たとえば >>9 のパックマンでキャラ画像情報とかって
どこに持つ?
で、アルゴリズムとどうやって結びつける?
俺はなんかもう面倒くさくなって全部一緒になってんだよねー(最悪)
■ このスレッドは過去ログ倉庫に格納されています