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

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

<前 次>

ギヤバネ本格始動

見てください。ギヤバネ君が動き回っています。
ギヤバネ君はふにゃとは違いカクカク不連続的に動きます。
ことあるごとに笑ったり、壁にぶつかると跳ね返ったり、それで空中に投げ出されて落ちたり、特に跳ね飛ばされ→落ちの流れは漫画的な動きを意識して作っており、いやもう、実際見てください。
作りかけだけどちょっとダウンロードページにアップしておきます。

MIDIAP、進みました。
まさかいつか悩んでいた問題がこんな初歩的なミスのせいだったとは…。
ともかく、これで開発スピードアップですよー!
…多分。

1121956047.png

12音階

毎度毎度のことだけどレポートが…。
今回は連休だったこともあり、いつも以上に…だらけてました。
反省すればするほど悪くなるってどうなのよ。

昨日書き忘れていましたが、変数の値を近づけるテンプレートというのを作りました。
例えば地面との動摩擦力の場合、動摩擦力は速度が0に向かう方向に一定値かかるため、正の速度を持っている場合は一定値減じて、負の場合は増やして、となるのですが、速度が小さくなるとそれが行き過ぎてしまうためその場合は0にしなければならないのですが、これが簡単だけどあまりによく使う処理だから一つ一つ書くのが面倒だし、可読性も圧倒的に落ちるし、ということで、テンプレートが使われる典型的パターンと踏んで作ってみました。

RPG±0、タイトルくらいは表示できるようにしようとファイル読み込みを作っていたら、ファイルセレクト機能がないことに気付き、ファイルセレクト機能を実現するため入力を作ろうとしたのですがDirectInputはいじったことがないためわからず結局のところタイトル画像をやる気のない画像に差し替えただけにとどまりました。

今日は12音階音楽。
作り方があるそうなのでそれにしたがって作ってみました。
まずド~シまでの12音を平等に使ったメロディを作る。
音の高さ関係をひっくり返したものとタイミングをひっくり返したものを作る機械的作業。
半音ずつずらしてそれぞれ12段階のバリエーションを作る。
できた48の旋律を組み合わせてそれを発展させていって音楽として完成させていく。
今回は最初の2段階だけで作ったものです。
ノート以外のイベントは一切入っていないので前のMIDIの影響をもろに受けて変化します。

1121697082.mid

実践が足りない今日この頃

パネルγの裏話を更新しました。
大きさについて語っています。

最近考えてばかりで実践が伴わないため役立てることができていない技術や知識が多くなっている気がします。
絵も描かなきゃまともに描けるように慣れるわけはないし、学問も演習問題をやったり実際の問題に適用したりしなければ身に付かないし、音楽だって理屈を調べるだけじゃ…。
というわけでこれからは練習のためいろんなのをできるだけ毎日作ってはアップしていこうと思います。
今回は音楽。これからもこの程度のクオリティで行きますんで。

1121089500.mid

敵キャラデータベース

爆ボンバーマンの敵キャラデータを更新しました。
全部じゃないにしても結構それなりに揃ってるんじゃないかな~と思っていて自分としてはそれなりに満足だったりして、また暇のあるときにでも完成させようかなと思っていたりします。

VB小ネタを更新しました。
自分のウィンドウがアクティブかどうかを判定する方法を。
ゲームなどに使えるんじゃないかな。

ふにゃさんエディタでいろいろ安全対策をしてみました。
まずマップサイズの制限。
幅は10以上、高さは7以上が保障されるようになります。
そして主人公を一番下のラインに置かせない。
一番下から始まると先はもう場外しかないので。

テンプレートの練習

ふにゃさん、マップのスクロール機能を実装してみました。
普段ならここらで結構てこずっていたりしたのですが、今回は結構あっさり実装できてしまいました。
これというのもよく使いそうな機能をテンプレートとして実装して、Saturateとかしたからだと思っています。
で、早速テンプレートのSaturateで主人公の移動速度も制限。
めり込みをなくしたのです。
ついてに、当たり判定と移動のアルゴリズムを改良。
まず横に動かして全方向に当たり判定。
これで上下にぶつかっていなかったら縦にも移動した上また当たり判定。
これですり抜けバグも当たり判定が1フレーム遅れるバグも解消されたはず。力技だけど。

ひらカタチェンジャデラックスをアップしてみました。
ダウンロード→その他から落とせます。
リコチキ語+同時通訳にしているとタイトルがとんでもないことになっちゃいます。
巡回置換の周期も調べてみようと思ったのですが、根性が足りず計算できませんでした。
10桁は軽く超えると睨んでるんだけど…。

掲示板にニストのアイコンを追加しました。
不死身のあいつです。
まだ出ていないRPGの敵です。

Bomber丸Worldのページも更新。
ゲームシステムの詳細です。

template<class T>
void Saturate(T min,T& num,T max){
if (num>max) num=max;
if (num<min) num=min;
};

ドット絵レンダリング

どこぞの掲示板でちょっと触りの部分を書いたのですが、ここではもうちょっと具体的な話をします。
ドット絵作成には、重要な特徴をつかんで他を省略するということが大事になってきます。
それは人間の感性によるものが大きいので3Dレンダリングエンジンに計算させることは困難ですが、そもそも3Dモデル自体基本的に人間の感性で作られているものなんだから、特徴の重要さもやはり人間の感性を数値化して3Dモデルにデータとして組み込めばよいのではないかと思っています。
では重要度はどうやって組み込めばいいか。
じっくり描くのなら手描きで充分。リアルタイムにレンダリングしてこその3Dなので、とりあえずDirectXかOpenGLで使えるものがよいでしょう。
となれば、扱えるデータはある程度絞られてきます。
例えば、テクスチャとして、重要度マップを組み込む。
特定の範囲の色と重要度を対応付け、小さい場合は重要度の低い部分はレンダリングしない。
難しいのは、1ドット幅の輪郭。まあこれは頑張って計算すれば何とかなる。
ってなわけで、気が向けば実際に作ってみたいと思います。

DMP

作りかけで完成させる意欲のないDirectMusicPlayerをプログラミングコーナーのサンプル&ソースコードにアップしました。

クラスの実体

パネルγの遊び方9と自己紹介とゲーム記のゲームボーイと同じくロクヨン、それぞれ更新しました。
昨日書き忘れていたところと、たくさんの質問への回答と、標準語化をしてみました。

レゴ、昔買ったものを5つほど復元しました。
ずっと前に作ってばらさずに置いたものを数には入れてないので全体としてはもう少し多くなります。

Java、とりあえずサンプルを落として見てみました。
eclipseが異常に重いのが気になったけど、クラスの扱いについては大体わかりました。
Class1 c = new Class1();

昨日断念した音楽、今日何とかMIDI化に成功しました。
なんに使うかはまだ検討中。
メテオスでこんな惑星があったらいいなと思っていたときに妄想中の惑星のBGMとして思いついたものだったのです。
うちってMIDI化するときにどうしても半音を使ってしまう悪い癖があるのね。
しかし今までMIDIだからいいやとPiccoloを使いまくってたけど結構無茶な奏法だったのね…。

1119625040.mid

風の影響

ふにゃさん、走るときのグラフィックを出せるようにしてみました。
今回は移動や当たり判定の処理と描画の処理を分けて作っているので、動作から先に作って、直立姿勢のまま走ったり跳んだりするようにしてから、動作が安定するころにグラフィックの変更を行ったりしています。
スピードの減速方法、地面に立っているときは速度0に向かって一定加速度+風の抵抗をかける。
走っているときは最高速+風速を超えているときには最高速+風速に向かって減速。
跳び上がり・しゃがみ・歩き中は減速処理はせず。
落下中は風の抵抗のみによって減速。

パネルγのページを更新しました。
ルールの同時消しのところです。
う~ん、LARGE以上のどでかい同時消しボーナスについては書き忘れてたけど、まあいいや。

同じくパネルγ、ランキングへの得点の送信には公開鍵暗号を使ってみようかと思ったのですが、これは第三者が解読できないようにということで、送信者本人によるデータ捏造への対応ができなさそうなので、見送ることにします。

なんとなくメロディが思いついたのでMIDIにでもしてみようかと思ったのですが思ったとおりの音が出せずに断念。
それはそうと、音源を変えてMIDIを聞くと同じ曲でもなんだか新鮮ですね。

物理シミュレーション

ゲーム開発のための物理シミュレーション入門という本を買ってみましたです。
使っている物理法則そのものはそう高度なものではないようですが、布のシミュレーションが面白そうだったので。
しかし予想以上にパラメータ変化にシビアなようで、ちょっとポリゴン数を増やしただけで布消滅。
果たして実際に使えるようになるのだろうか…。
剛体の衝突シミュレーションでもとんでもない飛び方してる様子だし。

惑星ハイリア

本日の画像宇宙に煌々と輝くこの星では、長い歴史の中で、星の象徴でもある黄金の聖三角をめぐり、魔王と勇者の戦いが幾度となくあった。
そのたびに勇者は賢者の力を借り、魔王を撃破していたのだ。
その名はいつも決まってリンク、ゼルダ、ガノンであり、いつしか伝説となったこの話にあやかって、息子が生まれればリンクと、娘が生まれればゼルダと名づける風習が広がった。
メテオが飛来したとき、魔王ガノンの仕業として、無数のリンクと無数のゼルダが旅に出たという。

ふにゃさん、PNGが表示されないことを確認しました。
これでグラフィックはBMP/GIF/JPG/YGA(yaneSDKの独自形式)でいくことになりました。
となると、透過GIFとYGAをVBのステージエディタで表示できるように、と。
そんなわけで、透過GIFを透過転送するプログラムをちょっと組んでみました。
白背景の画像と黒背景の画像を用意して、その二つをSRCINVERTで合成すればマスクの出来上がり。
あとはいつものように透過転送。っと。

1116514307.png

ダイアログに

くううっ!AppWizardがテキストに無効な番号を割り当ててて無駄に時間を浪費したっ!
必死こいてWM_メッセージを調べてた私は一体何なのだ!
まあ、とりあえずできたのだ。

ラッセルのパラドックス

http://www24.cds.ne.jp/~neg/pro/piyo1/osetc/ver.html
ここにバージョンリソースの取得について書いてありました。
トリッキーな!
しかし最初の文字列部分を長さ1の配列にして後をコメントアウトするというところは私の考え方を一致する部分があるようで。

例1.4 ラッセルのパラドックスと同じような例.
(a) 自分自身を掲載していない図書目録の目録を作った.この目録はどの目録に載っているか.
(b) 17文字以内で定義できない最小の数.
(c) 「クレタ人はいつもうそをつく」をクレタ人のエピメニデスが言った.
(d) この文章は誤りです.
(e) 私はうそつきです.
「情報の倫理数学入門」(近代科学社、小倉久和・高濱徹行共著)14ページからの引用です。
パラドックスがなさそうに見えるのは私だけ…?

バージョンリソース

バージョン情報読み込みに苦戦中です。
一発で読み込むAPIがない!
外部ファイルのものを開くのはあったのですが。
仕方なくLoadResourceしてLockしてポインタをゴリゴリ操作することに。
wValueLengthってValueのサイズだったのか。
自前で計算せにゃならん。
・・・でも次の更新ネタに使えるぞ。

タイムアタック

タイムアタック作成。
ほとんどエンドレスのコピー。
プレス機の移動速度はひたすらランダムで決まるのである程度運も必要。
まあエンドレスもある程度そうだけど。
ただ、時間制限がある分、圧縮によるゲームオーバーはできれば避けたいので、ピンチのときのプレスの速度はかなり遅くなるように設定してあります。

AB講座の続きも書いてます。
とにかくコンパイルを通して、見た目を先に作って、マイキャラを動かして、敵キャラを動かして、ほかいろいろやって、完成です。

公開まで毎日パネルγの進行状況報告します宣言

リファラ見てたらなんだかピンク玉がはねてる楽しそうなゲームを開発しているページを発見。
なんだか面白そう。
こっち方面に役に立ちそうなことを重点的に更新しつつ完成を楽しみに待っていようかなとも思っていたり。

パネルγ、ポーズ機能作成。
デバッグモードでコンパイルした場合のみ、ポーズ画面に100点追加とプレスリセットのメニューが登場します。
残念ながらランクへの名前の記入はまだ。
また遅れたっ!!

fffab開発開始ですよっ!
何って!ふわふわふにゃのActiveBasicバージョンですよ!!
あすかあさってあたりでプログラミングコーナーで取り扱うのじゃ!!
ふわふわふにゃはゲームプログラミングの典型的な手順のひとつに忠実に従っている(はずです)ので。

いも・おと・にい・ねえ

アンダーバー、下げすぎた。
んで、ゲームオーバーのところもちょっと変えてみた。

「Bomber丸World」で、こんなキャラを考えてみた。

いも
次女。

にいやねえとはそんなに歳が離れているわけではないのにかなり背が低い。
これは、親が年功序列を重んじており、生まれたころからにいやねえより明らかに悪い待遇を受け、成長不良を起こしていたためである。
いもは親から全く愛されていないと感じ、お茶に毒を入れて自殺しようと図ったが、おとがお茶を摩り替えたため死ぬことはなかった。

おと
次男。

いもが自殺しようと用意した毒を父に飲ませ、殺した事件以来、いもとにいには嫌われており、唯一以前と変わらぬ態度で接してくれるねえにはよくなついている。
顔の傷は、父を殺した夜に怒ったいもに鉛筆削りやはさみや耳栓や彫刻等や油粘土や他いろいろなものを投げつけられてできたもの。

にい
長男。

厳しいが優しい父に育てられ、立派に成長し、今では戦闘家になっている。
いつからか年功序列に従っておとやいもにほとんど優しさを見せない父の教育方針に疑問を持つようになっていた。
事件のとき、肉親を奪われた怒りに弟を襲おうとしたが、同時に教育方針の被害者である妹を助けたことを知り、何もすることはなかった。
いまだに弟の行動が正しかったのかの結論が出せず、ギクシャクした関係のままでいる。

ねえ
長女。

昔から何不自由なく育ち、弟妹の世話役として身の回りの世話をしていた。
事件のとき誰にも何もしてあげられなかったこと、長い付き合いだったはずの弟妹が思いつめていたのに気付かなかったことに責任を感じ、命に代えても誰か人を守りたいと考えるようになり、今では弟の守護をしている。

この4人、戦闘家としての戦いのときは幸せな家族写真っぽい配置で現れるんですが、さりげなく兄妹・姉弟のチームに分かれていたりします。
前後関係も重要なポイント。
ただ、「Bomber丸World」の世界観には重すぎる設定のためゲーム中ではこのエピソードは出ないかもしれません。

ひょんなことからfffをActiveBasicでリメイクすることになってしまいました。

なんとなく

MIDIAP、はじめました。
MIDI再生についてはhttp://www.ccad.sccs.chukyo-u.ac.jp/~mito/syllabi/mediaProg/midi/(chukyo-u,sccs,Ito Lab 中京大学、情報科学部、伊藤 誠ゼミ)を参考にしてみます。
さすがに学校の教材だけあってわかりやすい。
一応作り始めたんですよ。
これからどうなるのか、自分でも想像付かないんですけど。

ふにゃさん、BGMに特殊効果はつけるつもりだけど、パネルγほど極端にはしない予定です。
なんとなくさっきと曲の雰囲気が違う、というイメージで。

このサイトの意義

プログラミングのところを更新したんですけどね、このとき思ったんです。
このサイトの存在意義とは何だろうと。
そりゃ自分の作品紹介や日記をだらだらと書き綴るのもひとつだけど、本来のメインコンテンツであるプログラミングはもっとはっきりした決定的な意味を持たせたい。
プログラミングのページは情報ページだから、新しい情報またはここにしかない情報が重要でしょう。
前者は私には難しそうなので、オンリーワンの情報ということになるのですが、言うまでもなく今の当サイトに多いマニュアル的な情報は新しさも珍しさもないわけで、困ってしまうのです。
そこで今回からはじめたのが、「こんなことをやらかしたらこんな大変なことになる」という失敗例のサンプルの使用。
正解がたとえたった一つでも、それにたどり着く道のりは多数あり、その道のりの中で新たな発見があるのではないかと、そう思うのです。
まあこれは以前の「てきとうトゥーンシェード」で思い始めたことなんですが。

<前 次>