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

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

<前 次>

ふにゃgbaですが

「devkitAdvance IDE」で、ビルドと実行ができるようになりました。
で、サンプルなどからファイルを取ってきて、掲示板の書き込みを参考にして色々makefileの設定をして、ようやくgbaファイルを作ることができました。
白い画面が出るだけです。
一応ここまでできるようになったので、IDEの開発も進めつつ「ふにゃgba」も作っていこうと思っています。
「バナナあつめ」と「ふわふわふにゃ」の2本立てになる予定です。
「バナナあつめ」は「ふにゃ」とほぼ同じルール。
ただし面クリア型ではなく広大な一つのマップ中にあるバナナを全部取り尽くすことが目的です。
「ふわふわふにゃ」もオリジナル版とほぼ同じです。
オリジナル版とは違って、画面の左右端が繋がっておらず、無限に広いステージがスクロールしていきます。
プログラム上、オリジナル版には組み込めなかったシステムです。

「devkitAdvance IDE」でファイルの保存を作りました。
それに合わせてそれぞれのフォームでのファイルの管理方法を変更しました。

「ピクミン」は命の大切さが分かるゲームだといわれています。
私はそうは思いません。
原住民を何百人も奴隷のようにこき使って、何十匹単位で死んでいってもそれは数だけの問題で、挙句の果てには目的を達成したらとっとと自分だけ帰っていってしまうのです(まだ帰ってませんけど)。
他にも色々命の大切さを扱った作品がありますが、命の大切さを伝えるために、わざわざ命を落とさせるだなんて、あまりにも悲しすぎます。

エラーメッセージの大切さが分かるとき

IDEかなり進みました。
もう使っているところを見るとすぐにでも使えるのではないかと思えるほどになっています。
実際に使ってみるとまだまださっぱりだったりするのですが。
それなりに何かやっていそうに見える画像をアップしておきました。
これで思う存分騙されてください。
なんかツールボタンが謎ですね。
プロジェクトのオープンのときに連続して4~5種類ぐらいのエラーがあったのですが、全然エラーメッセージが出ず、いちいちStopをかけてステップインでエラーの箇所を探す羽目になりました。

マーベラスコンビネーション!

プロジェクト内のファイルの管理をするツリービューの動作を作っていたのですが、ノードのクリックを感知するのにNodeDblClickイベントがなかったので、NodeClick、Click、DblClickの3イベントを組み合わせてうまく作りました。
あと、プロジェクト中のファイルを管理するための構造体を作りました(もしかしたらクラスのほうがよかったかも)。

Netscapeでの表示確認済み

「devkitadv IDE」のメインウィンドウの外見を作りました。
VC++のような雰囲気にするつもりです。

今日の情報リテラシーの講義は、"理学部だけが"休講でした。
そこんとこ勘違いして来なかった工学部生が数名…
そしてその講義のときに、2回休んだら単位を与えないという注意事項が出ました。
そういう大事なことはみんながいる時に言ってくれなきゃあ…
来週も"理学部は"休講なんですよ。

さすがにHAM用のIDEは無理か…

どうもGBAプログラミング用のIDE(統合開発環境)が「devkitAdvance」では使いかたがわからなかったので自分で作ることにしました。
その名も、「devkitAdvance IDE」!
まんまですね。
なぜかアプリケーションウィザードがエラーを起こして終了できなくなってしまい、初っ端から躓き気味です。

ノートパソコンのマウスが、LANケーブルのせいで非常に動かしにくくなっていたので、ケーブルをまたぐような台を作りました。
中学校のとき工作に使った木材と、美術の時間に使えなかった木版がそのまま残っていたのでそれを利用しました。

GBAプログラミング始めました

ゲームボーイアドバンスのエミュレータをダウンロードしてきて、コンパイラもダウンロードしてきて、いろいろ設定とかやって、"funyagba"フォルダを新しく作って、そこに適当にファイルを入れて、「ふにゃGBA(仮)」でも作ってみることにしました。
エミュレータに関しては著作権か何かがどうも微妙なような気がしますが、すでに本体を2台も買っているのできっと任天堂も許してくれるでしょう。
とりあえずコンパイラは、C++を使える「DevkitAdvance」を使うことにしました。
1個につき1万円もかかるそうなので実機での提供は困難ですが、ROMだけならできれば公開しようと思っています。
その際はそちらでエミュレータを用意していただくか、実機に書き込む環境が必要です。

←今日が明日になる前に

1~3時限があって4時限が無く、5時限が英語…
開いた1時間50分、どうしてくれよう…
ということで、生協の本屋で.NET関連の本を立ち読みしていました。
2冊しか見つからなかったのですが、そのうちのひとつ、C#についての本:
「C++でベタベタコードを作るのはだめだ」とか、「DoEventsをたくさん入れて上から下へプログラムが進むVBはよくない」とか、「C言語しか知らないVC++プログラマがどうたら」とか、ほかの言語のことをボロカスに書いてあって、前書きだけで不愉快になりました。
.NETに対する興味が半減、個人的意見をあたかも一般論のように語る筆者を恨む。
一方、VB.NETの本:
「VisualBasic6はWindowsプログラミング言語のひとつの完成体」、まあこれはVBプログラマを喜ばせる以外に何の意味も持ちませんが、その続き、「インターネットが進歩してきたのでVBもそれに合わせて変更する必要が出てきた」、確かにその通りで、周りが進歩するなら、それに付随するツールも進歩しなければ宝の持ち腐れなのです。
ところで、.NETのプログラムの起動が遅いのは、実行時にコンパイルしているからだそうですね。

ふぅ~っ、間に合いました!

プログラミングに「ShowCursor」を追加しました。
説明とサンプルコードを並べただけですが。

「スマブラDX」対戦回数1000回超えました!
「たべもの」のフィギュアを手に入れました(1000回とどんな関係がという突っ込みはしないように)。
レベル最高3人組に1人で勝ちました!
タイム制では数の多いほうが有利とは限らないのです。

今日の講義は昼からでした。
10時半ごろにのろのろと家を出て12時ごろに大学について飯食って教室へ。
高校時代に定義として覚えさせられた公式の証明がありました。
簡単な証明だったのですが、感動しました。
ほかにもいろいろと、「おおっ」と思うことがありました。

今日は1時限~♪

今日の講義は2時限ある予定だったのですが、残念ながら「スポーツ科学演習」が抽選で落ちて受けられなくなってしまったため、1時限だけになってしまいました。
講義が1回1時間半、通学が往復3時間強、もっと考えて時間割を作ってもらいたいものです。

「ShowCursor」のサンプルを作りました。
考えていた通りの動きをしてくれて少しほっとしています。
本文のほうは書いていません。

ちょっと更新しました。
ひとつは禁煙についてと、もうひとつは…
よほど探さないと見つかりません。
実はダウンロードできるファイルが増えているのです。
隠しリンクからダウンロードしにいける、というほど簡単なものではありませんよ。
ヒントは、「このサイトが有料サーバー上にある」ということです。

授業時間5割増し!

教科書を買いました。
これで教科書販売所で買える教科書はすべて買い揃えました(品切れ品除く)。

「ShowCursor」を書いています。
まだ詳しい使い方の説明に入っていません。

マウスカーソルが時々ワープします。
画面中央付近で作業をしていると突然カーソルが左上に移動するのです。
DirectInputでこの動きを検出するとさぞかし凄いことになるでしょうね。

今日の講義は1時限から5時限まですべてありました。
9:00~17:50まで授業です。
1時限90分なので合計7時間30分です。
高校までが合計5時間丁度なのでかなり増えています。

英語は予習が大変じゃあ

今日は明日の予習が忙しくてパソコンどころではありませんでした。

って書くつもりだったんですがねえ~~っ。

教科書を買いに行きました。
買う教科書を確認しました。
販売所に行きました。
5時丁度でした。
閉まってました。
「教科書販売は5:00を持って終了いたしました」
頼んで売ってもらおうとしました。
販売所のドアが閉まってました。
鍵も掛かっていました。
開けてくれませんでした。
泣く泣く帰りました。
予習できませんでした。

「ShowCursor」を書いています。
"Cursor"と"Course"をよく間違えます。

文字列とかバリアントとか

プログラミングの「ShowCursor」を今書いています。
一応、コードはVBで書いています。

それと、あるサイトでByRefの方がByValよりも速いといったことを見かけまして、もしかしたら、と思って実験してみたところ、やはりByValの方が高速でした。
しかし、ByRefの方が高速だというのも間違いではないと思います。
これ以上書くと転載に当たるかもしれないので、そのURLだけ書いておきます。
http://homepage1.nifty.com/CavalierLab/
↑の「クラスモジュール講座」の「速度低下」に詳しく書いてありますのでそちらをご覧ください。

入学後最初の日曜日(それが?)

「TRPG+」のタイマーとマウス関連を作りました。
知ってましたか?
ShowCursor(0)を呼び出してもマウスカーソルが消えないことがあるんですよ。
ShowCursor(1)でもマウスカーソルが出ないことがあるんですよ。
フフフ……こんなことがあるから「Tokio's Web Site」は更新のネタに困らないんですよ。

とりあえず明日は3月3日に更新できなかった分を更新しようと思います。

メトロイド オモ…(略

今まで「マインスイーパ」ってなんで「私のものスイーパ」なんだろうと思っていたんですが、辞書を引いてみて納得しました。
"マイン(mine)"は"私のもの"のほかに、"鉱山、宝庫、地雷"という意味があったのです。
また、"スイーパ(sweeper)"は"掃除する人"、つまり、"撤去人"なのです。
つまり、「マインスイーパ」=「地雷撤去人」だったのです。
で、その地雷撤去人とは誰かというと、言うまでもなく、スタートボタンのあの顔なのです。

「メトロイド」を久しぶりにやってみました。
アイスビームを見つけました。
ブリンスタ深部、難しすぎですね。宇宙海賊全盛期って感じです。

これまた久しぶりに更新しました。
ビット操作のVB用サンプルを追加しました。
C++版に加えてロード・セーブの機能が備わっています。
ビット操作のわからない人もとりあえず使えます。

建国記念日

「TRPG+E」で、セーブ&ロードを作りました。
設定ファイルクラスで正常に読み込めないバグも修正。
意外とスムーズに進みました。

密かに「VB小ネタ」、更新しました。

ダウンロードを更新しますです

TiethさんがDirectMusicはポートを変更できるようにしておいたほうが良いと言っていたので、DirectMusicを使っている「MusicPlayer3,4,5」にポート変更の機能を付け加えてみました。
あ、言っていたとはいっても、直接私がTiethさんから言われたわけではありませんよ。
「Tieth Laboratory」の制作日記に書いてあったのです。
結局、私はTiethさんの真似をしたわけです。
まあ、「学ぶ」という言葉は「真似ぶ」という言葉から来ているので、Tiethさんから学んだということにしておきましょう。
一応ポートを変更するコード自体は自分で考えて作ったんですし。

センター試験を見直して思ったこと。
「a,b,c,dの関係は…」という問題で、"3<5<7<9"と答えていました。
確かに不等式自体は間違ってませんけど、文字の間の関係になっていませんでした。
このときの心境は、「ア2のアに1を書き込んだときの気分」に似ています。

学校で、志望校の選び方が極端すぎるといわれました。
そりゃあそうでしょう。
第1志望:多分通らない
第2志望:きっと通る
第3志望:滑り止めとして妥当なライン
第4志望:風邪を引いていても受かる……らしい
第5志望:願書を出した時点でほぼ合格と決まっている
早い話、第1志望は高望みのし過ぎで、それ以外は低すぎるというわけです。
第3志望の一つ下にもう一つ同じくらいのを入れたらどうかといわれているのですが。

スマブラ消えたァ!!

テスト全部返ってきました。
特によくできたという教科もなければ最悪の結果が返ってくることもありませんでした。
まあまあ良かったという教科や、気分的に最悪だった教科もないわけではありませんが。
とりあえず卒業は確実そう、ふぅ…

プログラミングに「ByValとByRef」を追加しました。
ポインタの概念が必要だったので説明しにくかったのですが、事実に基づいたフィクションの例え話を持ち出すことでうまく説明できたような気がします(どこまでが事実でどこまではフィクションなのかはあなたの想像にお任せします)。

「ふにゃふにゃ」で昨日作った線関係の関数をスクリプトから使えるようにしました。

スマブラのセーブデータが消えました。
タイトルでスタートボタンを押すと同時に「ブチッ!」と凄い音がして真っ黒な画面になり、電源を入れなおすと消えていました。
まあいいんです。
重要なセーブデータなんてあまり多くありませんでしたし。

あたいと山椒

「ふにゃふにゃ」の操作説明の凍りつきと踏ん付けの部分を作りました。
走る速度、空中での速度低下、凍っている時間などを考慮に入れなければならなかったので既に出来上がっていた部分にまで手を加える羽目になってしまいました(踏んづけには位置を合わせる必要がある)。
デバッグの効率化のため、移動を伴わない部分を"if (0)"で括って実行しないようにしました。
"//"でもできたんですが、行数が多いので"if"を使いました。

プログラミングのネタを思いつきました。
「ByRefとByVal」、わかったようでわからないこの概念を解説します。
そのつもりです。

学校で、留年しなければ最後となる体育の授業がありました。
受験直前になると怪我をしてはいけないので軽スポーツだそうです。
でもピンポンだってラケットを投げたりしたら充分怪我をする可能性はあると思うんだけどなぁ…

今日更新しました

「ゲーム音楽について」を修正しました。
実際には追加情報なのですが、ここでは修正扱いすることに決めています。
これはうちの環境だけで試したものでしかないので100%信頼できるとは限りませんが、参考ぐらいにはなると思います。
いずれにしても、MIDIを作っている人にしか意味のない情報ですが。

「ふにゃふにゃ」で画面の端から端へ移動する瞬間に一瞬主人公の絵が消えてしまうバグを修正しました。
表示領域を計算する過程が画面端から端へ移動する処理を含む当たり判定の部分よりも先に書かれていたのが原因でした。
どういうことかというと、カメラ位置が実際の位置よりも1フレーム分だけ遅れてしまうということです。
どこをどう修正したのかはプログラマーでなくてもわかるでしょう。
画面端での処理に関しては、

  • 反対側にあるビットマップも表示する
  • 境界線の向こう側にいる相手との当たり判定も取る
  • 反対側にある線の処理も作る
  • 背景のスクロールを自然にする
などが残っています(4つめはスクリプトでどうにかするつもりですが)。

<前 次>