日記(1007)

<前 次>

文字列リスト

ナマライザの解析処理部を改良しました。
以前のだと複数のファイルを読み込むと一つ読み込むたびに解析を行っていたのですが、今回で全てのファイルを読み終わった後に解析を行いようにしたのでたぶん回数分だけ軽くなっています。
ついでに、ステータス表示に現在の読み込み状況を表示していたのですが、その表示そのものを受け持つ部分と表示される文字列を作る部分とを分け、ステータス作成部分では現在の状態のリスト(通常は0~1項目)をStringArrayクラスにつんで一番新しいものだけを表示させるようにしました。

それに伴ってStringArrayクラスも改良しました。
戻り値の一部がVariant型になっていたりしたのを修正して、新しいメソッドDeleteValueを追加しています。
DeleteValueでは指定した値を持つ要素を全部消去してその分を詰めます。

ふにゃさんのBGMをループできるようにしました。
設定項目を増やしてそれを認識してループフラグを操作するだけだったのですが、設定プログラムのほうでyaneLineParserと同じはずのクラスで読み取りポインタが増加しないバグがあったので正しく読み取れない事態が発生していました。
もちろん即行で原因を見つけて直しておきましたが。
標準BGMのほうはどうしようかなぁ。
敵が周りにいて変化、というのは難しいかもしれないし重いかもしれないし。
ふにゃ本人の状態だけで変化させるんなら簡単で軽いはずなんですよ。
例えば眠ったときに静かな曲調にするとか…。

メテオスのスタッフロールにあった楽譜、あれオープニングの一部なんですね。
MIDIに打ち込んで気付きました。

分離型

プログラミングコーナー更新ですよ!
はっきり言って思いつきでふと更新しました。
しかし変数に符号付きデータを使っているということを忘れていてソート結果をバイナリエディタで開いて0付近から始まっていなくてかなりあせてしまいました。
しかも、ActiveBasicはファイルの読み書きが弱く、バイナリファイルをまともに読むにはAPIに頼らねばならなくて、面倒だったのでVBで読み込んで「data[0]=… data[1]=… …」というようなプログラムで直接変数にデータを代入するファイルを作って、ABだけファイル読み込みはせずに済ませてしまいました。
純粋にアルゴリズムだけの速度を比較したいということのほかにこういうこともあったんですよね、ファイル読み込みの時間を考慮しなかったこと。

Bomber丸Worldの敵のシステム、基底クラスにキャラクラス、そこから派生して敵キャラクラス、更に派生して個別の敵のクラス、という構造にしたいのですが、それを全部いちいちプログラムに埋め込んでいたら実行ファイルのサイズが、使用メモリが、起動時間が、えらいことになってしまいます。
そこで考えたのが、敵キャラクラス一つにつき一つのDLLに埋め込んで、敵キャラをDLLで提供するという方法。
こうすれば本体をコンパイルしなおさなくても敵を追加できますし、動作が独立になることで保守もしやすそうに思えます。
しかしこれには問題があって、例えばDLLを見れば一気にネタバレしてしまったり、ファイルを削除すれば敵が出なくなったり、そのあたりは適当に考えて隠したり存在チェックをすれば済む話なのですが、もっと問題なのは、DLLの実装方法です。
基本的に同じ基底クラスを本体とDLLで共有して、DLL側で派生クラスとして実体を提供するという形になるのですが、途中で基底クラスの実装を変更してしまうとDLL全部をコンパイルしなおさなくてはならなくなり、かえって保守が難しくなってしまうのです。
だから先にインターフェイスを決めてしまい、後はずっと同じものを使うのですが、この問題があるということは、もっと別の問題も考慮しなくてはならなくなります。
それはDLLの敵からゲーム本体にアクセスする方法です。
このゲームでは他のキャラクターを使って行動したり、ゲーム内の変数を利用したり、高度なグラフィック処理をする可能性があるので、ゲーム本体のクラスなどに比較的自由にアクセスできることが必要なのです。
う~ん…難しそうだ。

ブーストに大失敗!!

どうもここのところサーバーで用意してもらっているアクセス解析が不調で、何度も見に行っていたら、いつの間にやら空き容量が3桁になっていました。
本来利用できる容量は100MBなので3桁もあるはずはなかったのですが、確認してみるとさりげなく250MBに増えていました。
最近色んなのに手を出して使用領域が増えてきていたため少しファイルサイズをケチろうかと考えていたのですが、この容量増加はつまり、ケチらずガンガン使えという意味だったのでしょうか。
そうと分かれば気兼ねなくどんどん使うぞ!!
といいたいところなのですが、無駄にファイルサイズを大きくしてしまうと閲覧者側の負担に繋がるのでファイルサイズ増加は目指さないことにして、逆にファイルサイズ削減のためにクオリティを落とすことはしないようにしたいと思います。
やっぱりファイルサイズ制限がなくなったことで充実させられるといえばダウンロードコーナーのソフト紹介ページとか、プログラミングコーナーのサンプルとかでしょうね~。

久しぶりにナマライザの開発をやっていて、ログの分解に正規表現を使えないかと思って探していたら、Boost Regex++なんてC++用のライブラリを見つけて、インストールしようとしたのですが、ライブラリをソースからビルドしていたらあまりに時間がかかっておかしいと思いビルド状況を見てみると、いくつものファイルをビルドしていて、その全てで100以上のエラーが出ていたので、仕方なくビルドを中断して、それにかわるライブラリといえば、有料のVB用DLLがあるぐらいで他はよく確認はしていないのですがVBでは直接的にも間接的にも使えそうになかったので、正規表現はいったん諦めて簡易アクセス解析と同様にVBのSplit関数で分解して後でそれを加工する方式をとることにしました。
それ以外では、一応各種情報のための情報を用意したりしたのですが、どうもそれらは一気に全部取得したほうが速そうなので、まとめて取得する方式にしたら変数の数を半分近くにまで減らせそうです。

バイポーラトランジスタ

今日はSPICEを使って電子回路シミュレーションの実験をしていたのですが、出てきた結果がどう考えてもおかしいんですよ。
わずかなベース電流を引き金としてコレクタに大電流が流れるはずのバイポーラトランジスタの回路だったのですが、コレクタ電流がほぼベース電流で一定だったんですよ。
これで一日中わけがわからなくて試行錯誤していたのですが、試行じゃなくて思考してみるとだんだん分かってきました。
ベース電流がそのまま流れてコレクタ電流が遮断されるというのは、つまり、バイポーラトランジスタが一つのトランジスタとしてではなく二つのダイオードとして働いたということなのです。多分。
で、ベース電流を逆にして考えてみると増幅効果が出るはずなのです。
考えてもみればSPICEで入力するのは+側→-側の順であり、電圧源であれば+から出て-へ電流が流れるのですが、電流源だと+から-へ電流が流れるので電流の向きが逆になるんですよ。恐らく。
おかげで電流を逆にすることにより正しい結果を得ることができました。

ペナルティ!

ふにゃさんステージエディタにゲームオーバー時のペナルティの設定項目をつけました。
ペナルティというのは1でもあったように、ゲームオーバーのときコンティニューしてやり直すために消費されるバナナの数で、今回はステージファイルごとに決められたりします。
今回は1のような1ステージバナナ5個の制限がないので、標準ペナルティは100です。
1のときの10はやさしすぎました。
コンティニューしたくない、だけどどうしてもコンティニューしなくてはクリアできない、そんなときの最後の手段にしたかったのです。
ただ、任意に変えられるようにすると0にしたり何万にもしたりする人が現れそうなので、一応制限をつけて、10~999の間にしています。
そうそう、設定項目の値に制限をつける機能もちゃんと今回つけてます。
しかし、実は困ったことに、ゲーム本体のほうではペナルティはおろか、ペナルティに使うバナナの数の保存すらできていないのです。
急がねば。

レゴで6835のUFOをLDrawに入れてから、本体をばらして箱の裏にあった組み換えバージョンを一個だけ作ってみました。
本当は3つあったのですが1つしか再現できませんでした。
あと、昔作っていたオリジナルの海洋警備隊本部兼自宅も再現してみました。
なんだかところどころ微妙に違ってたり一番大切な浮き輪マークの部品が見つからなかったりしているのですが、近いうちには完成しそうです。

最後の一人

今日は爆ボンのページ二箇所更新しました。
レッドマウンテンのボス、スプリガン。
採掘ロボです。ハッチが開いた上体でマグマの中から出てくるあたり、ハウトの高温への強さが伺えます。
ホワイトアイスのボス、リッパー。
蜘蛛です。子供は使い捨てという鬼のような母です。

ふにゃさん、今度は残り人数の表示を作りました。
今更?と思われるかもしれませんが、実際遅いです。
今までずっと見えないのが不便で不便で仕方なかったのですが、残り人数が1になったとき後がないことを明確にしつつナビゲーションバーのデザインが崩れないようにするための方法がなかなか思いつかなくて先送り先送りになってしまいました。
で、結局実装した方法というのは、残り人数を"x"+3桁で表示し、残り一人のときは"LAST"、ゲームオーバーのときは"OOPS"とすることで文字数を一定にすることにしました。
最新の画像でもアップしようとも思ったのですが今一「新しい!」って思えるものがなかったのでやめておきました。

放置プレイ

バンジョーとカズーイの大冒険を結局ゴビには関わらずにクリアしてしまいました。
ラクダのゴビが関わるのはジグソーピース3つとハニカム1個。
そのうちゴビをいじめないのはジグソー1個のみ。
これを手に入れておけばゴビをいじめずに完璧クリアができるはずだったのですが、一応全然関わらないようにして、ジグソー97個でグランチルダ戦に挑みます。
グランチルダに挑むために必要最低限のジグソーは94個なのですが、98個集めてゆくと体力が2倍になるため非常に楽な戦いになるのですが、ゴビがいろんなところに現れるおかげで1個足りません。
もっともグランチルダの攻撃なんて見切れて当然なので体力が半分以下でも別に問題ないのですが、さすがに一度は負けました。
最終段階までは追い詰めたんですけどね。
そしてクリア。エンディングでたった一度だけ敵キャラ紹介が出るのでそれを全部記録してやろうとメモを用意して意気込んでいたのですが見事玉砕。
ほとんどのキャラはメモし損ねてしまいました。

ふにゃさんのエディタのステージ全般設定を改革しました。
今までのは拡張するたびにあらゆる場所に散らばった変数・コントロール群を全部変更しなくてはいけなくて、見た目も悪かったのですが、今度で全般設定は一箇所で管理しているものをそれぞれの場所で得て使い、見た目は、項目名と値をリストにして表示しておき、ダブルクリックで変更するようにしたため、非常に使い勝手がよくなっています。
文字列の項目はデフォルト値の設定が効かなくて困ったものなのですが直そうと思えば直せますし、変える必要も別にないので必要なときが車では放置プレイでいきましょう。
さりげなく残り人数の設定項目も増やしたりしました。

<前 次>