ゲームのアルゴリズムを教えて管sai (199レス)
上下前次1-新
113(1): 名前は開発中のものです。 [sage] 2008/06/10(火) 21:19:46 ID:8sGd3hVL(1/2) AAS
↓ポーカーで、誰が有利かを調べるプログラム作りたいんたけど
外部リンク[swf]:www.pokernews.com
いったいこれ、なにをどうやってこんなに高速に確率計算できるのか、まったくわからない
このプログラムは、近似値じゃなくて↓みたいなドローイングデッドもきっちり表示するし
画像リンク
あらかじめ計算した結果をデータベースにでも叩き込んだのかと思ってるんだけど
それにしたって膨大すぎる
114: 名前は開発中のものです。 [] 2008/06/10(火) 21:32:41 ID:8sGd3hVL(2/2) AAS
単純に全探索じゃなくて、なんか省略する方法があるんだろうが
115(1): 名前は開発中のものです。 [] 2008/06/12(木) 13:22:11 ID:trmQ6Ydr(1) AAS
誰かクイックソートが挿入法よりなぜ早いのか教えてくれ
クイックソートのほうがめんどくさそうなのに最速とか理解できん・・・
116: 名前は開発中のものです。 [sage] 2008/06/12(木) 15:21:52 ID:gQmHVY6Z(1) AAS
>>113
そのswfをローカルに落として実行してみたら
Odds calculator failed to get data from server.
ってエラーメッセージが出たから、
確立計算専用の外部プログラムを呼び出してるっぽい。
117: 名前は開発中のものです。 [sage] 2008/06/12(木) 15:58:03 ID:gZtmjAve(1) AAS
>>115
全部のソートにN*Nの時間がかかるとする。
これを、半分に分けてソートして、足し合わせるとすれば、かかる時間は
(N/2)*(N/2) + (N/2)*(N/2)
= N*N/4 + N*N/4
= N*N/2
N*N > N*N/2
・・・とおもったらクイックソートって2分割って訳じゃないのね?て事で、
分割を、(1/x),(1/y)とする。ただし(1/x)+(1/y) = 1
1 = 1*1 = (x+y)/xy = (xx + 2xy + yy)/xxyy
分割したものをソートして、足し合わせる時間は
(N/x)*(N/x) + (N/y)(N/y)
= N*N/x*x + N*N/y*y
= (yyNN + xxNN) / xxyy
= NN(xx + yy)/xxyy
(xx + yy)/xxyy = (xx + 2xy +yy)/xxyy - 2xy/xxyy = 1 - 2xy/xxyy
ゆえに、NN > NN(xx + yy)/xxyy
こんなんでどうだろうか。というか、この証明あってるんだろうか。
118: 名前は開発中のものです。 [sage] 2008/06/12(木) 16:38:08 ID:VjP0i/a5(1) AAS
データ数によるんだよね。 少ないデータならどれでも変わらん
119(3): 名前は開発中のものです。 [] 2008/06/15(日) 19:58:45 ID:f+c3BIE0(1/2) AAS
シューティングゲーム作っているのですが、
私の数学力のなさか、敵の動きが、直線と円を描くものしか作れません
どうやったら、アーケードにあるような あたかも敵が思考を持っているような動きが
実現できるのでしょうか?
120(1): 名前は開発中のものです。 [sage] 2008/06/15(日) 21:16:54 ID:n3ZqdSRd(1) AAS
>>119
敵の動きのカタログ的なものが欲しいなら……。
シューティングゲーム プログラミング ¥ 2,940 (税込)
松浦 健一郎 (著), 司 ゆき (著)
外部リンク:www.amazon.co.jp
121: 119 [sage] 2008/06/15(日) 23:38:35 ID:f+c3BIE0(2/2) AAS
そうではなく、どのようにして さまざまな動きを実現しているのか? その方法を知りたいわけです。
私の敵を動かす情報は 初速度、速度、角度、時間、加速度で管理しているので、直線と円のみになってしまうのです。
そこで、微妙に、プレイヤーのいる方向に向かってきたりする方法は、どのような情報で管理しているのかを
知りたいのです。
私の方法でも角度を細かく設定すれば、ある程度 色々な動きは実現できるのですが、
もっとスマートな方法はないかと思い質問したまでです。
122: 名前は開発中のものです。 [sage] 2008/06/15(日) 23:40:21 ID:re3KC7mv(1) AAS
二つの点座標が解れば、角度が求まるのでは?
123: 名前は開発中のものです。 [sage] 2008/06/15(日) 23:46:14 ID:L9WqTsHd(1/2) AAS
アークタンジェントを理解すればいいとおもうよ
124: 名前は開発中のものです。 [sage] 2008/06/15(日) 23:47:36 ID:L9WqTsHd(2/2) AAS
外部リンク[htm]:www.tkb-soft.hmcbest.com
具体的にはこのへんで。
125(2): 119 [sage] 2008/06/16(月) 00:19:31 ID:VJeuSd2d(1/2) AAS
う〜ん、ちょっと違って
人工知能で解決できるのではないかと思うのですが、
人工知能に関する知識がないので、作れないのですが、
オススメの入門書などないでしょうか?
126: 名前は開発中のものです。 [sage] 2008/06/16(月) 00:31:02 ID:4SfMqdzY(1) AAS
>>125
現在位置ベクトル
現在速度ベクトル
目標位置ベクトル
目標位置での速度ベクトル
この条件を満たす加速度ベクトルの時系列を求めればいいんだよね。
でもゲームだから時系列を事前に求める必要はなくて
毎フレームごとに計算するから状態マシンでいけるよ。
2Dシューティングなら普通そうだと思う。
本格的にやるなら確率過程勉強するとおもしろいよ。
実際の迎撃ミサイルがどのように制御されてるか理解できる。
127: 名前は開発中のものです。 [sage] 2008/06/16(月) 00:51:35 ID:Mj4LPxSD(1) AAS
敵の動きが実際にはどういうふうに実装されてるのかを知りたいなら、
>>120みたいな作り方の本が一番実践的だと思うけどなぁ。敵の動きのサンプルもあるだろうし。
STGは本格的に作ったことはないが、普通敵の動きに人工知能なんて使わないんじゃない?
俺だったら毎フレーム状態遷移を計算して、行動を決定するような実装にすると思う。
リアル迎撃ミサイルの精度で敵が弾を撃ってくるSTGとか、やってみたいがストレスがたまりそうだなw
128: 名前は開発中のものです。 [sage] 2008/06/16(月) 01:04:13 ID:VJeuSd2d(2/2) AAS
Cマガが廃刊になって以来、こういった系統の本で当たりだった試しがない
浅く、レベルも低く、よくこんな本だせたな という本だらけ
立ち読みできないから なおさらタチが悪い
まぁ、状態遷移図で検討します
129: 名前は開発中のものです。 [sage] 2008/06/16(月) 01:41:50 ID:BvIxc5ty(1) AAS
>>125
この手のアルゴリズムは、たぶん正解みたいなものはなくて、
プログラマーのセンスによるんだと思う。
ゲームプログラマーが技術力だけじゃなく、センスを活かせる局面なので、
いろいろ試して自分なりのノウハウを蓄積するのがいいと思う。
ちなみに、この手の処理は、パラメータによる差別化だけじゃなくて、
ちゃんとそれぞれの動きに対して別のコードを書いたほうがいいよ。
130(2): 名前は開発中のものです。 [sage] 2008/06/23(月) 18:42:29 ID:gkCzmYeJ(1/2) AAS
シューティングゲームを作っています。
2次元配列に初期化された敵のデータがあります。
int EnemyMap[25][300]=
{
{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
{0,0,0,0,0, 0,1,0,1,0, 0,0,0,・・・
}}
0が無しで、0以上が敵在りで、敵の番号です。
このような場合の敵の出現方法を教えて下さい。
ちなみに縦スクロールSTGです。お願いします。
131: 130 [sage] 2008/06/23(月) 19:48:54 ID:gkCzmYeJ(2/2) AAS
0が無しで、0より上が敵在りで、敵の番号です
の間違いでした。
132: 名前は開発中のものです。 [sage] 2008/06/23(月) 20:25:54 ID:leAIdu27(1) AAS
テキトーに推測しながら……
時間経過をターンとする、
25マス(?)のデータが300ターンぶんあるのを表すのなら
int EnemyMap[300][25]
ではないか
gameturn を例えば10フレームごとに +1 し、
{
int i;
for(i=0;i<25;i++)
{
int enemyidx;
enemyidx = EnemyMap[gameturn][i];
if(enemyidx != 0) {addenemy(enemyidx, i);}
}
}
133(1): 名前は開発中のものです。 [sage] 2008/06/23(月) 20:30:20 ID:cIfICiuE(1/3) AAS
>>130
int COLUMN = 25;
int ROW = 300;
int EnemyMap[COLUMN][ROW] = { {0,0,.....
int rowNOW = 0;
while(1)
{
/* 画面描画とか、敵機、自機の移動とか*/
//ここから敵の配置
for ( int x = 0; x < COLUMN; x++ ) {
敵を出現させる関数( EnemyMap[x][rowNow], x, 0 );
}
rowNOW++;
}
void 敵を出現させる関数( int enemyType, int x, int y )
{
switch ( enemyType ) {
case 1: { 敵1登場(x,y); break; }
case 2: { 敵2登場(x,y); break; }
case 3: { 敵3登場(x,y); break; }
case 4: { 敵4登場(x,y); break; }
case 5: { 敵5登場(x,y); break; }
...
}
}
うーん、我ながらほれぼれするなあ。
134: 名前は開発中のものです。 [sage] 2008/06/23(月) 20:34:44 ID:cIfICiuE(2/3) AAS
>>133に
case 0: { break; /* 敵は登場しない */ }
を追加(汗)
135: 名前は開発中のものです。 [sage] 2008/06/23(月) 21:56:44 ID:SqRC+pBQ(1) AAS
そのデータ構造の欠点は
・敵がいてもいなくても同じだけの容量が必要
・同じ時間に敵は1機しか出現できない
あ、ひょっとして勘違いでこの25っていうのは画面の幅のことなのか!?
25x300のマップを表現してるとか
136: 名前は開発中のものです。 [sage] 2008/06/23(月) 23:17:25 ID:cIfICiuE(3/3) AAS
25って画面の幅だと信じてました。
137: 名前は開発中のものです。 [sage] 2008/06/24(火) 03:55:28 ID:KKsizlIf(1) AAS
敵が画面横や画面中央から出現するような処理はできないな。
上下前次1-新書関写板覧索設栞歴
あと 62 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s