ゲームにおけるデータ構造・クラス設計・パターンat GAMEDEV
ゲームにおけるデータ構造・クラス設計・パターン - 暇つぶし2ch578:名前は開発中のものです。
07/09/17 01:50:53 VnVYOx3U
色気出してプリプロセッサ・テンプレートメタプログラミングしてると
doxygenが酔ってくれるから困る

579:名前は開発中のものです。
07/09/17 10:46:54 4TcSZ3vD
doxygenはマニュアル作ってくれる事もいいんだけど、コメントの規格を統一できるのもいいよな

でも、心がけてくれないチーム員もいるんだよなあ

580:名前は開発中のものです。
07/09/17 11:33:01 wCNRu3Bd
■□■□■□■□■□■□■□■□■□■□■□■□■□■ □■□■
        ――Click Click Click――
それは、一番クリックした国が優勝するバカバカしくも熱いゲーム!
2ch全板から力を結集して日本を1位にしよう! 日本は過去に8勝(世界最多)しています。
めざすは、台湾の6連勝記録を打ち破ること!
現在日本は3連勝中だけど、猛加速のハンガリーに昨夜逆転されてしまいました。
日本のツールはとても優秀ですが、参加人数が足りません!!
逆転するには、最低でもあと100台のPCが必要です。
専用ツールを落として、ブラウザを起動しておいてくれるだけでOKです!
放置できるので、寝ながら日本の戦力になることができます!
どうか力を貸してください!

【日本2位】一番クリックした国が優勝【版画ksk】
スレリンク(news4vip板)l50

※オリジナルのゲーム制作チームがあります。ぜひ力を貸してください。

581:名前は開発中のものです。
07/09/17 11:46:33 gzVOF+3o
doxygen で生成したドキュメントは使ってないが、doxygen 用にコメントは
書いてる。(javadoc 形式というべきか)

> コメントの規格を統一できるのもいいよな
目的はこっち。

582:名前は開発中のものです。
07/09/17 12:30:12 GfvjK68d
実際のチーム開発の現場って、
コメントだけでなく、ファイル名とかクラス名とか変数名とかのコンベンションも
やっぱ決められてるもんなの?

583:名前は開発中のものです。
07/09/17 12:33:20 gzVOF+3o
>>582
当然。

ただ汎用ライブラリを持ってくることもあるから、そっちとこっちで
規約が違って一部混在することはある。たとえば STL と DirectX
だと名づけ方大分違うしな。

584:名前は開発中のものです。
07/09/17 15:33:27 GfeYD8ac
>>575
Delphi使いなんで、Togetherで UMLはコードから自動生成だぜ~(嘘、使いません

ドキュメント生成ツールは、日本語対応したものがなくて、使ってない orz



585:名前は開発中のものです。
07/09/17 19:51:10 W3g8XPDv
doxgenは日本語出せたよ、Delphiに対応してない気が下が

586:名前は開発中のものです。
07/09/17 23:45:15 /t9Slj66
>UMLはコードから自動生成だぜ
普通設計してからコード書かないか?
UMLの仕様上は確かにcode2UMLもUML2codeも相互運用可能だけど・・・。

587:名前は開発中のものです。
07/09/17 23:57:57 zeWn8DxN
>>586
ネタにマジ(ry

> UMLの仕様上は確かにcode2UMLもUML2codeも相互運用可能だけど・・・。
C++ は code generation に向かない言語だなぁとおもうよ。

集約・コンポジション・関連の区別とかつけにくいし、boost::scoped_ptr で pimpl イディオム
使ってる場合とか、マジメに piml クラスもクラス図に入れると煩雑になりすぎ。

私は設計段階で主要クラスだけ図に書き出して、あとはコードでって感じ。
クラス図は必要があれば更新するけど、あくまでコードが第一の文書に
しちゃってる。

588:名前は開発中のものです。
07/09/18 00:16:16 0DwxQSyZ
UMLはドキュメントとしてはいいが、コードにそのまま適用されるものではない
というのは比較的お堅い業務アプリでの常識なんだが
柔軟性が求められるゲーム開発ならなおのことじゃね?

組込み系が今突撃中

589:名前は開発中のものです。
07/09/18 00:22:12 3aYPJasO
そこでinterface definition languageですよ

590:名前は開発中のものです。
07/09/18 01:16:19 5yeO/Swt
IDLでも結局は各言語に落とさなきゃ使えないからやる事はUMLとかわらなくない?


591:名前は開発中のものです。
07/09/18 08:32:52 FiLXhuol
UMLってやっぱEAでやってるの?
eclipseでNECのプラグインのを最近使ったんだが

592:名前は開発中のものです。
07/09/18 19:37:18 QkVIQXVh
個人的には MagicDraw とホワイトボード。

593:名前は開発中のものです。
07/09/19 06:01:52 8Q9ZtqfD
まず、マインドマップで手書きして頭の中整理してからUML使うな。

594:名前は開発中のものです。
07/09/19 07:15:57 kYNbLBEe
紙と鉛筆最強

595:名前は開発中のものです。
07/09/19 08:22:34 +HDOOkBH
同意。小型ホワイトボードもいい。

596:名前は開発中のものです。
07/09/19 21:49:02 umm3ZbPO
Eclipseのプラグインなんて使うのは、UMLドキュメントも成果物として要求されるような
ソフトウェア製作現場くらいじゃないか

597:名前は開発中のものです。
07/09/19 22:07:56 sx0yn1sA
そうなんだ・・・eclipseのプラグインでしか良いのないなーって思ってた

598:名前は開発中のものです。
07/09/19 22:43:10 amMsIx49
それよりeclipseのプラグイン=UMLツールって図なのはどうなのよ?
















スタンドアローンなUMLツールもちゃんとあるんだからね!?

599:名前は開発中のものです。
07/09/19 22:49:24 jK01tyWi
>>598
> スタンドアローンなUMLツールもちゃんとあるんだからね!?
俺が使ったことあるのは、こんな感じ。結局 MagicDraw の Standard Edition 買って
使ってる。

Visio
・汎用お絵かきツールなので UML 専用ツールとしてみると、かなりイマイチ…

Together 試用版
・ソースコードに特定の形式でコメント埋め込む必要あり。ソースコードと UML の
 同期は完璧だが、C++ だとマクロやらテンプレートやらあって逆に足枷に。

Enterprise Architect
・細かいことは忘れたが、値段の割りによくできてた気がする。

Jude竹
・使いづらかった記憶が。Java 前提で C++ だとイマイチ。

MagicDraw
・それなりに自由に図がかけつつ、UML 固有のサポートも十分している(基底クラスの
 メソッドをコピーしてくるとか)。サポートしている図の種類も豊富で、開発も順調に
 継続中。Pure Java アプリなのでメモリは多めに。

 ただ C++ だとソースコードと同期する reverse engeneering, forward engeneering は
 制約ありすぎで使い物にならない。

600:名前は開発中のものです。
07/09/21 00:31:32 KPDpA4Lk
C++ …

601:名前は開発中のものです。
07/09/21 16:35:38 GgMzSNNV
なんかC++のマクロが元凶なだけじゃ・・・。
javaにマクロないし。

602:名前は開発中のものです。
07/09/21 22:17:12 RhYk6YdF
>>601
スマートポインタ・pimplイディオムあたりも、そのまま図にすると冗長で
ワケわかめ。

603:名前は開発中のものです。
07/09/23 23:05:37 7hC9eV3o
javaにスマートポインタなんてないし世代別GCという逸材が組み込まれてる。
とか言ってみて良い?

実際javaでGCが必要になるケースって言語実装する場合だけど、javaのGCに投げれば良いだけだし。

604:名前は開発中のものです。
07/09/23 23:32:34 /EvVKbRp
え、いや、だから何?としか・・・

605:名前は開発中のものです。
07/09/24 00:13:37 5E4o0Iyz
>>603
文面見るだけだと、集約とコンポジションの区別がつかんけどな。関連との区別も
つかないし。

606:名前は開発中のものです。
07/09/24 00:36:17 N33NsFp0
>>603
CでもC++でもライブラリでGC使えるようになるよ
とか言ってみて良い?

デストラクタのタイミングがJavaだと曖昧だから、
確実に呼ぶためには明示的に呼び出す必要あるよね
とか言ってみて良い?

607:名前は開発中のものです。
07/09/24 00:38:43 wP3VhiV8
Dispose論争がやりたいなら他でやってくれ

608:名前は開発中のものです。
07/09/25 01:43:17 cUqDGz0b
共同開発で、Bohemなんか使ったら(ry

609:名前は開発中のものです。
07/09/25 01:59:20 Ubo+pWpI
>>608
アーーーー!!


610:名前は開発中のものです。
07/09/25 02:50:51 j6V698Ny
Bohemと言えば、吉里吉里3の開発で使っていたような。
と思って調べてみたら、やはりけっこう面倒になことなっているようですね。
URLリンク(kikyou.info)

C++でGCをするのは、やはりリスクは大きいんでしょうかね。
挙動をきちんと把握していないと、余計なバグを出しまくると。

611:名前は開発中のものです。
07/09/25 07:15:30 p/ZTpO6S
まさにそれで右往左往してるじゃん。吉里吉里3は。
というか誰のコードが入るか分からんOSSにはBohemGCは向いてないと思う。

612:名前は開発中のものです。
07/09/25 14:42:50 IK+Mi4/+
> とくにファイナライザ(デストラクタ)が呼ばれるタイミングや、
> そもそも呼ばれるか呼ばれないかすら信用できなくなるというのは痛いです。

これってBohemGCというか、
JavaでもC#でも似たような問題抱えてるような気が。
C#はusingでだいぶ良くなる(というか必須)けどね。

613:名前は開発中のものです。
07/09/25 15:49:03 j6V698Ny
C#でusingを使えるような状況なら、C++でも
std::auto_ptrやboost::scoped_ptrが使えるのでは。
まあこの当たりのスコープによる廃棄を使えるのは、データ構造でなくその
呼び出し側のほうになるとは思いますが。

データ構造の内側たるメンバ変数では、結局いポインタwをを使おうとすると、
やはりGCかスマートポインタが(r

614:名前は開発中のものです。
07/09/25 19:45:25 w6OvpTgu
ヒープの解放と後片付けは違うぞ

615:名前は開発中のものです。
07/09/25 23:37:49 k19pdkx7
>>611
全然右往左往はしてないので、BohemGCは向いていると思うよ

616:名前は開発中のものです。
07/09/26 02:49:14 9IVyIRI7
>>614
java6からはそこらへんもVMの仕事だな。

>>615
一時期、他のコードとの相性で苦戦してただろ。
というか吉里吉里は実質一人開発なのでバザールモデル開発時の問題は無縁かも知れん、
がソースを公開してるので誰がどう使うか分からないのでBohemGCは向いてないだろ。

617:名前は開発中のものです。
07/09/26 04:16:25 PN2WWo+U
>java6からはそこらへんもVMの仕事だな。


618:名前は開発中のものです。
07/09/26 07:07:41 i8F3qiyk
>>616
よく知らないんだけど、BohemGC特有の問題ってなんなの?
>>812はBohemGCだけの問題では無いよ。

619:名前は開発中のものです。
07/09/26 08:13:44 3isC6Gy4
>>616
w3m も BohemGC 使ってなかったっけ?

俺は C++ だとスマートポインタで十分なケースが多いので、BohemGC は
まず使わないけど。

620:名前は開発中のものです。
07/09/27 02:23:21 +pE/2Wnl
>>616
ほら、言い直した。
「一時期問題があった」だろ?
それなのに>>610-611で2006年から今もずっと右往左往してるかのような印象操作をして、
BohemGCがOSSに向いてないとか、そんな詭弁はやめろ。
お前が古い人間で、よく理解出来ていないガベージコレクションが嫌いなだけなんだろ?

>ソースを公開してるので誰がどう使うか分からないのでBohemGCは向いてない
これとかまったく意味不明。
boostのshared_ptrでも、まったく理解しないで使うと罠がある。
そういう仕組みをまったく使わないで、手作業で開放しても罠がある。
お前の論では、ナニをやろうが向いていないんだよ。

>>619
スクリプト言語の作成は、スマートポインタだけだとしんどいと思う。
var a = [0];
a[0] = a;
これだけでメモリリーク起きるなんて、危なくて使えん。

621:名前は開発中のものです。
07/09/27 02:44:05 VvpaMtLQ
GCは魅力的だと思うが、まだ”枯れてないから”じぶんは好きくない
技術は何かを実現する手段であって目的ではない

622:名前は開発中のものです。
07/09/27 07:51:02 N1wjX3wO
枯れぬなら 枯らしてしまえ ほととぎす

623:名前は開発中のものです。
07/09/27 08:18:58 w2Fnc2yT
>>620
> スクリプト言語の作成は、スマートポインタだけだとしんどいと思う。
スクリプト言語の仕様にもよるな。

PCのギャルゲーだとスクリプト言語自体をリッチな仕様にして、動的な
メモリ確保なども可能にする(文字列連結とか)場合もあるみたいだけど、
俺はスクリプトでは完全にコンパイル時にメモリ割り当てが確定しちゃう
ようにして、メモリやリソース管理は C/C++ 側のコードでプログラマが
責任を持って行うようにしてる。

スクリプタとプログラマの役割分担どうするかだが、スクリプタ大量投入
するタイプのプロジェクトだと、スクリプトの自由度を下げた方がバグの
発生頻度が小さくなって、結果的に ウマー なことが多いと思う。

624:名前は開発中のものです。
07/09/27 10:54:43 5M+6zylX
なんで>>620はエスパーレッテル張りまでして必死なの?
吉里吉里信者?

625:名前は開発中のものです。
07/09/27 11:00:37 qVZI5NrD
確かに必死さが伝わってくるな

626:名前は開発中のものです。
07/09/27 11:33:55 ET62U43b
nanndeこんんあに必至なの?

627:名前は開発中のものです。
07/09/27 12:37:22 vs9qugjh
池沼だから

628:名前は開発中のものです。
07/09/27 13:19:16 HGokK3wm
荒れていても技術的な話題が堪えることのない名スレ
でも最近少々荒れ気味だから皆落ち着け

629:名前は開発中のものです。
07/09/27 14:40:58 1l0/TfAT
落ち着いてないのは>>620くらいじゃ?
元々隔離板の過疎スレだから少数が騒ぐと目立つだけ。
またーりログ読んでるか、生温かい目で見守ってるのが大半じゃない?

630:名前は開発中のものです。
07/09/27 23:24:46 foTLrBw8
言うに事欠いて「必死だな」で切り抜けようと試みる
古典的バカが未だに生き残ってるとは驚きだな

631:名前は開発中のものです。
07/09/27 23:31:57 n9Qt+CRZ
煽っても必死さが正当化されるわけじゃないよ

632:名前は開発中のものです。
07/09/27 23:38:28 Kt0ma0Lg
BohemGCサイコー

633:名前は開発中のものです。
07/09/27 23:47:44 CbY2cE68
「必死さが正当化される」ってのはよく分からないけど・・・
とりあえず、「必死だな」とか言う前に>>620を論破してみれば?
例えば、
1,BohemGCだけにある、もしくはJavaやC#のGCでは解決された重要な問題を列挙する
  (数値とアドレス値が識別できないという問題はあるけど、確率的にそれが不都合になることはほとんどない)
2,吉里吉里にはBohemGCが向いていないことを示す他のソースを提示する
とかね。

個人的に1はとても興味があるので、問題があるなら教えて欲しかったりする。

634:名前は開発中のものです。
07/09/27 23:48:30 w2Fnc2yT
>>620
本題からそれるけど、
> スクリプト言語の作成は、スマートポインタだけだとしんどいと思う。
> var a = [0];
> a[0] = a;
> これだけでメモリリーク起きるなんて、危なくて使えん。
スクリプト言語におけるインスタンスの寿命管理と、C++ インスタンスの寿命管理は
別の話だよね。

俺は VM のスタックは C++ のスタックを使わず、C++ で std::vector<> 使って確保した
記憶域を使ってる。でないとスクリプト一時中断する (co-routine 実装) のが難しい
からさ。

当然スタック上にあるスクリプト言語のインスタンスは全部 VM でトラッキングできる
ので、ガベコレできる。C++ 側のメモリ管理が GC 使ってるかどうかとは無関係に。

635:名前は開発中のものです。
07/09/28 00:02:16 qVZI5NrD
>>634
ようするに実装がスタックレスってことだな。
つかスタックレスでないVMにコルーチンを実装するのは不可能じゃないか?

636:名前は開発中のものです。
07/09/28 00:23:32 l1EYGW9S
>>635
多少制約がつくけど、Cスタックを保存・切り替えできればスタックフル VM でも
コルーチンは実装できます。

ただ、どうやってもポータブルなコードにはならないし、C++ 例外の実装方法に
よっては問題出るから、お勧めしないけど。

637:名前は開発中のものです。
07/09/28 01:10:11 iJmhMBkl
>>636
スタック切り替えてまでやるかw
猛烈に処理系依存なコードになりそうだな

638:名前は開発中のものです。
07/11/17 17:10:37 iMK/PWng
戦闘シーンの進行管理をするクラスって、どういう名前にしたらいいんだろう?
BattleManagerかな…でもManagerは使うなって話もあるし。

639:名前は開発中のものです。
07/11/17 17:27:39 tjJHhoDY
>>638
Manager 使うなって話は、つまり「管理」というあいまいな言葉を使うなって話。
「戦闘シーンの進行管理をするクラス」の役割を見直さずに名前付けだけ考えてても
無意味。

640:名前は開発中のものです。
07/11/17 17:45:31 iMK/PWng
>>639
レスありがとう

そう、今プログラム素人の子と話してたんだけど、
漠然と「場」みたいなもので考えるから名づけに迷うんであって、
相撲の行司みたいなのがいると仮定して、
そいつに戦闘の進行管理をさせればいいんじゃない?
という意見をもらった。

そこでまた、「戦闘の進行」っていう、時間を伴ったものを、
その「行司」の中に持たせちゃっていいのかなと迷うんだけど、
その辺りは割り切っちゃったほうがいいの?

OOPド素人丸出しでごめん

641:名前は開発中のものです。
07/11/17 17:53:06 3LkIon8X
戦闘シーン関連の処理に関して、俺が抱いてるイメージとしての「管理」から考えると
そのManagerが関連する他のクラスに処理を分配して、それを仲介するようなクラスだとMediatorあたりになるんじゃなかろうか
俺が作ってた「Manager」は上記のものがさらにFacadeの役割も果たすってのが多かった
デザパタから借りてるだけで正解とはとても言えんけど、「Manager」よりはマシかな…と

642:名前は開発中のものです。
07/11/17 18:09:05 tjJHhoDY
>>640
> そいつに戦闘の進行管理をさせればいいんじゃない?

それじゃ何も解決しないでしょ。「管理」という役割が同じなままなんだから。

「管理って、実際のところ何するの?」と問い、「あれして、これする」っていう
もっと具体的な単位に分解できれば、「あれするクラス」「これするクラス」に分割する
ことが考えられる。それらを組み合わせたものを「戦闘シーン」というクラスにすることも
考えられる。

どうしても「管理」としか呼べないんなら、それを Manager と名付けること自体には
何の問題も無い。

「戦闘の進行」と「行司」という切り分けができるなら、前者を Advance() なんていう
関数、後者を Rule とかいうクラスにすることが考えられる。 Advance() は Rule に
従って処理をする、って感じね。具体的な状況がわからないんで、全然ダメかも
しれないけど。

643:名前は開発中のものです。
07/11/17 18:34:11 2u92yTvZ
SceneManagerとか定番だな

644:名前は開発中のものです。
07/11/17 18:35:34 JxWacONa
javaの立場が・・・

645:名前は開発中のものです。
07/11/17 20:30:54 /rbqSJ11
class Referee
{
public:
  Referee(const class Rule& current_rule);

  const bool judge(const class Battle& current_battle);
  void bribe(const int price);

  inline void win(void) { URLリンク(youtube.com) }
};


646:名前は開発中のものです。
07/11/17 21:45:56 K5pYaEDh
>>644


647:名前は開発中のものです。
07/11/18 06:00:26 D4743XwF
使うなとは誰もいってないよ

648:名前は開発中のものです。
07/11/18 07:27:13 mDvA2is2
>>642
俺の場合、Manager って名前は使っちゃうな。ただし Manager クラスで
何でもかんでも処理せずに、分割できるところは別のクラスに切り出して
Manager クラスに集約する。

Facade やね。

649:名前は開発中のものです。
07/11/20 01:41:42 Xv2CgjLa
さっきからしょぼいBGMのループがひどいな
2ループもすりゃ十分だろ

650:名前は開発中のものです。
07/11/20 02:00:34 B+/JlwAo
>>649
何に対して言ってるのか

651:名前は開発中のものです。
07/11/20 06:51:02 x6OdnLNb
B・・・・・GM・・?

652:名前は開発中のものです。
07/11/24 17:27:35 5kPj3Eca
シューティング作ってて、敵のクラスと自機のクラスを分けちゃったけど、わけない方がスマートだったかなあ


653:名前は開発中のものです。
07/11/24 17:36:40 BsLqDTe0
>>652
一部同じインターフェースを持つことはあるだろうけど、普通に考えてまったく同じクラスに
なるとは思えない。

654:名前は開発中のものです。
07/11/24 19:10:43 XdMXhxj/
自分は敵1と敵2とかでもわけてる

655:名前は開発中のものです。
07/11/24 21:09:45 vFIasKer
>>654
そりゃ、作るゲームにもよるな。キャラクター数少なくて差異が大きい場合には
クラス分けるが、RPG のように数が多いと基本1クラスでデータ駆動にする。

656:名前は開発中のものです。
07/11/24 22:25:37 Y480fdwm
>>652
何シューティングか知らないが、
よくある2Dのシューティングなら自機と敵機で違う処理したほうが、
当たり判定の最適化しやすそうだな。
(同じ基底クラスから派生させるとかいう話はおいといて、


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch