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

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

<前 次>

無題

ふにゃさんやってたら作ってないはずの設定メニューがゲーム本体に出てきたのを発見したので直しておきました。

Luaの関数として呼び出されたC関数の中でC++のクラスを使った場合どうなるのかが気になって少し実験していました。
何が気になっていたのかというと、関数内でエラーが起こった場合、C++の例外ではなくてC言語のlongjmp(gotoの強化版のようなもの)で関数を抜けるのですが、そのときクラスのデストラクタまですっ飛ばしてエラー処理まで処理が飛ぶのではないかと思ったのです。
実際試してみたところ、longjmpでもちゃんとデストラクタは呼ばれるようなので、この点では安心してよさそうです。

無題

早速VB2008でIf文とSelect文による分岐の比較をしようと65536分岐させてみたのですが、なんだか動かなくなりました。
1個の分岐なら10万回繰り返しても平気だったんですが、不思議なものですね。
もしかしたら予期せず無限ループができてしまったとか、最適化なしにしたからものすごく非効率的なコードができてしまったとか、そのあたりでしょうか。
最適化ありにしたら必要以上にコードが削られる気がするんですよね…。

無題

なにやら久々にうちのサイトがプログラミング系の掲示板から参照されておりました。
私のサイトでもまだ役に立つことがあるんですかね。
最近は何か独創的っぽいことを考えてもどうせ誰かが先にやってるんだろうなって気分になってやる気をなくしておりました。
確かに私は今はアンパンマンばっかり見ておりますがアンパンマン関連でもプログラムは作っているわけですし、アンパンマンのデータとか自作のゲームとか以外でもまだ発信できる何かがあるはずだと思いました。

無題

ふにゃさんのHTML表示が中央表示に対応できました。
あと、シークレット表示もできるようになったり。
影付けができれば完璧といったところです。

関係ない話ですが、昔言っていたVB用のLongScrollを単体で公開しようと考えています。
今のところ説明等が全く足りていないのでそのあたりソースにも書いて、別途ドキュメントもつけようかと思っています。

無題

物理量解析エンジンの名前がどうにもプログラムの本質を表していないと思って気に入らなかったので、単位・数値変換クラスに名称変更しました。
ついでに、ソース見て勝手に使い方判断しろというスタンスをやめて、分かりやすい説明もつけることにしました。
この作業が終わったらバージョン1.01としてアップする予定です。

かわいいのでチーズも描いてみました。

1224773820.png

メトコラ

弟がメトロイドプライムコラプションを買ってきました。
なんだかつんつんしたりぴょんぴょんしたりで楽しそうです。
Wiiの操作しにくさは相変わらずのようです。
親指らくらくプレイだったらどれほどやりやすいことか。
やったことないけど。

地形のほうは、ポリゴン数が多くなるとレンダリング時間が厳しくなってくるのでライティング済みのテクスチャを最初に作って荒いポリゴンに貼り付けるという方針にしました。
Wikipediaにあったテクスチャマッピングの例が以前は大げさに見えていたのですが、自分で作ってみて図の通りになったときには自分でも驚いてしまいました。

無題

フラクタル地形は一度分割した地形の重なり合う場所で多重に高さを指定していたために一回目の乱数でできた地形と二回目の乱数でできた地形が繋がってしまいちぐはぐになっていたのがおかしくなった原因でした。
そんなわけで、昨日の画像と高さ情報だけは遜色のない山ができるようになりました。
いろんな都合上家では動かせないのですが。

あと、トップページも微妙な改修の第一ラウンドが終了しました。

フラクタル地形

OpenGLの講座サイトとWikipediaを見てフラクタル地形とやらに挑戦してみましたが、なかなか思うような地形にならないものですね。
分割点を過ぎるごとにむちゃくちゃな崖ができたりして大変な地形になったりします。
今回添付したのはTerragenというソフトで作ったものであり自分でプログラムしたものとは別物です。

1222872926.jpg

無題

プログラミングコーナーに掲載しているサンプルコードにJavaScriptでシンタックスハイライトしようと思ってSHJSを使ってみました。
VBのがないのが残念ですが、使い慣れてきたら自作してみようと思います。

無題

アンパンマンDBにリンク集コーナー設けました。
あとついでにシリーズで話を探すメニューをトップにつけました。

プログラミングコーナーの速度比較も更新したいんですが、今の環境だと裏でかなり多くのタスクが動いているのでちょっと測定できる環境を構築するには時間がかかりそうです。
いや、妥協するなら測定用のプロセスの優先度を上げればいい話なんですが。

無題

VB.NETは最近使い始めたんですが、C++やなんかと比べると結構素直な拡張になった感じですね。
VB6で使えた関数やステートメントの一部がそのまま使えるようになっているところあたり結構気を利かせてくれています。
おかげで.NETな気分も半減ですが。

無題

平均と標準偏差を入力して正規乱数を生成するプログラムを作っていました。
要するに正規確率分布に従うようなばらつき方をする値域(-∞,∞)の乱数、ということですね。
現実にはもちろん有限なわけですが。

固定長分数型

はてさて。例の可変長分数型構造体、どうにも内部で使用している可変長整数型の挙動に不安定なところがあるため、というか、9999桁であるべきところを9995桁と認識するなど、明らかに大きな数で挙動がおかしいため、泣く泣く固定長分数型にしました。
今は64bit符号付整数型2つを使っているため、計算間違いを起こさないように最初の32bitだけを使うような計算にしています。それを超えると約分したり、それでも足りなければ精度を落とすように分子と分母を小さくして対応しています。

DirectMusic7をVC#から使うためのDLL

で、実際に作り始めました。
マネージドとアンマネージドの混在するややこしいプログラムにもだんだん慣れてきたところです。
参考にするためBomber丸WorldのBGMクラスを見ていたらIDirectMusicのReleaseし忘れを発見しました。
これもそのうち直そうと思います。

無題

VC++でDirectXのDLLを作ってC#のNeoMuplで使うというのも悪くないかもしれない。
ネイティブとマネージドを混在させる利点ってこういうのぐらいしか思い当たらぬ。

無題

でもやっぱりマネージ拡張よりはマシとはいえ無理やり.NETに合わせたC++/CLIは扱いにくい気がします。
そんな中がんばって可変長分数型を作ってみたりもしてました。
どうせBoostあたりであるんだろうけど、まあ研修だし、ここは自分で作ってなんぼということで。

<前 次>