Main Page

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/hyakuren-soft/www/diary/includes/dateLink.php on line 19

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/hyakuren-soft/www/diary/includes/dateLink.php on line 20


2009年 2月 2日 (月)  
今日は、冷蔵庫の豚肉の賞味期限がやばかったので、
朝から豚肉のショウガ焼きだった。

しょうがない。



qpilot という xpilot 風ゲームを作成中だが、自機の操作用のキー入力をシステムに
取り込むあたりまで動作。

ただ、右側のシフトキーと、リターンキーの同時押しが認識されなくて
大ショック...。

難しいね。
まぁ、気にせず開発しましょう。

とりあえず、ユニット描画と位置更新まで実装すれば
ゲームらしくなるはずなので、今後はそのあたりに取り組む予定。


2009年 2月 3日 (火)  
最近、少し風邪気味。



qpilot の実装を少しずつ行っている。

とりあえず、ユニットの描画と回転操作の反映までは実装した。
次は、画面の補助グリッド描画と、推力操作の実装を予定。


描画したユニットを回転させた図
(注、画面中央に△があるだけ)

しかし、私の脳内では、この画面で、複数のキャラが移動しているシーンが
妄想できてる。

想像力は、偉大だ。


2009年 2月 6日 (金)  
とりあえず qpilot のグリッドが描画できて、移動ができるようになった。
今のところ、快適に動作している。
(まぁ、直線と点を描画しているだけだし。)


グリッドは、画像を縮小したせいか、よく見えない...。

次は、マップ上の障害物となるブロックを配置するあたり。
まぁ、ゆっくりと進めましょう。


で、マップを描画してみた。



だいぶん、それらしくなってきた。
いい感じ。


2009年 2月 7日 ()  
今日は、qpilot の 噴射まわりを実装した。

噴射は、"攻撃力のない弾" という扱いで実装したので、次に実装する
弾の実装も、割とすぐに済むと信じたい。

でもまぁ、ゆっくりと♪


2009年 2月 8日 ()  
qpilot の Windows バイナリを作ろうとしている最中。
が、かなり面倒。

Luabind の最新版が Ubuntu パッケージになくて、

「ムキー!」

っていうのとは、また違った忍耐が必要だ。



っていうか、忍耐が足りないので、途中で作業を中断した。
ライブラリをコンパイルするためのツールをコンパイルしつつ、

「cmake とか、boost-jam とか最初に言い出したのは誰なのかしら?」

などと思ったりした。


2009年 2月 9日 (月)  
qpilot のソースコードが Windows(MinGW) 環境でコンパイルできたので、早速実行した。





「ムキー!」


しかも、O.K を押すと、このメッセージがもう1度表示される。
それを見て、


「『大事なことなので、2回言いました』 とか言いたいのか? この野郎!」


などと思った。

あとで調べたら、これは Linux でいう Segmentation Falt のことみたい。
数値でしゃべらずに、ちゃんと読めるメッセージを出力してほしいと思った。

Windows は、開発者に対しては、ツンツンしている気がします。



まぁ、Windows のエラー要因の心当たりはたくさんあって面倒なので、
Windows 環境の構築は、とりあえず中断。

Linux 環境に戻って、弾の発射まわりとか実装した。
弾と壁とのあたり判定処理がまだなので、弾が壁をすり抜けたりするが、
見た目はそれらしくなってきた。

いい感じ♪


噴射と通常弾が表示されている。

次は、あたり判定のあたりかな?
まぁ、ゆっくり作りましょう。

ムキー!


2009年 2月 10日 (火)  
風邪気味らしい、喉が痛い。



ありがたいことに、日記にコメントが来た!
スパムでないコメントは、久しぶりだ。
> マイクロソフトの開発環境を入れていると、ちゃんと開発者向けの言葉で
> エラーを出してくれます。今はフリーの Visual Studio も出ているので、
> ちゃんと入れましょう。
コメント、ありがとうございます。

まぁ、Visual Studio 2005 (以下、VS8) とか、Visual Studio 2008 Express Edition
とかも当然インストールしてますけど、今回は Luabind の動作確認リストに VS8 が
なかったので、とりあえず MinGW でやってみた次第なのです。

いずれ、機を見て VS8 用の各種ライブラリを用意して、ビルドしてみるつもりです。
多分、VS8 でも動くでしょうし。

今後とも、何かコメントがあれば、よろしくお願いします。

がんばります。(ゆっくりと)


2009年 2月 11日 (水)  
のどの痛みが収まらない。
飲み食いすると、のどが痛んでつらい。


2009年 2月 13日 (金)  
配布している「おぼえる、百人一首タイピング」に、

"し" を "shi" で入力すると落ちる!

という問題があったのを指摘してもらい、修正。
指摘してくれた Ikeji には、本当に感謝だ。ありがとう!



qpilot における、AI のための状態遷移を、どう実装するかを検討。
boost の FSM なども見てみたが、Lua での AI 記述との親和性が低そうだったので、断念。

難しいね。


2009年 2月 14日 ()  
「おぼえる、百人一首タイピング」の Web 版の実装を開始した。
まずは、Flex SDK の動作確認のあたり。

無事にサンプルをコンパイルし、一通りの機能を眺めたりした。

「これで、もう GUI コンポーネントを自作しなくていいんだ!」

と思うと、少し嬉しかった。
(今まではゲーム用にカスタマイズしたくて、SDL で自作してた。)

いい感じだ。



qpilot における状態遷移については、「ゲーム AI プログラミング」の実装を、
そのまま使うことにした。

Lua スクリプトを少し使うようになった今だと、紹介されていたスクリプトが、
よくできている、ような気がしてくる。

以前に本を読んだときは、

「Lua 使わずに、全部 C++ でやればいいじゃん」

などと考えていたのを思えば、考え方は少し変わったらしい。
C++ Only でもいいけど、再コンパイルしなくてよい仕組みだと、
開発環境の提供も不要にしたりできるしね。


2009年 2月 15日 ()  
最近、お腹が大きくなってきた気がする。



qpilot の作成で、固定砲台の AI を Lua スクリプトで記述してみた。
なかなか、いい感じだ。

AI 記述は、つくチャレ用のプログラムでも使いたい。


2009年 2月 16日 (月)  
固定砲台の AI 記述を Ruby でパースして、状態遷移図を生成するようにした。
もちろん、実装は現在の AI 記述のタグに対して決め打ち。

パースする Ruby スクリプト
http://svn.sourceforge.jp/view/statec/statec.rb?view=markup&root=qpilot

パース対象の Lua スクリプト
-- 固定砲台の AI
-- Satofumi KAMIMURA
-- $Id: artillery_ai.lua 168 2009-02-16 10:58:09Z satofumi $


-- !!! 属性値で個々に指定できるようにする。ArtilleryControl の関数にすればよい
local shot_threshold = 0.996


-- state: 最初の状態
Artillery_startup = {}

Artillery_startup["Enter"] =
   function(unit)
   end

Artillery_startup["Execute"] =
   function(unit)
      unit:stateMachine():changeState(Artillery_random)
   end

Artillery_startup["Exit"] =
   function(unit)
   end


-- state: まっすぐ弾を発射
Artillery_straight = {}

Artillery_straight["Enter"] =
   function(unit)
   end

Artillery_straight["Execute"] =
   function(unit)
      if math.random() > shot_threshold then
         local direction = unit:degree()
         unit:fire(direction)
      end
   end

Artillery_straight["Exit"] =
   function(unit)
   end


-- state: ランダム方向に弾を発射
Artillery_random = {}

Artillery_random["Enter"] =
   function(unit)
   end

Artillery_random["Execute"] =
   function(unit)

      if math.random() > shot_threshold then
         local direction = unit:degree() + (90.0 * (math.random() - 0.5))
         unit:fire(direction)
      end
   end

Artillery_random["Exit"] =
   function(unit)
   end


-- state: 目標位置に弾を発射
Artillery_aim = {}

Artillery_aim["Enter"] =
   function(unit)
   end

Artillery_aim["Execute"] =
   function(unit)
      if math.random() > shot_threshold then
         local target = unit:nearestEnemy()
         local direction = math.atan2(target.y, target.x) * 180.0 / math.pi
         unit:fire(direction)
      end
   end

Artillery_aim["Exit"] =
   function(unit)
   end


-- state: 目標の移動速度を考慮して弾を発射
Artillery_aim_careful = {}

Artillery_aim_careful["Enter"] =
   function(unit)
   end

Artillery_aim_careful["Execute"] =
   function(unit)

      -- 前回と今回のユニット位置から、速度を推定する
      -- !!!

      if math.random() > shot_threshold then
         -- 現在位置、速度、距離、弾速から、発射角度を導出する
         -- !!!
         -- !!! 仮実装
         local direction = unit:degree()
         unit:fire(direction)
      end
   end

Artillery_aim_careful["Exit"] =
   function(unit)
   end

処理結果の画像


状態遷移を画像にしてみたものの、
固定砲台の状態は各々独立しているだけなので、あまり面白くないかも。

実際のゲームでは「固定砲台に、どれかの状態を指定」という使い方をするので、
状態が独立でも問題ないんですけどね。

いずれ複雑な状態を記述したら、その状態を見て悦に浸ろうと思った。
そんな感じ♪


2009年 2月 17日 (火)  
今日は、何年ぶりかで、朝からお弁当を作る。

で、お弁当と同じメニューを朝食としても食べたが、味は微妙だった。
まずくはないが、なんというか、愛情が感じられない味だ。
プログラミングの片手間に作ったので、そういうものかもしれない。



qpilot が Windows の MinGW 環境で動作した。Visual Studio での動作はまだ。
で、自動生成された現在のチャートは、こんな感じ。



何を選択しても、戦闘サンプル(fightBasicSample)に状態を分岐させているのが、

「とりあえず作りました!」

を醸し出していて、いい感じだ。
まぁ、ゆっくりと作りましょう。

次は、弾と壁とのあたり判定の予定。


2009年 2月 18日 (水)  
私の使っている USB メモリが、生まれ変わった。



同僚に書いてもらったんだが、こういうセンスには心から尊敬する。
本人に口頭でそう言ったら、微妙な顔をしていたが。



qpilot で使うフォントを探していたが、結局 "M+ OUTLINE FONT"
IPA フォントの組合せにした。


"M+ OUTLINE FONT" と IPA フォントでの表示。

IPA フォント単体でもよいかと思ったが、SDL_ttf で描画すると、小文字の g の下が
表示されないので利用を断念。(p, q も下が表示されてない気がする。)


なぜか、g の下側が表示されない。

私の SDL_ttf の使い方が悪いのかもしれないが、とりあえず原因追求は保留。
システム全部を作り終わって暇になったら、原因追求するかも。

そんな感じ。


2009年 2月 25日 (水)  
私は、早く寝て早く起きるタイプ。
だが、午後 7:00 に寝て、午後 10:50 に起きるのは、さすがに早起きすぎだと思った。

少しプログラミングをしていたが、さすがに寝直した。
明日も会社あるしな!



qpilot の実装を、ちまちまと進め中。
メニュー画面の背景をゲーム画面と合成したら、なんかそれっぽくなった。


現在のメニュー画面。弾も動いてます。

いい感じだ。
次は、敵ユニットに弾が命中したときの仕様を書きだして、実装するあたり。

まぁ、ゆっくりと作りましょう。

あーー、最近は「つくばチャレンジ 2009」の準備してないなぁ...。


本人へのコメント送信



Main Page