「プログラミング」に関する日記(26)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

スライムが10匹

auto_resourceができたのでそれ前提で作る予定のスクリプト作成も始められそうです。
木構造を作ったら後は実行すれば終わりですが、同じスクリプトをいろんな場所で使いまわす場合、実行するごとに結果の変わらない木構造を何度も使用するごとに毎回解析するのはばかばかしいので、実行環境(要するにスクリプト内で使われる変数の情報など)だけを個別に用意して木構造は既に解析済みのものを使いまわそうという魂胆です。
まあ要するに、スライムが10匹現れた場合行動パターンはみんな同じだからHPとかのパラメータだけ個別に持たせておいて行動パターンは一つで充分でしょって話です。

こんな木作ってどうする

今日は変換トレーニングウィザードを久々に使ってみました。
文字エンコードの問題からかかなり文字化けして登録されていたものもありましたがまたかなりの数が登録されたようです。
相変わらず変な単語も登録されてますが。

で、スクリプトの字句解析のページが完成しましたよ。
字句解析の構文解析との差異とか、実際の字句解析の方法とかを書いてます。
この調子だと次の更新までにはC++での具体的な作り方の議論にまで到達できそうな感じです。

美文の愛した数式

ふにゃさんの攻略ページを更新しまくりました。
13~16面のページを用意し、うち15面を完成させました。
後残りは3つだけです。

スクリプトの続きを昨日の勢いがあるうちに書いてます。
インタープリタを作る前にまだ一つやり残したことがありましたよ。
字句解析の方法をまだ論じていなかったではないですか。
それが終わったらそれらの実装方法を書いて、そこではじめて「簡単な数式のインタープリタ」が作れるわけです。
最近は少し更新ペースを速めているのですがそれでも一回に一箇所の更新では先が思いやられます。
ActiveBasicでゲームを作る企画のときみたいに一回に数箇所一気に更新してしまうぐらいの勢いが無いと少しつらいかもしれません。
一応年内に完結させるつもりではいますので。

体育の次の日

うん、今日が体育の日だと思ってましたが昨日だったんですね。
昨日朝気付きました。

プログラミングコーナーは無事更新できました。
今度こそはインタープリタを作れそうです。
今日書いたあの方法をプログラムとして書くことさえできれば…。
まあ、たぶん来週の更新分を書き始めればそのうち思いつくでしょう。
一応今も漠然と方法が浮かんではいるのですが、それと具体的なコードとは大きな隔たりがありますからね。

パソコン掃除

今日はパソコン周りの掃除とパソコンの配置換えをしました。
パソコン周りは普段掃除が行き届かないため凄まじい量の埃でした。
特に本体の見えない部分にあった吸気口にあった埃が酷く、熱暴走で落ちたことがあるのもこのせいかと思いました。
そしてパソコンの配置換えです。
最近周辺機器の位置関係がすごく悪くメンテナンスしにくいと感じていたのでこの機械に配置換えを、じゃなくて、本当は逆に配置換えをしようと思ったらあまりに汚くて掃除をし始めただけだったんですが。
そして配置換えの結果、本体やキーボードなどの位置関係を見直すことで埃がたまりにくく清潔に、配線を背面から側面に移動してメンテナンス性向上、配線の関係上使えなかった引き出しを有効活用しスペースの無駄を削減、かなり使いやすくなったはずです。
そしてついでにパソコン本体も分解して中を見てみました。
内部は外から見るほどは埃まみれではなく、やはり排熱問題は埃による吸気口の機能低下が原因だったようでした。

で、今はプログラミングコーナーのスクリプトのページを書いてます。
どうにも簡単なインタープリタを作るのにすらまだ早く、もう少し基礎固めが必要だったようです。
木構造を作るのに意外と難儀してます。
でも何とかできそうな見通しは立ってきたので明日あたりにでも更新しておきたいところです。

字句解析

んで、更新しちゃいましたよ。
スクリプトのところ。
これで構文解析と字句解析ができたので一度小手調べに簡単な数式を解釈するインタープリタを作ろうともくろんでいます。
まあ、それなりに時間はかかりそうなので、途中に他の更新をはさむかもしれませんが。

メモちらしの自動調整の計算、どうもおかしいと思っていたら最初に考えた式が間違っていました。
もっとも、その間違いを直したからといって式が特別簡単になるということはなさそうなのですが。

真に本気なのさ

スクリプト作成講座の記事を書いています。
結構自分でも理解してなくてしどろもどろですが、書いているうちになんとなくわかってきたような気がするので明日ぐらいにはアップできそうな気がします。

Bomber丸Worldのトップページのランダムメッセージを実はこの前こっそりJavaScriptからPHPに入れ替えていたんですが、そのせいでindex.htmlを解析してダウンロードページを自動生成するプログラムに通らなくなってしまっていたので、自動生成プログラムのほうをPHPに対応させておきました。
そして、昨日のバトル2の更なるアレンジ曲を今日作っていました。
テンポを一定にすると結構変わるものですね。
一応このアレンジは大ボス用のアレンジであり、バトル2はザコ・中ボス用です。

1159627509.mid

月狐うどん

スーパーでうどんと油揚げを買ってきて家にある卵とあわせて月狐うどんにしてみました。
なんか適当に思いつくままあわせてみたにしては意外とおいしいもんでした。
これでレバニラ炒めもあればいうことなしだったのに。

スクリプト作成のページを1ヶ月ぶりに更新しました。
ここの説明は少し難儀しそうだったので延ばし延ばしになってしまっていましたがこれは来年までにはある程度まで作っておきたい部分なので取り急ぎ作ってみました。

ツールのこと

DirectMusicで現在のボリュームなどを得るためにはボリュームチェンジのMIDIメッセージを横取りしてその値を漏らさず見ておけば現在のボリュームは把握できるというわけです。
IDirectMusicToolを使えばそれができるらしいので現在調査中です。
他にも通知イベントを使えばやりたいことが色々できそうな気がしてます。

Bomber丸WorldのページのCBWWindowのページを更新しました。
今日BGMシステムを作ろうと思ってBGM用のウィンドウ作ろうと思ったらCBWWindowの仕様を忘れてしまっていて、取り急ぎ作ったものです。
結局これに時間とられてBGMシステムできなかったんですがね。

実時間のこと

なんとかうまくいきました。
MusicTimeを0にしていたのがまずかったようです。
RefTimeを0にすることで即座にメッセージ送信。
ついでに言えばPチャンネルを設定しておけばMIDIメッセージ側でのチャンネルの設定は不要になるみたいです。

コントロールすること

う~む、DirectMusic、コントロールチェンジを送るのが全然うまくいきません。
そもそもPチャンネルというのが曲者で、そしてトラックやらなにやらもSMFとは違っていて、もう何がなんだかわかりません。

そういえばうぃーの値段出ましたねー。
25000円ですってねー。
高いですねー。
まず本体で25000円。
コストパフォーマンスはともかく決して安い買い物ではありません。
やっぱみんなで遊びたいよね。ということでコントローラを4つそろえるためにリモコン&ヌンチャク3800+1800=5600円が追加3つで16800円。
昔のゲームも遊びたいよね。5000ポイント分のプリペイドカード+クラシックコントローラ5000円。
やっぱりクラシックコントローラも4人分集めるために1800*3=5400円。
はじめてのWii買うとリモコン1個つくので実質4800-3811=1000円。
大作の一つぐらいはもっておきたいのでゼルダ6800円。
合計すると、25000+16800+5000+5400+1000+6800=61000円。
プレ捨て3に匹敵しますがな。

そうそう、ボンバーマンの裏技のコンテンツを半分ほど書きました。
他にもいろんなステージのゴール出現条件なんかを書いてました。

ループすること

で、実際やってみました。
とりあえずループの設定だけ。
これは特別難しいことではなかったので、変数名を逆にして全然動かなくなったこと以外はスムーズに進みました。
Bomber丸Worldへの応用も結構すんなりいけるかな…?

できること

DirectMusicで何ができるのかを確認していました。
1.全てのMIDIメッセージを送ることができる
2.ソフトシンセは鳴らない音が多い
3.ボリュームやパンなどのコントロールチェンジによるパラメータは取得できない
4.マスターxxx系は反応が遅い
5.転調ができる
まあ、色々と面倒ですな。
前にサンプル代わりにアップしたDirectMusicとMFCの練習プログラムを改造して色々試しています。

白紙撤回を白紙撤回

2006/06/18(Sun)の日記で書いたことですが、白紙撤回したことをまた白紙撤回しようと思います。
つまり、今日の日記の内容は、その日の日記の、「しかし、です。」より前と同文です。

そうそう、プログラミングコーナーのDirectX7のコーナーも更新しようと考えてます。
いちいちヘルプ立ち上げるのが面倒なんで自分のサイトに必要なことが書いてあればやりやすいんですな。
いっそのことプログラミングコーナー全体をそういうものに変更しちゃおうかしらと考えている今日この頃。

カレントディレクトリ

キャラボックス3の改良をしています。
今まで隠し機能だった任意のファイルを利用できる機能が、いい加減不便になってきたのでファイルダイアログを使って普通に使えるようにしました。
これのおかげでカレントディレクトリの問題がなにやら出てきましたが、ダイアログ使用前にカレントディレクトリを取得しておいて、使用後に元に戻すようにしたら直りました。
他には保存せずに終了とか、画像のディレクトリ変更とかにも対応させてみたいです。

関係ないことですけど、ソースを公開しても問題なさそうな作品に関してはソース公開をしてみようかなと思ったりしてます。
オンラインランキングに対応してるものはセキュリティの関係上公開しないけど。

BNF

スクリプトのコーナーの続き書いてます。
いや、でも、説明難しいよ。
BNF記法の話なんですけどね。
そうそう、lexとかyaccは使わないと思います。
C++を使っている以上、Cは……ね。

ゴキムカデ

うむ、はい。更新しました。スクリプト講座。今度はBNFでも書こうと思ってますよ。

今日はマリオパーティで999コイン集めるのに成功しましたよ。
とにかく一人に都合が良くなるようにみんなを操作して、コイン一点集中です。
チャンスタイムは最大のチャンスです。

今日はなんだかゴキムカデを描きました。
ゴキブリをムカデを合体させたものです。
お絵描き掲示板に描いたので見たい方はそちらへどうぞ。

ウィンドウシステム

Bomber丸Worldのウィンドウシステムを作り始めました。
しかし、システムの詳細ページにあるあの状態でもまだ全然具体的に書いてるわけじゃないので、つまり、もっと具体的に色々決めないと作れなさそうです。

そうそう、プログラミングコーナーのスクリプト言語を作る企画のほうも進めてます。
とはいえまだこちらも準備段階。
プログラムは一行も書かず、予備知識ばっかり書いてます。

ルア

う~む、組み込みに特化したプログラミング言語Luaなるものがあるらしいです。
まあ、確かになかなか性能は素晴らしいものがあるのですが、やはりBomber丸Worldに組み込むには狙っている方向性が違っていて組み込めそうにありませんでした。
もっとも、プログラミングコーナーで作り始めてしまった以上どちらにしても後戻りはできなかったんですけどね。
ゲーム本体側からスクリプトの中の特定の機能を気軽に呼び出すというのはLuaでは結構面倒な手順を踏まないといけないんですよ。
スクリプトの実行中にスクリプトの内容そのものを書き換えることもできなさそうだったし。

アキヤメの舞台設定などを復活させました。
前はあまりにも多すぎるキャラデータをHTMLに変換する労力に耐え切れず閉鎖してしまったのですが、簡易的にテキストをHTMLに変換するプログラムを組んでどんどんキャラを出していくことにしました。

じゅうまんてん!

プログラミングコーナーのスクリプト作りのページを更新しました。
しかしまだ実際のプログラムのコードは一行たりとも書いてはいません。
やはりほかのミディビやふわふわふにゃの時のようにまずは何か書いてみて、それからはじめましょうというわけにはいかないのです。
とりあえず、後2~3回こんな調子で内容を固めていって、それから作り始めることにします。

ロープdeるーぷ+、10万点超えました。
以前にも書いた短く繋げる戦略で序盤レベルをどんどん上げつつ魚を捕獲し、消せないロープが増えてきたところで魚を使ってとにかく繋げるところをどんどん繋げる戦略に転換。
一匹一匹はまるで役に立たない魚ですが、数匹程度一度に使うとかなり効果が出るみたいです。
また、直線型の紐のように都合の悪い紐が出てきたときに次にスキップするのにも使えて、むしろピンチじゃないときにはこのスキップの費用として使うことが多いです。
今日の画像はゲームオーバー寸前のゲーム画面。
最終到達レベルの記録のために残してみました。

1154693248.png

<前 次>