【初心者】スレを立てる前にココで質問を【Part20】
本気で馬鹿だろこいつ
プログラムも音楽も絵もできないから制作進行っていう発想は心から軽蔑する
対戦型パズルを作ってみたんですが、COMアルゴリズムの実装に難航しています。
まずフィールドの状態を把握させるところから始めるかと思うんですけど、ここでつまづいていまして。
囲碁のように 盤上のどこにでも置ける仕様なので、多様に変化する局面に対応させようとすると
情報量が多すぎてワケがわからなく・・・
なにか参考になるサイトとかってありますでしょうか?
>>954 オープンソースのコミュニティを覗いてみろ
>951
最初にやるべき事は、そういうノウハウっぽく書いてあるページを信用するのをやめることじゃね?
アドベンチャーゲーム用のスクリプトエンジンを作っているのですが、
禁則処理とかルビ付き文字の表示処理がうまく行かずつまずいています・・
どこか参考になるサイト内でしょうか。
>>959 等幅フォントだったら、Nバイト先にある文字を確認して、
禁則処理が必要だったら変数をリサイズするなりなんなりした後、
Nバイト目に改行文字を挿入すればいいんじゃね?
ルビも似たような感じでNバイト目の位置を半角文字幅から計算して、
NバイトからN+nバイトの間で文字を均等に云々すればいいと思うけど。
スクリプトエンジンプログラミング(坂本千尋著)がそこそこ詳しいけど、びみょー。
坂本千尋の本でゲームが作れましたってんならオススメ。
参考になるのは載ってるアルゴリズムだけかな、と僕は思う。
どうせやるんなら自分で考えたほうが自分のためになるよ。
吉里吉里使ってみて、それからソースも読む
地面の判定にelse使いたいのですが思い通りに行きません…
if(地面と主人公当たってる場合){
主人公は地面の上
}else{
落下
}
こうすると地面に当たってる時も落下処理になります…
if(地面と主人公当たってる場合){
主人公は地面の上
}else{
主人公のY座標をコピー
コピーしたY座標に1を足す
if(地面とコピーした座標当たってる場合){
主人公は地面の上
}
else{
落下
}
}
ありがとうございました
>>956 評価関数とか思考ルーチンでググれ。
ターン制なら全パターン走査でもやればいいよ。
アクションパズルは方法論がありすぎて、自分で考えるしかない・・・・。
だって、どんなパズルかわからないんだもの。
ぷよぷよとかはググれば結構あるとおもうから、探せ。
>>965 レスどもです。
作ったのは そのアクションパズルのほうだったんですが、
ググって出てきたものを見てみると・・・これは相当深い世界ですね。
実はネット対戦の実現が厳しかったのでCOM対戦に逃げたんですが、
自分が思ってたより ずっと苦労しそうです。
しかし、おかげさまで光明が見えてきました(うっすらと)
どう考えても、ネット対戦(=vs人間)の方が楽なんだがw
とくにアクションパズルはw
COMの思考バリエーションも必要になるしねぇ。
一人用はできてるんだよね?
それとも相手が居ないとできないの?
ええと・・・ オフラインなら2人用ができます。
ネット対戦が厳しい、と書いたのは、色々なフリーソフトを見ると現実的に
「人が集まらない、やってもらえない」という根本的な悩みを抱えている作者さんが
多い、ところいうのが大きいですね。
自分のパズルに、継続的に人を惹きつける魅力がそこまであるかな、と
もちろん、CSであればサーバーの管理が・・・とか、アクション性があるだけに
ラグの無いような組み方は・・・などプログラミング技術的な心配もあるんですけど
あ、対戦ものなので相手が居ないとできないです。
基本は出来てて、あとはCOMの思考ルーチンだけなのね。
じゃぁ、人間の思考をCOMにさせればいいやっていう、
基本的な事はわかった上で、どうするかを考えているのか。
ぷよぷよのような落ち物パズルを想定して話すが、一番簡単な方法は、
「あらかじめCOMの操作の配列を作っておく」方法
ようするに、インチキ。
ランダムに落ちてくるはずのぷよをコンピュータは全部知っていて、
あたかも操作しているように見せる。色変えたり、パターンを増やせばほとんどわからんはずw
この方法だと、おじゃまプヨで終わりだけどな。
手がくずれたら、あとはひたすら消すルーチンにするとか。
お邪魔が来る前に3連鎖程度を連発するとか。
具体的な話になってくると、システムがわからないとねぇ。
パクられても嫌だろうから、あとは自分で頑張るしかないねw
逆にルーチン部分を他人が作れるように
インターフェースを整備して公開するのも面白いかも。
他人のルーチンが読めれば勉強にもなるだろうし。
俺とかむしろこっちの方がもえるかもシレンw
インチキ法、ググってみると業務用でも採用されてたみたいですね、セガのテトリスとか。
自分の力量的にも分相応ではあるんですが・・・うーん最終手段かも
ぶっちゃけてしまうと、ルーチン部分は他の人に頼めればそれに越したことはない、
むしろそこ燃えて欲しいという考えではあるんですけど、いかんせん
言語がHSPなもんで誰も寄ってきてくれそうにないというのが。
取り敢えずは頂いた情報を材料にやってみます。
HSPか・・・・せめてpythonで・・・・w
外部用のインターフェース切るの難しいね。
とくに、こちらの指令する作法を守らせるのが難しい。
とにかく頑張れ!
pythonって名前は聞くけど書いたことないなあ…
中括弧ないんだっけ?よく書けるなそんなんで
完全に切り離して、ってのはダメなん?
パズルなら入力は移動と回転、落下とかくらいでしょ。
出力結果をそれらに絞るような外部思考ルーチンを組めばあるいは、、、
と、思考ルーチン組んだことないやつがたわごと言ってみる
ゴメン、酔っぱらってた
orz
>>973 一番勢いがある(あった?)言語だと思うんだが。日本ではいまいちだが。
GoogleAppEngineでも最初にサポートされた言語だし。
中括弧に相当するインデントによる制約があるし、機能として不足している部分はない。
PyScripterっていう専用エディタがなかなか便利で、それ使ってちょっと試したらいいよ。(python自体ももちろん要る)
API群も強力で、ちょっとググればほしいモジュールがたいていそろう。
探すときは英語読めないときついが、使うときはソースは読めるだろうからどうにかなる。
ゲーム制作でいえば、pygameという開発モジュールがあって、これが強力。
SDLのラッパーだから、LinuxやMacでも走るよ。
日本語の解説少ない時点で敷居が高いだろ
PyScripte パイスクリプター? pygame パイゲーム?
えらくそそられる環境ですな
980 :
959:2010/03/30(火) 17:23:08 ID:P6m6KDQV
>>960 メイリオにしてます。全角文字は等幅のようですが、半角はプロポーショナルらしいので、
1文字の幅が一定という前提で計算することはできません。
そんなわけで、文字列は基本的に行ごとに格納しています。ルビの場合はそこで分割。
1行目、2行目A、2行目B(ルビ付)、2行目C、3行目のような感じで。
フォントクラスは改行文字も処理できるので、1行目と2行目Aはくっつけてもいいかもしれませんが。
>どうせやるんなら自分で考えたほうが自分のためになるよ。
頑張って自分で組もうとしてみました。
行末に禁則文字があった場合は、後ろの1文字も含めて次の行に送り出すようにしてみましたが
ルビ→改行→句読点のようになっていると、句読点が行頭に出てきてしまったりします。
まぁ、そのうちなんとかなるでしょう
>>961 吉里吉里ってソース公開されているんですね。見てみます!
かなり本格的なシステムなようなので、読むのが難しそうですが・・
>>979 個人的には XY→角度→XY に戻すのは好みじゃないな
動作はXYだけで完結しておいて、角度を求めるのは表示するときのみ一方通行の変換にしたくなる
double x, y, z;// 現在位置
double ix, iy, iz;// 現在の移動ベクトル
double tx, ty, tz;// 現在位置からターゲットへの相対位置
double dis;// ワーク
dis = sqrt(tx*tx+ty*ty+tz*tz);
if(dis > 0){ dis = 方向転換力/dis; ix+=tx*dis; iy+= ty*dis; iz+=tz*dis; }
dis = sqrt(ix*ix+iy*iy+iz*iz);
if(dis > 0){ dis = スピード/dis; ix*=dis; iy*=dis; iz*=dis; }
今適当に書いたから間違ってたらゴメン
>>980 WindowsならWinAPIのGetCharABCWidths使って
>>960の考え方でがんばれば計算できるんじゃね?
983 :
979:2010/03/31(水) 04:22:17 ID:hQL22suv
>>981 ありがとうございます。
試してみます。
double だから dis == 0 ってなるか?と思う
>>963のプログラムってどういう感じに働いてるんだろ
自分のとは全然違ってて新感覚
>>984 if (!(dis ^ dis))で動くんじゃね?
x, y, z;// 現在位置
ix, iy, iz;// 現在の移動ベクトル
tx, ty, tz;// 現在位置からターゲットへの相対位置
sx=tx-ix, sy=ty-iy, sz=tz-iz;//舵力ベクトル
dis=sqrt(sx*sx,sy*sy,sz*sz);
ix+=舵力*sx/dis, iy+=舵力*sy/dis, iz+=舵力*sz/dis;
dis = sqrt(ix*ix+iy*iy+iz*iz);
if(dis > マックススピード){ dis = マックススピード/dis; ix*=dis; iy*=dis; iz*=dis; }
では?
const double speed = 8.0f; // スピード(サンプル)
double dx = targetX - fromX;
double dy = targetY - fromY;
double dz = targetZ - fromZ;
double dis = sqrt(dx*dx+dy*dy+dz*dz);
double vectorX = dx/dis; //cos(atan2(dy, dx));
double vectorY = dy/dis; //sin(atan2(dy, dx));
double vectorZ = dz/dis;
vectorX = vectorX * speed;
vectorY = vectorY * speed;
vectorY = vectorZ * speed;
>>979のサンプル参考にするならこうじゃない?
確実に追撃する凶悪ホーミングになりそうだけど
質問です
データのロード中にプログレスバー的なものやアニメーションを表示させたいのですが
どのようにしたらよいでしょうか?
参考になるようなサイトとかないでしょうか?
C言語+DXライブラリを使用しています
スレッド分けたら?
>>989 ロードに何十秒もかかるような、大規模なゲームを作るわけじゃないと仮定して。
毎フレームにつき1つずつデータファイルを読み込んで、
そのフレームの描画タイミングで進捗具合を表示すれば、別に問題ないと思う。
デジャブー
994 :
989:2010/03/31(水) 22:01:27 ID:SSvnJ33T
ありがとうございます
スレッドっていうのがあるんですね
ちょっと調べてみます
995 :
959:2010/03/31(水) 22:53:59 ID:mll2egdJ
なんとか解決・・・したと思うので一応報告を。句読点の前にルビ付きの文字列が前にあるような場合は
それごと次の行に送り出すようにしました。(ルビ付きの文字は分離禁止にしたいので)
ルビ付き文字列だけで1行占めているような場合(多分ないと思いますが)は永遠に次の行に送られ続けて
フリーズするかもしれませんが、その場合は諦めて改行するようにすれば良いでしょう。
>WindowsならWinAPIのGetCharABCWidths使って
>>960の考え方でがんばれば計算できるんじゃね?
自分で書いたものではないのですが、特定の文字列の幅を取得する処理は出来ていました。
(Windows上だけど、マルチプラットフォーム対応のためFreeType2使用)
>>994 DXライブラリはスレッドセーフじゃなかったはずなので注意な。
複数スレッドからDXライブラリの関数を呼ぶならロックが必要。
まだスレッドを知らないレベルなら、
>>991のやり方にしといたほうがいい気もするけど
YuukiNovel
1000 :
名前は開発中のものです。:2010/04/01(木) 23:56:16 ID:qRZRp6CX
1000げt
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。