■ [Program]: Robocode Rumble-JP
そろそろなんで、宣伝をしようと思いました。 Robocode っていうゲームがあります。 どんなゲームかっていうと、画面の中で一定のルール下で戦う ロボットのプログラムを書いて誰が強いかと競うっていうゲームで、 カルネージハート を知ってる方は、 アレのハード設計をなくして、ソフトを Java で書くものだと 思って頂ければ、まあそんなに間違いはありません。
で… いろいろあって、 とりあえず ジャパンカップ の追検証みたいなのを行い、 その後でまた大きな大会でもやりたいね、って話になっています。
で、Java, Tomcat, Struts, Axis, MySQL, EJB など 眩暈がするほど、流行っぽい技術が 使われた システムも、 私はたいしたこともしてませんが、 結構なクオリティになってきてまして、 とりあえずそろそろ追検証の方をやれそうになっています。
まあ、興味のある方はご注目の程を。 とりあえず、 システム以外 ML やら、 開発者 ML やら フォーラム やら。 今から強いロボットを作っておけばリナザウもらえるかもしれませんぜ。
そうそう、 SourceForge.jp でここしばらく活発なプロジェクト一位だった… と思ったら二位になってるや。
弾幕7個追加。 おたくツーさんから4弾幕、 大原さん から頂いたのが3弾幕です。 ありがとうございました。
前回混入したバグをフィックス。 あと大往生スキンのバグフィックス版も頂きました。
あと、あまりにセレクトとかの画面の移動がめんどいんで、 ページアップとページダウンを追加しました。 キーボードの PageUp, PageDown、 ジョイスティックのボタン6 とボタン7 で OK です。 ちなみに私のジョイティックではこれが LR なのです。
弾幕12個追加。 大原さん から頂いたのが6弾幕、 紫月飴さんからが4弾幕、 おたくツーさんからが2弾幕です。 みなさんありがとうございました。
ちなみに今まで頂いた弾幕は他の弾幕に合わせて、 適当に難易度調整したり持続時間調整したりしてました。 これはスコトラとかやってた方がいたので、 まあ難易度をあまり変えたくなかったからです。 ですが、既に160個も弾幕があって個々のレベルは全然違いますし、 調整してる時間も無いし、適当にいじって元の弾幕の良さを 奪ってしまうのもアレですし、基本的にやめることにしました。 ABAさんが昔おっしゃっていた弾幕美術館の方向で。
一応調整は、レベル50が難しすぎない、レベル0は凄く簡単、 持続時間は30秒程度をめやすに、1分以内で。 などと調整してました。 合わせて頂ける嬉しいかもしれません。
スキン選択をコンフィグに追加。 おたくツーさんからは大往生スキンを頂いたため。 ただし多分バグ入り。 コンフィグで変更してすぐに始めると落ちるかも。 まあもう一回起動すれば多分大丈夫。 あと回避機関がとても弱体化します。
あと、改行コードが CRLF(Win), LF(Unix), CR(Mac) となんでも 良くなったような気がしますが、気のせいかも知れず。 最近本当に適当だな。
おたくツーさんの弾幕の作り方。 わかりやすいチュートリアルになってて良いです。
G-わんげ鳩大往生XII〜絆ダウン〜。 まあ最近微妙にこういうのが流行りなのか知らないんですが、 適当にみんなで集まって一つのゲームを作ろうっちゅう話です。 楽しげ。 で、最近弾幕のプロトタイプを BulletML で記述している方がいたりして、 やっぱりそういう用途には非常に良いなーと実感。 ところで、この弾幕勝手に使っちゃっても問題無いのかな。 許可もらいたいけど、方法が想像もつかない。
LuaBullet を作りたいなと思う今日この頃。 …と思ったら、 既出。
■ [Program]: gcc pch 前回の嘘。
Merge from pch branch、ではなく、 PCH merge completeや、 Merging PCH to mainlineに リンクをはるつもりでした。
■ [Program]: gcc pch
Merge from pch branch。 この嬉しいお知らせを発見したのはいつだったか忘れましたが、 忙しくてなかなか試してみれませんでした。 状況は良くはなってはいませんが、とりあえず試してみました。
もうメインブランチに入っちゃっているので普通に checkout、 ./configure, make, make install。 久しぶりだったからかなんか知らないけど、 コンパイルに多少手間取ったりしつつもインストールできました。
で、実験。なんでこれを選んだかは知りませんが、 cppll から持ってきたこのソースが対象。
2.96: g++ -c cppll.cc 0.88s user 0.04s system 100% cpu 0.915 total 3.4: g++ -c cppll.cc 2.68s user 0.22s system 77% cpu 3.728 total 3.4-pch: g++ stdafx.h 3.78s user 0.37s system 93% cpu 4.448 total 3.4-pch: g++ -c cppll.cc 0.43s user 0.06s system 101% cpu 0.483 total
2.96 なんて無いって話があるんですね。まあいいや。 pch 無しの 3.4 はなんでこんなに遅いのかなあ、 コンパイラ自体のコンパイル最適化が甘いのかと思います。 三つ目の結果は素晴しいですね。 ちなみに stdafx.h には
#include <iostream> #include <numeric> #include <vector> #include <functional>
と書いてあげました。 ところで stdafx ってなんだろう。 それもまあいいや。サイズは相変らず巨大。 gcc って zlib のソース持ってるんだからねえ。
-rw-r--r-- 1 i 8.4M 4月 21 00:33 stdafx.h.gch
前回 と比べて何が凄いって、落ちたりしない。 前回は boost とかはほとんどこけちゃっていた。 実用は近いって感じでしょうか。
実用っぽいをやってみる。 bpo。 どうやるべきなのか、よくわかってませんが、 とりあえず標準ライブラリを stdcpp.h に集め、 boost のものを boostall.h に集める。 うーん、pch が一番遅い…。 集めすぎってのも問題なのかな? ムダに include しすぎるわけだから…
2.96: make 165.99s user 5.73s system 93% cpu 3:03.42 total 3.4: make 218.56s user 5.21s system 95% cpu 3:53.78 total 3.4-pch: make 247.63s user 6.12s system 95% cpu 4:26.22 total
まあ、正しい運用法はこれから探っていこうと思います。 まだしばらくは ccache の お世話になりそうです。
とりあえず個々のヘッダごとにプリコンパイルしてベンチ、 ってのをタスクキューに放り込んでおこう…
あまりにひどいバグだけ修正。 大原さん ありがとうございます。すいませんでした。
大原さん に大改良施して頂きました。 随分まともなゲームになりました。
懺悔。 改良版を受け取ったのは 3月24日だったのにとても遅くなりました。
言い訳。 Winバイナリがなかなか作れなくてね…とか。 未だに Borland C++ で作ったやつは落ちるんで、 Mingw32 でコンパイル。つまりまだバグ入り。
次は白い弾幕くんを。手元に弾幕結構あるなあ…
mp3 の ID3v2 タグによって落ちちゃうバグを修正できたと思います。 まだテスト不足なんでなんとも言えんものがありますが。 あとは曲名あたりのとりあつかいがあやしかったのを修正。 同じ曲から同じ弾幕が作られるようにしました。 曲を攻略して下さい。
mp3 で落ちちゃうバグはいろんな方に報告して頂いて助かりました。 問題となる曲の例を紹介して頂いた、 紫月飴さんと、 問題を特定して頂いた 569=574氏に特に感謝。
しかし ime.nu が REFERER になっていると、 リンク元に貴重な情報があるかもしれん場合は、齒痒い。 どうにかしてくれんもんか。
smpeg に修正加えました。以下の diff を参照。 対象は MPEGsystem.cpp です。
138a139,149 > /* ID3v2 tag */ > if(pointer[0] == 'I' && pointer[1] == 'D' && pointer[2] == '3') { > Uint32 size = 0; > Uint32 i, p = 1; > for(i = 0; i < 4; i++) { > size += pointer[9-i] * p; > p *= 128; > } > pointer += size + 10; > } >
smpeg.dll を strip すると bpo.exe が実行できなくなりますが何故ですか。 よくわからんですが、これ以上 bpo にかかずってもいられないので、 とりあえず strip してません。 おかげでサーバの容量がいよいよピンチ。 このへんと ID3v2 タグ、MIDI のあたりは余裕ができたら ゆっくり調べてみようと思います。
bpo 雑記。
音に今一つ合わないのが悔しいです。 もうちょっと勉強した方が良さげです。 よく合うのは、ベースだのドラムだのがでかい曲や、 あと、歌はそれなりに良いみたいです。 速めの弾を多くしたとはいえ、結局弾が届くまでにラグがあるわけで、 今一つリズムに合わんというか。
で、Good Timing と Just Timing っつうボーナスを作りました。 知ってる曲なら音が大きめの音が鳴る時に合わせて 適当な方向を入れるとそれなりにボーナスが入ります。
グラフィック的には全て CPU で処理っつう、 時代の流れに完全に逆行したやりかたでやってます。 clear_screen.cc 書くのはとても楽しかったです。
最後の方に書いたものはだんだん適当になっていきましたが、 わりと納得のいくコードというか、 自分なりのコードの書き方が定着してきた感があります。
pimpl イディオムなんかのおかげであまり依存が無いかんじです。 あと spimpl っていうあやしげなイディオムをひねりだしてみました。 s は static もしくは singleton です。
最後の方に書いたのは UI とかスコア表示とかです。 こういうののプログラムは大嫌いです。
好き勝手に色んなライブラリをつまみ喰いしてます。 boost も欲しくなればすぐに使おうとしているのですが、 filesystem を使うとやたら容量がでかくなってしまって、 断念したのがちょっと残念でした。
それにしてもコンパイルに時間がかかりすぎます…
■ [Update]: Bullet Philharmonic Orchestra
音に合わせて弾が飛んでくる、
おたまの二番煎じみたいなの。
mp3, ogg, midi, mod, wav なんかから弾幕生成します。
Windows & SDL_mixer & MIDI で PostMix がヘンなのは ポリシーか仕様かバグか、なんなんだろう…
■ [Wheel]: http_filter_proxy.rb
みまごうことなき再生産品。 html を適当にフィルタリングしたいらしいです。 サンプルとして 2ちゃんねるの >> リンクをちょっと便利にしたり、 ttp リンクを補正したり。 ruby で書くと簡単だけどちょっと遅いなあ。
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。