OOとゲームプログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/11/07 23:55ID:HnYWCQK1行うことが出来るのか語り合うスレです。
0344名前は開発中のものです。
02/01/02 22:30ID:???************* 終了 **************
0345名前は開発中のものです。
02/01/03 23:00ID:???ゲームを完全OOで組めるとか言ってる人は実際に組んでみればいいじゃんか。
さらに、それで効率上がるなら自分だけ効率上げて待遇良くなればいいじゃんか。
(やったら自滅するけど)
なんで布教活動するのかなあ。
0347名前は開発中のものです。
02/01/04 02:23ID:???苦労を察してください。
0348名前は開発中のものです。
02/01/04 02:40ID:???OOが絶対必要だっていう事は(レースゲーに限らず)多分ないよ。
でもレースゲーだってOOならもっと簡単になる可能性がある。
>>346
いいかげんウザすぎる。
本当に頼むから理解してないくせに批判するのやめて欲しい。
というか、逆にきくけどOOの何が不満さ?
「ぼくがりかいできないからです」以外の理由をちゃんと言ってよ。
0349_
02/01/04 02:53ID:SxnE1SFQ上手く比較デキンというか、理想系がわからんというか。
メンバアクセス関数を用意するのは、面倒かな?
記述量も増えるし。
設計で余計に悩まされるとも思う。
どのぐらいの納期かで使い分けるのがいいのかな。
0350名前は開発中のものです。
02/01/04 04:15ID:???OOの良さって、なかなか文章にするのは難しいです。
肌で感じてもらうのが一番いいと思うんですけど…。
もしあなたがすごく頭がいい人なら、もしかしたらOOの良さを
肌で感じてもらうには、途方も無く難しい(複雑な)問題に対面して
もらわなければいけないかも知れません。
私はあんまり頭が良くないので、OOを知ってよかった。と日々痛感していますけど。
うーんアクセッサを書くのが面倒っていう心情はわからなくはないけど、カプセル化は必要だから、これは慣れてもらうしかないです。
設計についてはOOが解っていれば逆に簡単になると思います。
ただし一番酷い状態はOOがわかっていない人がOOの設計をしたときかな?
記述量は…たしかに増えているかもしれませんけど、何度も書き直すのに比べれば確実に生産性はいいはずです。
それに本来混みあって見難くなる部分が逆にすっきりしたりする場合が多いので、単純にキーボードを叩く数では決められない生産性があると思います(まともなプログラマーなら多少鍵打数が増えるくらいはたいした負担ではないでしょう?)。
納期での使い分け…、というのはちょっと違うかな…。
もし納期の単位が一週間から一ヶ月とかいうのでもない限りは。
そんなに納期が短いスパンの仕事なら、わざわざOOしなくても
(むしろしない方が)いいでしょう。
すごく小さいプログラム(複雑度が低い)ならばOOはそれほど必要じゃありません。
私の心情的には「本当に速度にクリティカルな部分」はOOの冗長性が邪魔なので、そういう部分は非OOでもかまわないけれど、
それ以外の全てのコードはOOでやって欲しい。と思います。
0351名前は開発中のものです。
02/01/04 04:23ID:???禿同
アクセッサを書くのは確かに面倒かもしれないけど、カプセル化の恩恵は
それ以上の物がある。
0352_
02/01/04 05:03ID:SxnE1SFQそうスか。
ゲームって、そんなに複雑なものでもないと思ってるけどね。
(後、規模的にも)
>もし納期の単位が一週間から一ヶ月とかいうのでもない限りは。
因みに今やってるのは2日です。(1つの目標に割ける時間)
全体で3週間かな?で、C++で書いてる。
そもそもC++ぐらいしか、現状で実用的な環境にない。てのが
問題なのかもね。
>>351
重要なものに関してはCの頃からやってた。
(「マクロ定義関数用意してるから、それ使え」とコメント付けてるだけだが)
テンプレートもマクロ定義のようなものだよね?
コンパイラが型チェックしてくれるようになった。と。
0353名前は開発中のものです。
02/01/04 12:03ID:???漏れの場合、似たようなコードを何度も書きたくない
という理由でコードを共通化してる部分が山ほどあるケド、
そのために、継承をさかのぼって読まないと、
どんな作業をしているかが分かりづらい所があるんよ。
だから、自分に理解できても、他人には理解出来んコードが
少なくないかもしれん。
0354名前は開発中のものです。
02/01/04 12:45ID:???0355名前は開発中のものです。
02/01/04 14:01ID:???文句を言ってる厨房がいたような・・・・
0356名前は開発中のものです。
02/01/04 18:29ID:???泣ける…
モナジェクトXとかにして。
OOで効率が悪くなるとか全部組めないとか言ってる人は、どういう部分が出来ないと思ってるんだろう?
>>355は、だしかにそう思う。
ユースケースごとくらいにシーケンス図があったりすると嬉しいんだけどね。
あと、JavaDocみたいなドキュメントをちょこっと書いておくのも重要だ。
C++はDoxygenだっけ?
0357名前は開発中のものです。
02/01/04 18:31ID:???あんまり継承に頼らないようにしましょう。
Template Method とかは別として。
ライブラリ的な部分と利用者部分を分けて考えるのが良いと思います。
ライブラリの中身が実は OO じゃなくても、外っツラがちゃんとした OO っぽく
なっていれば結構ハッピーです。でも意味不明な static 変数やめてね。
(クラスのメンバって意味じゃなくて、関数の中とかのね)
それじゃ!グッドモーニング!!
0358名前は開発中のものです。
02/01/04 19:00ID:???0359初愚痴
02/01/04 19:26ID:???経験的にインターフェースと実装の分離の為の継承では
ほとんど問題起きないね。
0360357
02/01/04 19:32ID:???あぁ、言葉が足りなかった!
Java 用語で言う interface を継承するのはちっとも悪くないよ。
実装継承を繰り返すのが悪なの。
むしろインターフェイスだけの継承はバリバリ行うべし。
まさしくポリモーフィズムは OO の華。
まぁ漏れはアクセッサくらいはベースクラスに含めてもいいと思ってるけど。
(まともなロジックは入れない)
共通の基本の振る舞いが欲しければアグリゲートする方向で。
0362名前は開発中のものです。
02/01/04 22:10ID:???OOは
1)処理とオブジェクトをごちゃ混ぜにしている
2)規模が大きくなり、オブジェクト間の処理が多くなってくると
クラスが邪魔になる。(OOPL)
3)オブジェクトの無い処理に不向き
4)メモリ上のインスタンス以外をオブジェクトにしようとすると
たちまち非効率になる。
5)処理だけでオブジェクトが無い場合は無意味。
0366名前は開発中のものです。
02/01/04 23:24ID:???別にすべてクラス(のメソッド)にしなくても、OOはOOだと思うんだけど…。
(「処理」もオブジェクトであるという見方をしてもいいし)
「全て」の定義を聞きたいところ。
全てのコードをクラス内に入れること?
OOPの話だよね?
あと、>>365はネタですか?
文字と文字列は(国際化とか考え出すと)深すぎるのであまり足を突っ込みたくないけど、
それは違うでしょ。
あぁ、でも、言いたい事はだいたい分かった。曖昧なのはあなたの頭です。
0367名前は開発中のものです。
02/01/04 23:45ID:???2)異なる種類の複数のオブジェクトを処理する場合は、STLばりに「処理をする」オブジェクトを作ろう。
3)意味不明。整数オブジェクトは使いませんか?
4)VRAM上のメモリとかに直接アクセスできない場合とかの事を言っている?非効率なのは単純に設計が悪いだけでしょう。
5)曖昧でなくなるまで設計を見直しましょう。
0368名前は開発中のものです。
02/01/04 23:47ID:???そうだとしたら、こいつの下の人は本当にかわいそうだ。
つーか何だ>>363は?
意味不明。
>実際に作ってみれば?
これはそっくりそのまま返したい。
0369名前は開発中のものです。
02/01/04 23:49ID:bk/wkWMfライフゲームをOOで組んでください。
0370名前は開発中のものです。
02/01/05 00:13ID:???あなたの作るプログラムの中で
プログラマクラスが人間クラスを継承する必要性が出たらそうしましょう。
そうでないならやめましょう。
真に汎用的なクラスを作るのは無理なのだから設計者の裁量に任せるべし。
0371名前は開発中のものです。
02/01/05 03:16ID:???OOを貶すなら、少なくともOOを極めてからにしましょう。
0372名前は開発中のものです。
02/01/05 03:27ID:???こんなバカ見たことねえ。
くくくくく。
下につく人がいたら本当にかわいそうだな。
0373名前は開発中のものです。
02/01/05 05:03ID:wxnvSHJ80374名前は開発中のものです。
02/01/05 05:37ID:???そろそろまじめに OO によるゲームプログラミングを語ろうか?
0375
02/01/05 05:43ID:wxnvSHJ80376名前は開発中のものです。
02/01/05 05:46ID:???Chain of Responsibility でどうぞ。
0377
02/01/05 05:56ID:wxnvSHJ8じゃ三目並べ
0378名前は開発中のものです。
02/01/05 06:00ID:YrC6qkSr0379
02/01/05 06:03ID:wxnvSHJ80380名前は開発中のものです。
02/01/05 06:17ID:???まず三目並べのルールをキボンヌ!!
いや、マジで知らん。五目並べの3つ版?
03813目並べ
02/01/05 06:19ID:wxnvSHJ8X○
○ X
名前ちがうかもしれん・・・。
0382名前は開発中のものです。
02/01/05 06:19ID:???求人票キボンヌ!!
この世ならどこへでも伺います!!
0383名前は開発中のものです。
02/01/05 06:20ID:???マルバツゲームじゃん。
つーか、これくらい単純になると、さすがに OO じゃなくても十分でしょ?
0384名前は開発中のものです。
02/01/05 06:28ID:wxnvSHJ8うん。実際に作らなくてもいい。頭の中で組み立てるだけでもOK。
じゃ将棋。
0385名前は開発中のものです。
02/01/05 06:31ID:???abstract な chip (駒って英語でなんていうんだ?わからないのでとりあえず chip で)
とその派生クラス群で…。云々。
0386名前は開発中のものです。
02/01/05 06:41ID:wxnvSHJ8思考ルーチンは?
判定ルーチンは?
無理すれば出来るけど、決して効率的ではないでしょう。
0387名前は開発中のものです。
02/01/05 06:45ID:???プレイヤーからの入力と Com の思考ルーチンを透過的に扱えて素敵だよね?> OO 解ってる人
将棋の判定ルーチンって?
0388名前は開発中のものです。
02/01/05 06:49ID:wxnvSHJ8Strategyなぞで問題を先送りにしてどうする?
思考ルーチンこそ将棋のメイン。
判定 勝敗判定
0389名前は開発中のものです。
02/01/05 06:53ID:???Observer で一発じゃん??
問題を難しいことをする所一箇所にまとめやすくするのも OO の得意技だよん。
正直言うと将棋の思考ルーチンについて詳しく考えた事がないけど
先読みは Memento の変形がいいかな。
0390名前は開発中のものです。
02/01/05 06:55ID:???GoF 以外のパターンを調べに逝ってきます。
0391
02/01/05 06:58ID:wxnvSHJ80392名前は開発中のものです。
02/01/05 07:25ID:???いいんじゃないの?
デザパタ厨 inherits OO厨. じゃない?
つーか叩こうと思った割にはていよく返り討ちにあってる気がThru.
0393
02/01/05 07:31ID:wxnvSHJ8思考ルーチンをOOで組めないのを示したのにねえ。
0394名前は開発中のものです。
02/01/05 07:36ID:???> 思考ルーチンをOOで組めないのを示した
示して無いじゃん?
どこらへんで示したの?
>>389 への否定意見も出てないし。
つーか
>無理すれば出来るけど、決して効率的ではないでしょう。
に矛盾してるよ?
0395名前は開発中のものです。
02/01/05 09:30ID:???0396名前は開発中のものです。
02/01/05 12:37ID:???ここにいる奴らの誰とも組みたくないと思うのはおれだけか?
0397名前は開発中のものです。
02/01/05 12:47ID:???0398
02/01/05 14:51ID:wxnvSHJ80399名前は開発中のものです。
02/01/05 16:13ID:???別にルーチンを要素分解してオブジェクト化しなくてもいい。
C++ にせよ Java にせよ C の派生言語なのだから
メソッドの中はある程度手続き的になる。
その辺の匙加減はお好きなように。
複数のルーチンを管理するときに C では関数ポインタを使うが、
たとえば Strategy パターンを使えば言語の機能に依存せずに
同じことを実現できる。
0400名前は開発中のものです。
02/01/05 16:53ID:wxnvSHJ895%はOO使えないと言う結論。
0401名前は開発中のものです。
02/01/05 18:29ID:???OOPL は 手続き型言語の 95% くらいは内包しているという結論。
怖がらなくてもいいよ、 今まで手続き型言語で頑張ってきた君達なら、
必ず OOPL も使いこなせるから。
0402名前は開発中のものです。
02/01/05 19:10ID:wxnvSHJ80403名前は開発中のものです。
02/01/05 19:39ID:???雨の中ぬれている子犬(402)に手をさしのべたら、怯えた目をしたあと噛まれてしまった401。
ここで怒ったりせずに、そのままもう片方の手でなでてやると懐くぞ>>401
0404401
02/01/05 20:30ID:???ごめんよ、怒らせる気はなかったんだよ。
漏れはクソ兄弟のおかげで口喧嘩がうまいだけ。
正直いえば、漏れは「使い分け」派。
どっちかについちゃったら、負けず嫌いの性格がでちゃっただけ。
つーか、漏れ本当は 3D 技術とか知らないし、必死に勉強中の未熟者よ。
結構論争楽しかった。ありがとう。
でも、口喧嘩のうまさなら絶対負けないから!!
0405名前は開発中のものです。
02/01/05 21:36ID:???冬休みっていつまでだっけ?
0406名前は開発中のものです。
02/01/05 22:41ID:???0407名前は開発中のものです。
02/01/06 00:17ID:RXS3Y8Q4なにか?
0408名前は開発中のものです。
02/01/06 00:21ID:???0409404
02/01/06 08:45ID:???先生…。僕、あとどれくらいで治るんでしょうか…?
この症状が成長の途中の、さなぎの時期だってのは聞きました…。
でも、でも!
こんな症状を発症している所を人に見られたら……(*∀*)ハズカシイ
せめてお薬を処方して下さいっ!!
0410名前は開発中のものです。
02/01/06 09:03ID:???粘着は個性だから直りません
0412名前は開発中のものです。
02/01/06 09:29ID:???体と心を休めなさい。
2chから24時間離れると、少しだけ休まった自分を感じる筈。
0414名前は開発中のものです。
02/01/06 12:26ID:???そろそろまじめに OO の話をしませんか?
治療法は上のレスで上げたゲームをOOで組んで見る事。
細部はいらない。
1)何をオブジェクトとして
2)どんな処理がどのオブジェクトに属するか
3)オブジェクト間でやり取りされるデータはなにか
を書け。
0416405
02/01/06 13:00ID:???冬厨の言葉を使うのは嫌だが、俺も「使い分け派」。
OOの理論だけ振りかざして「素晴らしい!みんな使えYO!」と
布教するやつは愚か。
OOを理解できなくて(というか勉強しないで)「OOは非効率的。
使えねー!」という奴もまた愚か。
ここをロムってた普通の人たちはみんなそう思っているはず。
というわけで、このスレは「ゲームプログラミングにOOは必要かどうか」
ではなくて「どのようにOOを使えば効率的なゲームプログラミングができ
るか」もしくは「OOでどのように構築するか」という風に変更したほうがよい
思うんだけど、どうでしょう?
OOが良い・悪いという議論は不毛。なぜなら良くもあり、悪くもあるから。
長文スマソ
0417415
02/01/06 13:14ID:???話はそれからだ。
0418
02/01/06 14:26ID:226BizrzいままでC++で作ると、速度度外視の厨房みたいな扱い受けたからなぁ
ベターCとしてのC++程度の物しか見たことない
まぁそもそも公開されてるものなんて初心者向けライブラリだから
簡単なものしかないかな?
0419名前は開発中のものです。
02/01/06 14:50ID:???俺作ってるよ。
I/OはTemplate Method StreamにReader/WriterをDecorate
Saver/LoaderはChain of Responsibirity
DeviceはAdapter、ResourceはSingleton
TaskはState,ControlはInterpriter
Vector/Matrix等のPrimitiveはinlineでoperator overwride
0421名前は開発中のものです。
02/01/06 15:51ID:???0422315
02/01/06 16:07ID:???行っていてもしかたないと思ったり。利用しない人はこのスレを見ないだろう
という前提で、どう利用すべきかに集中した方が意義がありそうだね。
まあ、2ちゃん的にはお祭りの方が楽しいかな?
0423名前は開発中のものです。
02/01/06 16:29ID:???悔い改めなさい。
0424名前は開発中のものです。
02/01/07 14:21ID:???というワケで私がネタ振りを
ライブラリ以外で OO をこんな風にゲームプログラミングに有効活用した!
という自慢話を聞かせてください。
0426名前は開発中のものです。
02/01/08 00:12ID:???どういう風にして、どんな失敗をしたの?
0427名前は開発中のものです。
02/01/08 00:14ID:??? ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧ (´;;
⊂(゚Д゚⊂⌒`つ (´⌒(´
ん?・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧
⊂( ゚Д゚⊂⌒`つ; (´⌒(´
ドッコイショと、・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧
(゚Д゚ ,)⌒ヽ
U‐U^(,,⊃'〜... (´⌒;;
任務失敗と・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
ポ ∧∧ ポ
ン (゚Д゚ ,) . ン
(´;) U,U )〜 (;;).
(´)〜(⌒;;UU (´ )...〜⌒(`)
0429名前は開発中のものです。
02/01/08 03:00ID:???仕様っていうのは?
メソッドのシグネチャさえ固定できれば OO の方が変更は容易だと思うのですが…。
メソッドのシグネチャさえ変更しなければいけないような根本的な部分が変わってしまうのだったらグローバル関数でも全て書き直しだと思うのですが、違うのですか?
0430名前は開発中のものです。
02/01/08 03:52ID:RRhnojLHライブラリ全般はOOの方がいいと思うけど。
I/Oとかデバイスとか抽象化しておくと便利だし。
0431名前は開発中のものです。
02/01/08 06:02ID:???0433429
02/01/08 16:39ID:???いや、だからすげ替えるんでしょう?
「抽象的部品」を定義して、
「具体的部品 : 抽象的部品」を作る。
この「具象的部品」を「抽象的部品」として扱っていれば、
「別の具体的部品 : 抽象的部品」に置き換える事ができる。
しかも「サブルーチン群」だったら仕様が変わっても対処できる
という発言の理由は言ってないですよね?
愚推しますが、「サブルーチン群」を使っても、仕様に変更が
あった場合はコードを大量に書き直さないといけないと思いますが、
違いますか?
私が言いたいのは上記のような場合、OOPL ならば
作成するインスタンスを変更するだけで済む場合がほとんどだ。
という事です。
どうでしょうか?
機械の仕様が変わってもネジを手直ししなくて良いのと同じです。
メソッドをバラしたような、部品化されたサブルーチン群は変更の可能性が
大変小さいです。
それに変更はモジュールに有るのではなく、モジュール間の関係や操作、初期値
などが多いのです。
結果として、OOPLでは再利用率が下がります。
Cだと70%−90%の再利用率を保っていましたが、OOPLに切り替えてから
20%を切っています。
0435名前は開発中のものです。
02/01/08 22:18ID:???C言語のスキルが高いが、OOPLはそれほどでもないってことだね。
Cで続けた方がいいんじゃない?
0437名前は開発中のものです。
02/01/08 23:38ID:???0438433
02/01/09 05:24ID:???> メソッドをバラしたような、部品化されたサブルーチン群は変更の可能性が
大変小さいです。
小さな部品は、対象が基本的な変数型じゃなければ(インスタンスではなく)クラスのメソッドに。
クラス名が明示される状況なら inline が有効なので呼び出しのコストもかかりません。(そのかわり多態性もない)
もっと局所的な場合には private/protected なメソッドという方法もあります。
これも呼び出しのパフォーマンスが気になる場合は inline するようにできますし、
気にならない状況であれば virtual にしておけば Template Method パターン
等を使ってトリッキーな処理ができる場合があります。
> 変更はモジュールに有るのではなく、モジュール間の関係や操作、初期値
などが多いのです。
434さんのおっしゃる「モジュール」の定義がよく理解できないので、
ちゃんとしたレスは書けないのですが、要するに根本を揺るがすような
変更がままある。という事でしょうか?
あと初期値に関しては埋め込まずに外部リースにしましょう。
これは OO かどうかとか関係なく、当たり前の事だと思うのですが…。
> Cだと70%−90%の再利用率を保っていましたが、OOPLに切り替えてから20%を切っています。
この数字はどういった計算で出されたものでしょうか?
ちゃんとした数字だとしたら、 >>435 さんの言う事も、あながちただの煽りとは
言えないかと思います。
0439435
02/01/09 22:55ID:???チームにいるときでもCで頑張ってたよ。頑張りどころが違うのかもしれないけど。
ギリギリの納期だったりするので、C++に進むタイミングがなかなか。
次回のプロジェクトか、ターゲットハードが新しいものになったときでも挑戦しよう
かと思っているけどね。便利だろうなぁとは思うよ。
あと、OOPLとC++って一緒でいいんだよね・・・?(ぉ
0440438
02/01/10 03:16ID:???> あと、OOPLとC++って一緒でいいんだよね・・・?(ぉ
ゲーム業界では一緒でいい気もしますけど...一般的には違う気がします。
私的には OOP に慣れてないうちは C++ よりも Java とか C# みたいな
単一継承で複数インターフェイス実装の OOPL をオススメしますね。
0441.
02/01/10 03:30ID:???>Cだと70%−90%の再利用率を保っていましたが、OOPLに切り替えてから20%を切っています。
熟練度90の構造化言語での開発技能の成果と
熟練度 5のオブジェクト指向開発技能の成果を比較しても
意味があるとは思えません。
まぁ、熟練度が本当に数値にできない以上は明確な事は言えませんがね。
0442名前は開発中のものです。
02/01/10 03:45ID:PNlj8polて事?
0443名前は開発中のものです。
02/01/10 03:49ID:FBG0h4RwSTLを覚える。Cの遺産を使わなくなる。
インタフェース継承とデザインパターンを覚える。それまでのコードを使わなくなる。
templateを使ったGenericProgramingを覚える。それまでのコードを使わなくなる。
■ このスレッドは過去ログ倉庫に格納されています