Game Graphic Text Link Blog Index
2008/05/31

やはり、4コマ最後の1つが間に合わなかった。

ネタはあるけど、それを元にしているゲームの動作を一部変えようかと思っている。そうするとネタとゲームに本来生じないはずの差が出てくる。

そんなことを考えていたら、結局着手できず。考えることよりもやることを優先すべきなのだろう。

2008/05/30



2008/05/29

きらら杯の締め切りが刻一刻と近づいてきている。

面白いゲームも出てきている。やはり、コンテストの最後のほうで本命が出てくるのはどのコンテストも同じか。

落ちものゲーもそれにあわせてより受けが良いのにシフトすべきかもしれない。


2008/05/28



2008/05/27



予定している4コマのラフ。

今月の4コマは落ちものゲーの解説。おそらく3つ出来るけど、2つで打ち止めの可能性もある。

2008/05/26

落ちものゲームのAIテストをやっている際、思わぬ事態に直面した。

AIが強すぎる。まだ10回ほどしか走らせていないけど、ある程度強さをつかむことが出来た。もっとテスト結果が欲しいけど、1ゲームに平気で2、3時間かかるからそうもいかない。

100ライン以下が1回。
500ライン以下が2回。
1000ライン超が7回。

1000ラインを超えたあたりでプログラムが処理できずに不正動作モードに入ってしまう。

通常プレイをしていたら100ラインを消すことはまずありえない。200ラインを超えたら人間の反応速度を超えた世界に突入するし。

定期的に悪い選択を取得させてAIを弱めるのも手かもしれない。それともここはAIが処理できない高度なプレイで一気に勝負を決める何かを用意すべきか?

2008/05/25



コードギアスR2の天子を追加。

2008/05/24

落ちものゲーのAI続き。

左端にピースが行かない問題だけど、答えは思ったより呆気なかった。ピースそのものの左端が空の時が多い。だから何も無いピースの左端から調べてもピースは置けない。

ならばピースの判定をもっと左から始めたら良い。現在は-2に設定している。フィールド外のピースは自動的に除外されるし、左端にもピースが落ちるようになった。

これでAIは完成。次はグラフィックとサウンドに取り掛かる。

2008/05/23

落ちものゲーのAI遂に完成。

最初に組んだお馬鹿なAIでは50から90ラインを消した時点で負けるけど、このAIだと100ラインなんて余裕で超える。上限はどこら辺になるのか今度試してみよう。

最初に走らせたとき、9割がた上手くいった。しかし、なぜか左端にだけピースが入らないおかしな問題に直面した。下から上まで完璧に埋まっているのに、左端だけ空のためゲームオーバーになるといういと不思議な状態。

左端にピースを置くようにAIの設置優先度を弄っても駄目。どちらかというと左から2つ目に集中してしまった。

プログラムには問題が無いようだ。無論、何か問題があるのだけど、それが一見して分からない。そこで何回か走らせて見て、AIが何を考えているのか推し量ろうとしてみた。

回転を無しにして、素のままのピースで走らせてみた。ひっくり返ったT字だけなぜか左端に入っていった。

それを見て、なんとなく閃いた。

2008/05/22



コードギアスR2のリヴァル・カルデモンドを追加。

2008/05/21



作っているゲームのスクリーンショット。

見た目同じに見えると思うけど、実は右と左は全然違うコードで動いている。右が初期、左が後期。

ゲームの外枠を指定する際には主に二つのやり方がある。一つは右のように枠+1のフィールドを用意して、左右と下を特殊ピースで埋める方法。実際、ゲームのフィールドは10x20だけど、内部では12x21となっている。

この方法は枠外に行けなくしやすい、という非常に大きなメリットがある。しかし、内部処理が多少複雑化し、頭痛の種になりえる。

もう一つの方法は左のように枠そのものを用意し、枠外に行くかどうか調べてからピースを置くというもの。ゲームのフィールドも内部も10x20になっている。

この方法は一つ間違えると枠外にはみ出す(右端で切れたピースが左で出てくる)可能性があるけど、しっかり処理すれば大した問題ではない。しかし、特殊ピースがない分、内部処理が複雑化しない。

で、何故右から左のタイプに切り替えたかというと、AIの処理をやっている際、右側だとどうも余計なデータが行き過ぎていまいち結果がおかしいという問題に行き当たった。右から左のタイプに内部で切り替えてAIに送ればとか、右のデータ管理をもっとしっかりやっていればとか、色々思い当たる改善点はあるけど、変更してしまった今では後の祭り。

2008/05/20

久々にゲームプログラミングを本格的にやっていた。AI以外の基本的なゲームは出来ていたこともあり後はAIの搭載だけで完成させることも出来る。時間が許すならもう少し拘ってみたい。

前回書いたように全ての可能性を試すことには成功した。しかし、フィールドの状態から最適な場所を探すことには失敗した。

そこでとにかくもっとも下の穴に入るようにプログラムしてみた。予想外に大成功。ただ、どうしても機械的に判断して人間がやっているようには見えない。能力が低くても人間が裏でやっている風に見えたほうがプレイしているほうとしても楽しい。

2008/05/19

とうふコンの後始末をしていた。

一番時間がかかった作業がメールの送信。本当はphpで送信するメールを自動作成するのが良いのだけど、そうしなかった。

そのため3つの場所に散らばっていたデータを集めて、フォーマットをして、送る、という作業を12回繰り返す羽目になってしまった。

ほとんどはコピペだったから簡単だったけど、間違ったらどうしようという心配がかなりあった。実際、一回もう少しで違うコメントを送るところだったし。

次回はとにかくスクリプト化を優先してやっておこうと思う。

2008/05/18



コードギアスR2のシャーリー・フェネットを追加。

2008/05/17

コンテストの賞金のため、アマゾンのギフト券を買ってみた。

テストで1000円のを買ってみたけど、どうやら個人情報漏れは無いみたい。何はともあれ、これで安心して賞金を送れる。

2008/05/16



コードギアスR2のミレイ・アッシュフォードを追加。

2008/05/15

とあるコンテストに出すゲームのAIを組んでいた。詳しくはいえないけど、落ちものゲームと思ってくれたら良い。

最初に各コラムに点数をつけて、何処にピースを入れるか検討させてみたけど、ピースそのものの回転や他のコラムとの兼ね合いもあって、更に複雑な処理が必要と分かった。

どうやって複雑化させようかと考えていたら、一つ思いついた。全部の可能性を実行して、もっとも点数が良いのを選択すれば良いではないか。10コラム、4回転だと最多選択肢は40。これなら余裕で処理できる。


2008/05/14



コードギアスR2の篠崎咲世子を追加。

2008/05/13

投票も終わったことだし、とうふコンの集計作業を開始。

手動でやるよりスクリプトのほうが良いと思い、phpで製作開始。集計するだけなら簡単だった。

問題は2重投票や重複を自動で削る時に発生。人間なら目で見たらある程度見つけられるけど、プログラムではそういうのを発見するのが大変。

データを順に読み込んで、新しいデータの時は古いデータを一個一個順に照会して重複の有無を調べる。

今回だけなら手動でも出来る、ということで投げそうになったけど、次回があるからこそスクリプトを完成させたかった。

色々予想外な躓きもあったけど、なんとか動作するものが出来た。第2回のコンテストからは更に早い段階で結果を公開できるだろう。

2008/05/12

DDE最終章?

アプリがある程度完成して、依頼主にベータ版を送ったこともあり、少し余裕が出来た。完成には程遠いとはいえ、基礎機能周りが完成していると証明できたのは大きい。

予想通りパワーアップ依頼が色々来た。そこで久しぶりにフォルダを開けてみると面白いところに昔のDLLが入っていた。私がただ単に間違ったところに新しいDLLを入れていたのか?

ここら辺がVS2008でC#のプロジェクトを作るときの泣き所。補助フォルダ関連を全て作ってくれるのは助かるけど、手動で何か追加しようとすると物が多すぎて何処に何が行くのか分かりづらくなる。C++なれしていると特に厄介。

2008/05/11

とうふコンも明日で投票締め切り。

現時点では後もうちょっと良ければ、と言ったところ。初回にしては上出来ともいえる。

作品も集まったし、レビューも結構多く書かれたし、投票数もそこそこある。次にコンテストを主催するとしたら、どういう風にステップアップさせるかが腕の見せ所。

2008/05/10



コードギアスR2のヴィレッタ・ヌゥを追加。

2008/05/09

DDE関連のプログラミング遂に完成。

面白かったのが、DLLを作ってC#で使用が成功した後。DLLをアップデートしたら新しく追加した関数だけ動かなくなってしまった。

最初はchar*を使っているのがいけないのかと思ったけど、char*を使わない関数でもエラーが帰ってきた。

DLLを作り直しても変わらず。C++で同じDLLを使っているのに問題が無い。一体どうしたことだろう?

そこで一つ試してみた。C#のプロジェクトにあるDLLを削除してみた。そこでビルド。当然エラー。そしてそこで同じDLLを新しく追加してみた。ビルドしてみたら全ての問題が消滅してしまった。

VS2008で設定したDLLを実行ファイルの場所に常にコピーが動作していなかった模様。まさかこんな問題で苦しめられるとは。

完成したから良いか。

2008/05/08



コードギアスR2のヴィレッタ・ヌゥを追加。

2008/05/07

DDEに悩ませられる日々が続く。どうあってもC#と上手く連動できない。いよいよサーバーでも作って、と思い出した頃、一つ面白い案が浮かんだ。

XPまではDDEを使いやすくするためのDLLが入っていた。Vistaではそれがなくなっているとはいえ、私がそれと似たものをプログラムすることは出来る。

それならば、C++でDDEのDLLを書いて、C#から呼び出せばよいだけ。一番大きな問題だったメモリ関連の問題から開放されれば案外簡単に動くのでは?

C++でDLLを作るなんて簡単。サクッと作り終えた。フリーされていないメモリがあるみたいだけど、動作には支障なし。このままではリリース出来ないけど、まずはC#で動くか試すのが先。

2008/05/06



コードギアスR2のニーナ・アインシュタインを追加。

2008/05/05

DDEをC#で使う方法を考えて悪戦苦闘。

アプリケーションとインターフェースするまでは上手く行っている模様。問題はその次。データ転送を催促するコマンドに返事が来ない。

C++ではここでちゃんと返事が来て、少ししたらデータが転送されてくる。

いかなる返事も来ないということは送っているデータに不備があると思わざるを得ない。

どうしても理由が分からなければ、DDEのデータ送信をするダミーアプリを作って、クライアントがどんな情報を送っているか出力させるのも手かもしれない。


2008/05/04



コードギアスR2のカレンを追加。

2008/05/03

とある理由により、現在DDEを使用するアプリケーションを作っている。せっかくだからC#を使って作ろうと思い、基本的な骨組みを用意した。

さて、DDEを使おうと思ったら、C#では直接扱えないということが分かった。

それならばDLLを読み込んでと思ったら、VistaにはそのDLLのダミーしかなく、使えないことが分かった。

最後の手段としてC++をC#に変換して使おうと思ったら、可能だけど難しいということが分かった。手があるだけマシ、ということでこのルートで製作開始。

まずはDDEをC++で動作確認しようと思ったら、参考になるソースコードが無いのが分かった。ネットで検索しても90年代初頭のサンプルしかなかった。

しかし、Petzoldの本にサンプルがあると分かった。そこでProgramming for Windows 95の本を取り出して、製作開始。まさかこの本がこんなところで役に立つとは!

Petzoldのコードがあれば後は楽勝と思ったら、スパゲッティー呼ばわりしたらスパゲッティーに失礼になるようなとんでもコードだった。この本のアップデートであるWindows 98からはこの部分が削除されているのも頷ける。

一ラインずつ空のプロジェクトに書き直して、動作確認をしたら、完璧に動くものが出来た。Petzoldのコードの2割も使ってないけど、動作そのものは完璧。

後はこれをベースにC#版を書くだけ。簡単には行きそうにない。

2008/05/02



コードギアスR2の黎星刻を追加。

2008/05/01

毎度おなじみの月初め反省会。

先月の目標と結果

目標結果
ドット絵1010
落書き
ゲームコンテスト準備準備完了


先月はゲームコンテスト開催のために悪戦苦闘の毎日だった。そのせいで更新が少し遅れてしまった。特に4月最後の週が半端なく遅れてしまった。裏でネタを用意していたからよかったものの、無ければどうなっていたか。

ドット絵のコードギアスは問題なく出来た。

漫画は3つのうち2つ出来たから先月はよしとしよう。

今月の目標

1.ドット絵10枚。
2.落書き3枚。
3.コンテスト無事終了。

今月のドット絵はコードギアス。公式サイトを見るとかなり登場人物の数が多い。アニメ終了前に終わるだろうか?

落書きの方は4コマ漫画。今月は建物を始めとした無機質なものの質感に注意して書いてみたい。

コンテストは今日からだから開催を目標にするのもおかしい感じがする。そこで無事終了させることを目標に定めることにした。応募してくれた人と投票してくれた人のためにも上手くことを運ばせたい。


意見や拍手があればよろしく!

201210
201208
201206
201205
201204
201203
201202
201201
201112
201012
201011
201010
201009
201008
201007
201006
201005
201004
201003
201002
201001
200912
200911
200910
200909
200908
200907
200906
200905
200904
200903
200902
200901
200812
200811
200810
200809
200808
200807
200806
200805
200804
200803
200802
200801
200712
200711
200710
200709
200708
200707
200706
200705
200704
200703
200702
200701
200612
200611
200610
200609
200608
200607
200606
200605
200604
200603
200602
200601
200512