トップページgamedev
1001コメント390KB

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

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

関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
0467457,4602007/08/06(月) 22:41:30ID:dCjdYchV
だれか経験豊かなjavaプログラマた通りかかったりしないかなぁ。
0468名前は開発中のものです。2007/08/07(火) 00:03:46ID:ziyaQFb3
Vectorじゃだめなのか
0469名前は開発中のものです。2007/08/07(火) 00:17:53ID:2nrPyfF8
やはり釣りだったか
0470名前は開発中のものです。2007/08/07(火) 00:42:53ID:lyE3j1c/
HSPでOOPをやろうとするのと同じくらい馬鹿げてるな
0471名前は開発中のものです。2007/08/07(火) 01:25:29ID:/sDbVbxZ
>>466
ぐちゃぐちゃ言ってないで書いてみろ。あんまりにも考察がめちゃくちゃで
どこから突っ込んでいいのかわからん。ソース晒してみれば突っ込みも入れやすい。
0472名前は開発中のものです。2007/08/07(火) 01:55:24ID:sukzLC0P
>>466
日本語でおk
0473名前は開発中のものです。2007/08/07(火) 03:33:11ID:jZSDWWPE
>>466
参照使え馬鹿
0474名前は開発中のものです。2007/08/07(火) 03:37:03ID:Qoe4Y4zA
なんでみんな冷たいんだwww
0475名前は開発中のものです。2007/08/07(火) 06:44:09ID:vUw1LN3Q
>>468
LinkedList の方が。
0476457,460,4682007/08/07(火) 07:55:20ID:8/4fXdca
void (*func) ();
これのjavaでの代用法が知りたい。
0477457,460,4682007/08/07(火) 08:07:53ID:8/4fXdca
LinkedList ....
Thanks! >> 475
0478名前は開発中のものです。2007/08/07(火) 08:09:00ID:/sDbVbxZ
>>476
java.lang.Runnable func;
0479名前は開発中のものです。2007/08/07(火) 08:24:51ID:88OVU+XC
>>466
aを要素にとるコンテナを宣言して
それにb1インスタンスだのb2インスタンスだのを加え、
コンテナを走査して処理メソッドを順に呼び出せばいいだけの話。

データ構造だとかクラス設計だとかいうレベルじゃない。
単にプログラミング言語の勉強が足りていないだけ。
それにお前は多重継承を激しく誤解している。出直して来い。
0480名前は開発中のものです。2007/08/07(火) 10:39:17ID:98Sz9x7X
なんかタスクってGoToやってるような雰囲気があるな
0481名前は開発中のものです。2007/08/07(火) 10:48:42ID:TDGAxW6A
>>476
>>460では関数ポインタ使ってなくね?
0482名前は開発中のものです。2007/08/07(火) 14:27:28ID:lyE3j1c/
まぁvtableは関数ポインタみたいなもんだけどな。
0483名前は開発中のものです。2007/08/07(火) 14:28:52ID:gmxLaOKz
>>478
Swingでやってハマるとかw
関数ポインタに直感的に一番近いのはjdk7までお預けだな。

javascriptならそのまま
(function(num){ print(num);})(100); //-> 100
だが。
0484名前は開発中のものです。2007/08/07(火) 15:06:05ID:2nrPyfF8
>>483
日本語でおけ
0485名前は開発中のものです。2007/08/07(火) 19:51:36ID:LOGzBd/R
自分が話理解出来てないだけなのに日本語でryとか言ってる奴増えたよね。
0486名前は開発中のものです。2007/08/07(火) 20:52:36ID:2nrPyfF8
>>485
>Swingでやってハマるとか

理解できないのはこの部分だ
0487名前は開発中のものです。2007/08/07(火) 23:28:41ID:rZkCIKw7
Swingがスレッドセーフではないって話かな。

もしそうなら >478 が言いたいのはRunnableのインターフェースだけを
借りることだろうから話が飛躍してるな。
0488名前は開発中のものです。2007/08/07(火) 23:51:16ID:vUw1LN3Q
>>476
だから抽象基底クラスかインターフェース使えと。下のサンプルコードは C++ だが、Java でも
ほとんど変わらん。

#include <boost/foreach.hpp>
#include <boost/ptr_container/ptr_list.hpp>

struct ITask {
  virtual ~ITask() {}
  virtual void exec() = 0;
  virtual void draw() const = 0;
};

class TaskManager {
public:
  void exec() { BOOST_FOREACH(ITask& task, m_tasks) task.exec(); }
  void draw() const { BOOST_FOREACH(ITask const& task, m_tasks) task.draw(); }
private:
  boost::ptr_list<ITask> m_tasks;
};
0489名前は開発中のものです。2007/08/08(水) 00:01:44ID:2nrPyfF8
>>488
優しいな
0490名前は開発中のものです。2007/08/08(水) 07:33:12ID:71C/M+UG
たったこれだけのことなのに
さも凄まじいシステムであるかのように
タスクシステムと言う人の気がしれない
0491名前は開発中のものです。2007/08/08(水) 07:48:40ID:4PM0J5aw
>>490
歴史を勉強しましょう
04924882007/08/08(水) 07:51:26ID:obrNCieZ
>>490
同意。

アセンブリ言語でハードコーディングしていた時代に初めて見たら「やるな」と思うが、
今時だとふつー過ぎて何も言うことがないよね。UNIX V6 のころのデバドラも、既に
こんな作りだし。

自分でコード書くのもいいけど、もっとコード読もうよ、と思う。
0493名前は開発中のものです。2007/08/08(水) 07:53:43ID:HMa+110c
今とは比較にならない制限の厳しさの中で
TCBを弄り回してた時代のことを知らないんだろね
0494名前は開発中のものです。2007/08/08(水) 08:21:56ID:XmcrCIW0
そういう話題は以下のスレでやってくれ

タスクシステム総合スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0495457,460,466,4762007/08/09(木) 01:21:26ID:WI6u6LTt
できた。
抽象基底クラスは知っていたが、
仕様上、基底クラスから上位のクラスをたどる必要があったので、
関数ポインタ云々といっていたのだが・・
キャストすればよいだけだった。
javaにはポインタの概念がないから、
javaのクラスは当然キャストできない、というような誤解があったので。
0496名前は開発中のものです。2007/08/09(木) 01:24:51ID:Tm6LW0Jp
>>495
それなんか設計がおかしくないか?
みんなの意見無視ってところか
0497名前は開発中のものです。2007/08/09(木) 02:27:45ID:RcnrWFRi
>仕様上、基底クラスから上位のクラスをたどる必要があったので、
そんな仕様にするのが悪い。
第一、抽象基底クラスを知っているのならば
そんなところで困ったりしない。
0498名前は開発中のものです。2007/08/09(木) 02:50:07ID:yVPi3RJq
初心者には冷たいもんだな
0499名前は開発中のものです。2007/08/09(木) 03:14:21ID:v8CPCZuZ
というか言語仕様勉強しろ
0500名前は開発中のものです。2007/08/09(木) 04:12:56ID:k08h5JG9
キャストってw
ポリモフィズムをカケラも理解しとらんじゃないか
0501名前は開発中のものです。2007/08/09(木) 04:46:19ID:BskRNsfr
自分から質問してきたくせに
まともな意見すら無視するような勉強不足君は
鮮やかに放置して、次の話題ドゾー
0502名前は開発中のものです。2007/08/09(木) 05:27:24ID:nQyaGvDb
まともな意見を無視するのと勉強不足なのは関係ないと思うぞw
質問者はどちらの属性も持ってるけど
0503457,460,466,476,4952007/08/10(金) 20:04:16ID:aK9bbQO3
失礼。

>>488
解決のヒントになりました。
ただboostライブラリはjavaにはないような気がします。

>>468
Vectorの案内が最初の解決のヒントになりました。
0504名前は開発中のものです。2007/08/11(土) 20:49:07ID:AcYB8hIq
>>503
さんざん情報貰ったんだから、せめてソース晒して恩返ししてみないか?
0505名前は開発中のものです。2007/08/17(金) 01:53:51ID:7sSY46ad
JavaSEでVectorつかってそーだな・・・
0506名前は開発中のものです。2007/08/21(火) 16:35:31ID:/oULNmRu
質問すまそん。DXライブラリ&VC++でゲーム製作してます。

例えばRPGで、キャラデータ・アイテムデータ・フラグおよび
ゲーム内システムデータ(ゲーム世界での日付とか)は、
それぞれグローバルなデータクラスにしてるんですが、
もうちっとスマートな設計の仕方はないでしょうか?

ほぼ全てのインスタンスから参照するデータ(例えばフラグとか)って、
いちいち参照やポインターで格納させるよりか、データクラスとしてグローバルに
展開してメソッド経由でアクセスさせたほうがいいような気がするど素人なんですが、
こんな俺はオブジェクト指向として根本的に間違ってますね?
0507名前は開発中のものです。2007/08/21(火) 18:54:06ID:/OCncB5N
ちゃんと管理できるなら問題ない
0508名前は開発中のものです。2007/08/21(火) 19:55:25ID:LQCVNOKZ
>>506
>>507に同意
オブジェクト指向をしたいのか、ゲームを作りたいのか。
書き方に明確な規則やルールがあれば、それだけでいいと思うけどね。

でも自分が「オブジェクト指向的」に組むなら、その辺の情報はグローバルにはしないと思う。
必ずシステム内で生成する。何故なら、ゲームシステム≠ゲームの世界と考えてるから。

1.ゲームシステム=ゲームの中の宇宙を作る(ゲームシステム=プログラム本体)
2.宇宙の中に惑星を一個作る。(ゲーム世界(日付等含む))
3.ゲームの世界の中に、登場人物やアイテムを作る。(キャラクターデータ、アイテムデータ)
4、登場人物とアイテムは、状態を所有している。(フラグ)

単純に現実に沿って状態を作る(これがRPG向きか?と言われると、そうではないけど)
データは必ず1→2→3→4の順にアクセスする。面倒くさいけど、一応これにも利点がある。
・ゲーム内での登場人物の役割を切り替えやすい。
・同時に複数キャラが操られても破綻しにくい。(マルチプレイさせやすい)
・同様に、ゲーム世界以下の要素は増やすのが比較的容易。

まとめて言えば、人や物、物事の取り扱いを現実と同じようにできるってことね。
最初に戻ると、規則があるなら君の好きで良いんじゃないってことで。
0509名前は開発中のものです。2007/08/22(水) 02:49:01ID:xHfctKqh
>>505
標準ライブラリが互換性のために未だに使いまくってるんだが・・・。
んで使い勝手悪いからいい加減JCFに移行しろと叩かれてるじゃないか。
0510名前は開発中のものです。2007/08/22(水) 10:20:41ID:lSyOGrel
Universe.MilkyWay.SolarSystem.Planets.Earth.Enabled = false;
0511名前は開発中のものです。2007/08/22(水) 21:45:27ID:HTZJHbeS
>>508
> 単純に現実に沿って状態を作る(これがRPG向きか?と言われると、そうではないけど)
単一システムで作るのは、結構つらいなぁ。

俺だと RPG はフィールド&シナリオ、戦闘、デモシーンでシステム完全に切り離して
作っちゃうけど。どーしてもフィールドからシームレスに戦闘に入りたいと言われたら
考えるが、工数は開発もデバッグも倍かさむよって感じ。
0512名前は開発中のものです。2007/08/22(水) 21:58:56ID:9DW3Phyd
>>506が心配してるようなのって構造化手法の方の話で
オブジェクト指向とはあんまり関係ない気がする
オブジェクト指向言語は結局構造化手法の流れを汲んでるから関係あるっちゃあるんだけど
「オブジェクト指向的」に批判されることはないと思うんよ
0513名前は開発中のものです。2007/08/22(水) 22:26:25ID:9DW3Phyd
>>508はこの方針でゲーム作ってなんかあったらここへ相談しにきてね
0514名前は開発中のものです。2007/08/23(木) 00:15:28ID:mSgl7P3T
>>60が参考になるんじゃね
0515名前は開発中のものです。2007/08/24(金) 15:43:24ID:C1/M3//R
>>513
>>510みたいなことは流石にやってないけど、マップが複数面あって
自由にキャラクターを選べるのを作ってるから、今のやり方で全く問題なかったりするぜ!
0516名前は開発中のものです。2007/09/01(土) 13:35:04ID:+CS1vDDV
>>510おれもそんな感じだww
0517名前は開発中のものです。2007/09/01(土) 15:26:53ID:AAlSvZp8
>>516
お前って奴は…
0518名前は開発中のものです。2007/09/01(土) 18:53:13ID:pEzsrlB5
チラウラだが .NETの自動生成コードとか見ると
クラス名がネームスペース入りのフルネームで書かれてて
>>510と比べてもあまり遜色ないくらい長ったらしい記述になってる
0519名前は開発中のものです。2007/09/03(月) 18:50:24ID:pkJ0HJ1y
>>510はどこまでが名前空間でどこからがコレクションなんだろ
0520名前は開発中のものです。2007/09/03(月) 18:56:19ID:l4kjvmoQ
Universe.、までが宇宙空間
0521名前は開発中のものです。2007/09/03(月) 20:58:24ID:nm3JiNC1
Planetsまでじゃないのか
0522名前は開発中のものです。2007/09/03(月) 21:43:06ID:l4kjvmoQ
C#とかだと区切り記号が全部ピリオドだから分かりにくいよなあ
0523名前は開発中のものです。2007/09/03(月) 22:51:36ID:4m5q0iOi
俺ならPlanetsは入らないな。
Universe.MilkyWay.SolarSystem.Earth

しかし、こんな話題しかないものか。
0524名前は開発中のものです。2007/09/03(月) 23:01:33ID:nm3JiNC1
いいんじゃない、超光速星間航行を多用するスペースオペラ的ゲームのデータ構造。
0525名前は開発中のものです。2007/09/04(火) 00:01:23ID:aU+sltFh
>>522
そんなこと言いだしたらjavaのエンクロージング型の完全修飾名は恐ろしいことになる。
0526名前は開発中のものです。2007/09/04(火) 00:51:30ID:SZHcTWC/
外から内部クラスをアクセスすることはほとんどないんじゃね?
0527名前は開発中のものです。2007/09/04(火) 01:36:58ID:aBG3sZkW
>>522
Delphiはわかりにくいと申すか
0528名前は開発中のものです。2007/09/04(火) 01:47:09ID:h5r4WGWI
まあDelphiもC#も、同じヘルスバーグ氏設計の言語だからな
俺は氏の思想は好きだが
0529名前は開発中のものです。2007/09/04(火) 09:17:06ID:/fq60VcD
どっちもIDEで使うための言語だからそんなに問題にならないでしょ
0530名前は開発中のものです。2007/09/04(火) 14:17:11ID:A5VD8Kop
C#はCLRで使うための言語だろ。
VSがIDEなだけで。
0531名前は開発中のものです。2007/09/04(火) 17:20:53ID:/fq60VcD
独立して使えるように体裁は整えてあるし確かにそうなんだけど
#regionとかpartialとかIDE向けの機能があるのは確か

http://www.atmarkit.co.jp/fdotnet/insiderseye/20060215cscommunity/cscommunity_03.html
>Q.C# 3.0では、型推論によって読むのが難しいコードになってしまうのではないか?
>A.Visual StudioのIDEを強化すればおk

さすがにスレ違いだなすまん
0532名前は開発中のものです。2007/09/04(火) 18:32:28ID:1MQtcsKR
まあ、確かに動的な型変換と型推論は型の決め方が違うから読み辛い。
というかC#は既存言語の枯れたパラダイム
てんこもりにしただけのくせに信者が騒ぎだすんだろうなぁw
0533名前は開発中のものです。2007/09/05(水) 22:29:15ID:wushZy2l
アンチうぜぇ
0534名前は開発中のものです。2007/09/06(木) 00:13:48ID:XDEo8NLL
信者うぜー
0535名前は開発中のものです。2007/09/06(木) 01:04:58ID:ojjbKURb
突然何の脈絡もなく言語叩きをしだす馬鹿は放置して次の話題ドゾー
0536名前は開発中のものです。2007/09/07(金) 00:33:06ID:B51b23c5
JAVAとかC#とかってキャストないよね

タスクシステムのワーク領域のキャストってどうやるのかな
0537名前は開発中のものです。2007/09/07(金) 00:44:42ID:GaWvLQQX
>536
今どきそんなC時代の古典的「タスクシステム」に無理矢理合わせようとしないのが正解。
0538名前は開発中のものです。2007/09/07(金) 00:54:28ID:qKvVhzB0
>>536
だからインターフェース継承しろと。どうせメモリ管理は GC 入ってるんだし。
0539名前は開発中のものです。2007/09/07(金) 09:56:16ID:+KS6LJ+F
キャスト自体はあるだろと

まぁC++でもそんなコードかいてたら殴り倒すけど
0540名前は開発中のものです。2007/09/07(金) 10:04:18ID:puv664XK
>>539

シューティングゲーム プログラミング
松浦 健一郎 (著)

この本ではC++でワーク領域のキャストしてたけど、殴るの?
0541名前は開発中のものです。2007/09/07(金) 10:07:03ID:ODKwq4Ib
ワーク領域のキャスト(笑)
0542名前は開発中のものです。2007/09/07(金) 11:36:49ID:+KS6LJ+F
それ悪い見本だろ
0543名前は開発中のものです。2007/09/07(金) 12:02:42ID:xHXwrHzM
>>542
普通に使ってたよ
本を書いてる人を殴れる程、出来るプログラマーなの?あなたは
0544名前は開発中のものです。2007/09/07(金) 12:51:19ID:6U+LdAPY
松浦 健一郎 (著)、じゃなくて
松浦 健一郎 (笑)の間違いだろ。
0545名前は開発中のものです。2007/09/07(金) 13:28:52ID:43uHszUC
MAKKENは殴ってよい
0546名前は開発中のものです。2007/09/07(金) 13:54:05ID:NUmtK/nu
>>540の本って継承知らない程度の初心者向けの本ってところか?
継承使わずにやるやり方にページ割くくらいならさわり程度でも継承教えたほうがためになりそうだが・・・
0547名前は開発中のものです。2007/09/07(金) 16:11:07ID:g09BD/TG
>>543
>>542が出来るプログラマーかどうかはわからんが、
基本的に日本だと本を出す奴ってのは3流だから
とりあえず本出してる人すごいって認識は改めたほうがいい。
0548名前は開発中のものです。2007/09/07(金) 16:48:36ID:HXEpQNDZ
3流は本すら出せんだろ
0549名前は開発中のものです。2007/09/07(金) 16:51:44ID:wO5yXJcP
>>547
三行目に同意
俺も高校まではそういうステレオタイプを持ってた
0550名前は開発中のものです。2007/09/07(金) 17:54:50ID:VwzOSVjv
じゃあ「俺よりは凄い」で。
0551名前は開発中のものです。2007/09/07(金) 20:37:04ID:B51b23c5
ここは自称凄い人がたくさんいるスレですね
0552名前は開発中のものです。2007/09/08(土) 00:42:34ID:hAtUkBFn
>>546
一応継承は使ってるみたいだよ
new deleteのオーバロードも使ってるし

だから単に継承を使ったやり方をしらないだけじゃね
0553名前は開発中のものです。2007/09/08(土) 02:39:33ID:RITYgY6W
最近のライターがコード書けんのは確かだな。
0554名前は開発中のものです。2007/09/08(土) 07:47:53ID:bNPXbGtI
はいはいスレ違い
0555名前は開発中のものです。2007/09/13(木) 22:14:56ID:1Bt3Jrj9
"Those Who Can't Do, Teach"という言葉があってだな。

シューティングの本?
同人シュー作者の俺がそのうち書いてボコボコにしてやんよ

           ∧_∧
        つ≡つ);:)ω・).,,';
   _| ̄ ̄||≡つ=つ  )
 /旦|――||// /|   \
 | ̄ ̄ ̄ ̄ ̄| ̄| . |∪ ̄\_)
 |_____|三|/
0556名前は開発中のものです。2007/09/13(木) 22:42:21ID:sAjH+7xy
>>553
正直、本を書いてもあまり儲からないんだよな……。前に技術書書いたことがあるんだが
印税8%で初版3000部とかだったから、時間単価考えたらコード書いてた方が遥かにマシ
だった。

もう少し幅広く売れる本とか、時間かけずに書けるとか、その後の仕事受注につながる類の
ヤツなら良いんだが。
0557名前は開発中のものです。2007/09/13(木) 22:44:13ID:p9GEmztQ
何系の本なの?ゲーム系?ハード系?
それとも普通の言語系?
0558名前は開発中のものです。2007/09/13(木) 23:27:43ID:sAjH+7xy
>>557
ネットワーク系。だいぶ前だけど、当時は翻訳やら執筆やらイロイロやってた。
今じゃすっかりコンサル稼業で、趣味でしかコードかけない人生だけどな……。
0559名前は開発中のものです。2007/09/14(金) 00:00:01ID:qAC7e6UH
技術書って印税8%も来るのか。
0560名前は開発中のものです。2007/09/14(金) 01:56:40ID:kBeEhHlB
>>559
でも 1 冊 2,000 円 x 8% x 3000 冊だと 48 万だぜ。駆け出しのプログラマだった頃は
実質 1.5 ヶ月かけても割に合ったけど、もうダメだ。金以外に何か目的がないと
やってられんよ。
0561名前は開発中のものです。2007/09/14(金) 04:58:49ID:CTgFkt8N
やねうらおさんですか?
0562名前は開発中のものです。2007/09/15(土) 18:37:54ID:odGWNMQb
けっこう、計算するとシビアな値段だな・・・
人生掛けてまでやることじゃない
クソ本あろうとしったことか!

あ、俺?俺は、情報商材にして、単価上げて(゚Д゚)ウマー
0563名前は開発中のものです。2007/09/15(土) 20:05:14ID:5hbSwr+P
自分の備蓄禄だと思えば良いじゃない。

何ページで執筆に何カ月かけたか知らんが、
コード書けない人間なら数こなせば良い金になるな。
eclipse本なんてコード書かなくても良いしソフトの新版出る度に改定するから副業にはちょうど良いじゃないか。
デザインパターン本なんて同じ内容なのに言語ごとにあるぞ。

コード書いて食ってる人間に本なんて書いてる暇があるかは知らんが・・・。
0564名前は開発中のものです。2007/09/15(土) 20:15:34ID:zE0h51TJ
日本の場合、コード書いても食えない人間ばかりだろ。
だから低レベルな本しか出てない。
そんな本ばかりだから若い人が育たない。
で、その若い人がコードで食えないから、さらに劣化した本を書くというスパイラル。
0565名前は開発中のものです。2007/09/15(土) 20:27:26ID:lBqIBG3l
と、コードを書けもしない人間が申しております
0566名前は開発中のものです。2007/09/15(土) 21:30:05ID:kmdFdmdy
>>564
> 日本の場合、コード書いても食えない人間ばかりだろ。
というか、単価の高いプログラミング仕事がほとんどない。

大手ゲームメーカーでリードプログラマやるより、中小の基幹システム改修
案件の SE やってた方が全然収入がいいという。技術的にもプロジェクト運営の
面でも、ゲーム屋の方が大変なんだが。
■ このスレッドは過去ログ倉庫に格納されています