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

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

<前 次>

案ずるより生むが安し(←字が違う)

そういえば基底クラスと派生クラスってコンストラクタとデストラクタが呼び出される順ってどうだったっけ。
と思ったので、早速実験用のプログラムを作ってみました。
基底クラスAとそれを継承した派生クラスBを用意し、それぞれのコンストラクタとデストラクタにメッセージを表示するコードを書いて実行時にクラスBを生成!
結果は、予想通りに「Aのコンストラクタ→Bのコンストラクタ→Bのデストラクタ→Aのデストラクタ」でした。
これまでは念のため基底クラスには初期化のコードを書かないようにしていたのですが、これからは心置きなくコンストラクタで初期化できます。
一応、ダウンロードできます。

3DはZバッファを部分のコードを写すところで面倒になって中断しました。
とりあえず今度からは「ふにゃさん」の制作のほうに取り掛かって、3Dは思い出したときにでも、ということにしておきます。

今日は一教科だけテストがありました。
最後の問題で、答を導き出す簡単な一次方程式まで作って、いざ解こうとした瞬間に、
「はいそれまでです」
・・・・

ブラックボックス

Direct3Dで直方体を表示するプログラムを作ってみました。
実際には例の本のサンプルほぼそのままですが、自分なりにアレンジしてみました。
ところが、どこがどう悪かったのか、真っ白に作ったはずの直方体は真っ黒に。
最初背景も真っ黒だったので描画できていないものを勘違いして焦ってしまいました。
アレンジしてあるので、新しい立体を追加するのが容易で、実行時には空間を自由に飛びまわることができます。
ただ、あまり飛び回っているとあっという間に自分の位置を見失ってしまって終了せざるを得なくなるんですが。
遭難する数秒前のカメラが残した写真をアップロードしてみました。

アンケートを追加しました。
いい加減「その他」にあるものをトップページに持っていきたくなったので今以上にトップページが重くなってもいいかどうかをきくためのアンケートです。

テスト

今日は学校でテストがありました。
しかし教科書を忘れてしまって復習ができず、悲惨な結果に・・・・
普段は必要以上に自信をもっているので本当に危ないと思います・・・・
化学のテストは、公式を使う部分はほぼ全滅です。
他の部分は例によって根拠もなく自信があるわけですが。

3Dの続きをやっていました。
とりあえず最初は四面体に挑戦してみようと思っています。
一応少しだけ拡張性を高く作るつもり。
練習程度に発展させられるようにしたいからです。

3Dプログラミング

自宅サーバーで使っている簡易スケジュールCGIで、スケジュールを書き込むときに過去の情報を消して軽量化するようにしました。
また、日本で使っているので9時間の時差を調整する処理も作ったので、昨日の内容が表示されるということもなくなりました。

Direct3Dを使ってのプログラミングを始めることにしました。
とりあえずは入門書に書いてあることをそのまま…とはいっても例によって当てにならない本で、おまけにインストールされているSDKは8のものということで、またまたいくつかの不具合が出てしまいました。
今回はほんとーーに右も左もわからない状態で始めたので、ソースはスパゲッティ状態(微妙に別の意味にも取れそう)かつ関数の意味を説明するコメントだらけになりそうです。
いいんです、練習用ですから。
で、3Dオブジェクトは、自作するのが面倒なので、フライングジャンプ3のウィリアム=パピヨット9世君を使うことにします。
いいんです、練習用ですから。

「ふにゃさん」のインプットクラスに、マウスに関する変数を作りました。
キーボード及びジョイスティック操作の時には無視されます。
また、マウス使用時も、方向キーの代わりに使っている間は無視されます。
それと、設定用のクラスも作りました。
「ふにゃふにゃ」のときの、設定ファイルの内容が正常値から少しでも逸脱すればすぐ初期化してしまって設定に拡張性がなかったということの反省を踏まえて、今回は設定バージョンというものを取り入れて、読み込みは完全な上位互換性を維持し、書き出すときは最新バージョンで記録します。
簡単に言うと、設定が追加されても後から正常に使えるということです。

「VisualBasic初心者連盟」が、2月中に閉鎖されてしまうようです。
掲示板のPRが寂しくなるなぁ…

DirectXについて

プログラミングのコーナーを更新しました。
DirectXで検索してやってくる人が意外と多かったので作ってみることにしました。
とはいえ私自身DirectXはあまり使えないので更新ペースはいつもよりさらに遅くなりますが。
また、DirectDrawは結構どこでもやっているので、DirectMusicやDirectPlayなどのどちらかというとマイナーなものを中心に紹介していきたいと思っています。

日記過去ログの5月分をアップしました。
JavaやらC#やらGBAなどにも手を出したりしています。
ついでにC#やらGBAなんかについては完成したら公開する予定なのでダウンロードページに名前だけでも載せておきました。
また、更新予定のページにも。

「ドラクエ7」をやっていました。
火山の奥に潜む魔物を倒したのですが、その魔物、灼熱の炎で焦がすとか何とか言いつつ実際に使えるのは火の息だし、今回の戦いに至っては火の息さえ使うまもなくあっさりやられちゃってました。
やっぱレベル上げすぎかな?

[削除]

プログラミングのページを微妙に改装中です。
まあ本当に微妙な変化で気付かないかもしれませんが。
今度の更新のときにでも反映させておきます。

個人的なリンク集(HTML形式のお気に入りのようなもの)を改良してみました。
インデックスページを生成する部分をひとつにまとめて内容をわかりやすくしました。

日記も微妙に変更。
やっぱり気が付かないと思います。

ドラクエ7、結局エミュレーターではできなくなりました。
やっぱ本物を使わないとだめですね。

エラーまみれの本

「DirectMusicPlayer」を作っていました。
MFCについては本に書いてあった通り+面罵自動表示からの類推でなかなかスムーズにできたのですが…
DirectXに関しては、あの本、立ち読みしていた頃よりもずっと、想像していたよりもずっと、突っ込みどころ満載の本でした。
「フムフム、IdirectMusicのdは小文字ね・・・」と本の内容を微塵も疑わず一字一句間違いがないように打ち込んでいくと・・・・
コンパイラに怒られました。
「IdirectMusicなんて知らん!」
「HandleFailure関数なんか誰が用意しとるかぁ!」
しかも読み込みたいのはスタンダードMIDIファイルだったので、いろいろとアレンジしなければならないことになってしまいました。
おかげでインクルードファイルやら他のDirectMusicを使ったプログラムやらを見ながら試行錯誤しながら作ったのでただ本の内容を写すだけというやり方よりはわかったような気がしますが。
本で大体の流れをつかんで試行錯誤しながら理解、といったところでしょうか。

ドラクエ7を買う金がなくなった。何故なら…

「入門DirectX7」という本を買いました。
テンポが変わる程度で素晴らしいとか言ってたり3D酔い必至の3Dプログラムを作ってみたり、いろいろと言いたいことはあるのですが、全体的に見ればDirectXについて総合的に全ての範囲をまあまあ使える程度にまでカバーしているのでいい本だと思いますよ。
さすがに半年も立ち読みばっかりなのは悪いので、それと立ち読みじゃどうしてもじっくりと読めないので買ってしまったのです。
本当はトゥーンレンダリングだかセルシェーディングだかのアニメ風3Dレンダリングの載っている本が欲しかったのですが、DirectDrawさえもろくに使えないのにこのような専門的(にみえる)な本は早いと思い、全体的に満遍なく扱っている本を選んだのです。

「MusicPlayer」シリーズのスクリーンショットを更新しました。
最初のページに全部起動した状態を縮小表示したもの、個々のスクリーンショットはリンク形式で原寸大のものを載せています。

通常の式(BASICの代入式)から逆ポーランド記法の式に変換するプログラムを作り始めました。
現在は変換作業に使うスタックとプッシュ・ポップ処理ができています。

「Tieth Laboratory」の「エアツェールング2」のテストプレイをしています。
なかなかいい感じ。

どこぞの共和国は関係なし

「MusicPlayer」シリーズのページを更新しました。
ファイルを全部(HTMLページだけは残していますが)、専用のディレクトリに移動して、ページを統合しました。
あと、「ByteEdit」のページも更新しました。
検索エンジンがオンラインヘルプの中に入ってしまうと困ったことになってしまうので、リンクをボタン形式にして検索ロボットには入れないようにしたのです。

逆ポーランド記法なるものを学びました。
A+BをAB+と表記する方法です。
これのすごいところは、「A*(B+C)」などの括弧を含む式を、比較的簡単なアルゴリズムで「ABC+*」といった全て左からのみの括弧のない計算式に変換できるところです。
今度のゲームで使えるかも・・・・

3Dはまだ先になりそうです

「YJライブラリ」、もう使いません。
どうしても動かないので他のサンプルをダウンロードして走らせたらOSごと落ちたのです。
MP3でもWMAでもガンガン再生できるとか、トゥーンシェーディングも余裕とかいう謳い文句、だったかは知りませんが、それを期待して使おうと思ったのに、コンパイルできないし、コンパイル成功してもよく落ちるというのでは、とても使い物にはなりません。
ふぅ、トゥーンレンダリングで3Dの「ふにゃ」でも作ってみようかと思ったのですが、ここは一旦諦めて、自力で3Dの技術を身につけるしかなさそうです。

せっかく「キャラボックス」にいろいろデータを追加したのに、このせいで全部パァ。
これを機会に、データバックアップ(定期的にセーブ)機能を付けました。

今日は第1時限が休みでした。
そのことを昨日「忘れないでおこう」と心に留めておいたのですが、「忘れないでおこう」と思っていたことさえ忘れ、今日早起きをして誰もいない教室に行きました。
1時間半やることなかった・・・・
生協は開いてないし、コンピュータ室は今日に限って掃除中だし・・・・
それと、今日はバスで30分かかる道を1時間半かけてゆっくり歩いて帰りました。
1時間以上ぶっ続けで歩くのは数年ぶりだったのですが、まだ3時間ほど歩けそうな雰囲気でした。
えーと・・・・雰囲気だけです、多分。
そして明日は休み。

素敵v

今日は応用解析学のテストがある・・・・はずでした。
しかし、教室にいっても人はおらず、一緒に来ていた数人と、どうなったのか調べに行きました。
調べること数分・・・やっとのことでテスト延期の案内を見つけることができました。
普段は絶対に休むことがない先生だったのに、一体・・・・?

DirectXを非常に簡単に扱えるという「YJライブラリ」をダウンロードしてみたのですが、どうもうまくいきません。
サンプルをビルドしてもエラーばっかりなんですよ。
ライブラリが悪いんでしょうか、それとも・・・・?

なにやら今日は生協祭とやらでビーフステーキが300円で出されていました。
こういうことは普段ないのですが(ないからこそ生協祭なのでしょうが)、やはりボリュームは300円並みでした。

サンプル集

本当に久々に「VB小ネタ」を更新しました。
テキストボックスなどで、Enterを押すと次のコントロールにフォーカスが移るという動作を簡単に実装する方法を載せました。
実際のところ、Default=Trueのコマンドボタンがあると誤動作を起こしたり、テキストボックスの場合はいちいち音がなったりするので完璧とは言い難いですが。

そのついでに、「プログラミング」のディレクトリの構造を変えて、すっきりさせました。
サンプルはサンプル専用のディレクトリに、画像は画像専用のディレクトリに入れてあります。
で、ついでに、.htaccessファイルを使って、サンプルディレクトリのみ一覧表示を可能にしました。
サンプルを全部落としたい場合は、http://tgws.fromc.jp/tokio6/prog/samp/にアクセスしてください。

掲示板を改良しました。
今まではアップ画像はすべて表示していて電話回線の人にとっては大迷惑だったのですが、デフォルトで表示しないように設定を変えました。
「オレはブロードバンドだ!画像程度へでもないぜ!」という人は、「その他」→「クッキー修正」で、表示する設定にもできます。

改造について

日記CGIを改良しました。
今までは削除機能を使うと全部の日記が消えるようになっていましたが(ASKABBSのをそのまま使っていたため)、一つ一つ消せるようにしました。
日付で判断しています。

学校でアセンブラに関する本を読んだのですが、何か変です。
改造系の本だったらしいのですが、小さくてよく見えないけどなんだか女の子っぽい絵ばかり・・・・
CGをたくさん見られるように改造するとか言ってましたが、これは・・・・?
と思ったらギャルゲーでした。
私はそういうのやらないんですよ。
つーか普通にプレイしてCG出したほうが簡単でしょうに・・・・

今日アクセス解析を見てみたんですが、「VB」で結構かかっていました。
よかったよかった・・・・

メトロイドクリアしたっつーことで

そうそう、プログラミングを更新しました。
でも実はプログラミングの内容ではありません。
それどころか、できていません!
何やら一見興味深いタイトルが並んでいます。
ついでに自己紹介も更新しました。

「メトロイド(メトロイドプライムのおまけゲーム)」をクリアしました。
弟が。
何十回も殺されながら。
正攻法で一生懸命やっている弟をせこい手で進めている私が抜いてしまうのはどうかと思って私はツーリアン前から進めませんでした。
メトロイドが代わる代わる噛み付いてきたり、リンカ「だけ」のせいでラスボスにものすごく苦戦したりしていました。
そして、ラスボスを倒すと自爆装置が作動!
どうやらこの頃から脱出イベントは健在だったようです。

「メトロイドプライム」で、サムスがビームを打ちまくった後に銃口から煙が出ているのを今日初めて知りました。
またどうでもいいこだわりを知ってしまった・・・・

積分因子とか全微分とか

今日は微分方程式の、完全なんたらかんたらとか一次線形ナントカとやらをやりました(いや、ナントカっていう名前ではなく)。
うん、なかなか意味不明。
チンプンカンプン。
ワケわかんない。
やってることは全微分の逆っぽいのでその辺をどうにかこじつけて解けるようにして無理矢理納得させましたが。

ときおのやつ、今度はプログラミングに「超リアルプログラミング」とかいうわけのわからんもんを追加するとか抜かしております。
何やら実物を目で見るか映画並みの画質でCGを描いたり減衰回折干渉まで考慮に入れたサウンドを再生したりと、どこぞのスーパーコンピューターでもてこずりそうなことをやってみようという無謀極まりない企画だそうです。
つーか当の本人にそのプログラムを書く気はまるでなし。
これこれこういうことをするときには、細かいけどこういうところにまで気をつければ限りなくリアルになるよ、ということだそうです。
まるっきりバカじゃん。

日記とか例外はありますけど

プログラミングを更新しました。
いやはや、なんかソフトによっていろいろと保存形式が違うようで・・・・
ちょっとあせりました。
それと、ウィンドウタイトルも変えました。
(ジャンル)を[ページタイトル]にしました。
検索に偶然引っかかったときなどにわかりやすくしようと思いまして。

「ふにゃさん」の絵を増やしました。
相変わらずコピペばっかりですが。

「更新履歴」をその他に移動しました。
最終更新日の部分からリンクされているのでいいですよね。
一応トップページに載せるのはぜひ見てほしいコンテンツだけにしようと思います。

ヘルプミーイフユーキャン

「WinHelp」のサンプルができました。
何故かポップアップヘルプ系の機能がうまく動きませんが、ほったらかしにしてあります。
また、これまた何故かヘルプの使い方が変になっていますが、XPのせいだと思い込んでおきます。
やっぱこれからの時代はHTMLヘルプですね。

明日から一泊二日で広島に行きます。
明日は日記を書かないか、朝に書きます。
31日の更新は帰ってから行います。
既に準備はできています。

31日まで更新しません

「WinHelp」のサンプルのためのヘルプファイルを作っていました。
ページ一つ一つの区別は明確に、かつ限りなくシンプルで小さいヘルプを作っています。
実はこのAPI、私自身あんまり詳しいことは知らないので、このサンプルで実験しつつ解説していこうと思っているのです。

「Bomber丸World」制作の計画でもここで出しておきます。
タイトル

データ形式を決める(予定:識別番号、ステータス一人当たり100バイト、イベント変数100バイト?、イベントフラグ1000ビット)

簡易マップ表示(拡張性は高く、最終的にアニメーション可能を目指す)

イベント処理

バトル処理(これが一番の難関?)

セーブ機能

データ入力、エンディングまで可能に

エンディング

機能追加等

とことん!アイコンエディタ

アイコンを作ってみようと思ったのですが、今使っているパソコンにはろくなアイコンエディタがありません。
Win3.1やVB6に付属のは48x48のアイコンや24bit・32bitαチャンネル付きのアイコンが作れないし、「Developer Studio」のアイコンエディタはクソ重いし・・・・
そこでインターネットで検索したところ、高機能だがシェアウェア、フリーウェアだが機能が足りない、そのどちらかしかありませんでした。
そもそも、選べるだけの充分な数もありませんでした。
それならば作ってしまえ、とは思ってみたのですが、ネットで検索してみても、アイコンのフォーマットの記述があるサイトはほとんどなく、やっとのことで見つけたたった一つのサイトも、いたるところ「?」だらけで、よくわかっていないようでした。
もう、自分で研究するしかない。
しかし、頼りにしていたMSDNライブラリにも、詳しい記述はなく、関連のある構造体の解説があるだけでした、それも英語で。
結局、ネットとMSDNの不確かな情報とシェアウェアの使用中に作ったアイコンのバイナリデータを見つつ理解を深めていくことにしました。
そういう経緯でアイコンの情報を表示するソフトを作り始めることになりました。
そして、ヘッダとそれぞれのアイコンの情報を読み込むところまでは余裕でできました。
そこで調子に乗ってデータまで自前で読もうとしたのが間違いだったのです。
データ部の雰囲気を表現すると、

えげつなー!

なにしろモノクロ画像は一行に付き32ドットずつ(つまり4バイトずつ)まとめて読み込まないといけないみたいだし、そのくせ16色だったら0.5バイトずつ隙間なくうめてゆき、唯一まともそうなのが256色で、24bitはその名の通り3バイトずつよみこんで、32bitともなるとαチャンネル付き!
しかもすべてに共通して言えることは、最初に用途不明の40バイトがあること、マスク部分はそれまでのデータがどうであれモノクロ画像の規則が適用されること!
それでも32x32は問題なく読めるんですよ、16x16や48x48も何とか対応できました。
確かに一般的なアイコンだとそれで充分かもしれません。
しかし、私が目指すのは限りなく自由度の高いエディタです。
ビューア程度で対応できなくてそんなエディタが作れるでしょうか。
というわけで、リソース数10、28x95や33x33サイズの画像を含み、ありとあらゆる形式を含むという、普通ではありえない、非常に厳しい条件のアイコンを作りました。
しかしこれにも困難はありました。

だってエディタもビューアもバグっちゃってるんだもん!

具体的には、例の厳しいアイコンを保存すると、透過色と反転色が入れ替わってしまいます。
それをエクスプローラの縮小版で見ると透過色・反転色が変な色になっています。
ほんまにできるんかいな…

投稿掲示板も作ってるます

「ふにゃふにゃ」を公開した頃に、ステージエディタがわかりにくいとの指摘を受けて、ある程度わかりやすく改良はしたのですが、マニュアルがマニュアルなだけにステージの作り方なんて教えていないも同然でした。
今更ながら、このことを受けて、ある程度わかりやすいステージ制作講座を始めました。

プログラミングの「WinHelp」をもうちょっとわかりやすくしようと具体例を探しています。
実を言うと、今日の更新はこれをしようと思っていたんですが、その具体例の候補に挙がったのが「ふにゃふにゃ」のステージエディタで、このエディタのマニュアルはわかりにくかったということを思い出し、急遽更新内容を変更したのです。

掲示板のデザインを変更しました。
今日の、午前0時1分に完成しました。
ウィンドウズです。
アイコンとかボタンとか、著作権が微妙なところもありますが、まあマイクロソフトは気にしていないでしょう。

日記で、文章が中央揃えになるバグを修正しました。
…はずです。
左揃えになっているかどうか確認してください。

<前 次>