「Visual Basic」に関する日記

次>

プログラミングとドラゴンクエスト10

プログラミング

予告通り、更新しました。
やっぱり選択ソートじゃねえか!

ドラゴンクエスト10(全員)

銃士ナスビス

  • クエスト「まもの博士の研究レポート」をクリアした!

時機を逃して同盟を組めずずっとできてなかったのですが、この度全員クリアしました。

毎月10日はDQ10で遊ぼう! ~もうすぐ協力チャレンジバトル開催! 仲間モンスター大特訓!!~ (2024/9/3)|目覚めし冒険者の広場
このイベントですな。
ァォィョッュはソロ派なので、極力同盟組まずに頑張りたかったのですが、やっぱり無理だったのでここは妥協して同盟組んでクリアしました。

他の写真は以下から。
写真置き場「2024/09/10」

NeoMuplC#

なんだかListViewのSortの挙動が怪しかったので、Array.Sortを使って自前で並び替えを実装しました。
そして今度は一度読み込んだログの破棄を実装してみました。

そうそう、最近NeoMuplもC#で作り直そうとたくらんでいます。
別に現在のVB版では致命的な問題があるわけではないのですが、どうにもセーブデータのいじるのが果てしなく面倒なのですよ。
いえ、果てしなくというほどでもないのですが、新要素の追加は行いたいのですが、それに伴う色々な部分の細かい改変が面倒なんですよ。
機械的な作業なのに自動化できなくて、面倒なだけの入力が続き、こういうのがつまらないミスを生み出して、つまらないがゆえに、もっとすごいところでミスしているのだろうと思い、見当違いなところばかり探す羽目になって、無駄な苦労を増やすばかりになってしまうのです。
で、そういうところを自動化するようなプログラムはVBではなかなか書きにくいので、他の言語に移そうということなのです。
特に曲の情報の入力フォームの統一は今のプログラムでは非常にやりにくいので、ユーザーコントロールを簡単に作れるVisualC#で開発したいということなのです。

記録する確率

今日はなぜかVBがよく落ちます。
実行した瞬間に不正な処理をしたためどうのこうのと因縁をつけられて。
まあ、実行する直前に保存する癖をつけてるので実害はないのですが、やはりどこか気持ち悪いです。
VBじゃなくて私のプログラム自体に問題があるならば実害があるわけですしね。

ふにゃさんの本編のほうは、リプレイの記録が出来上がったところで、記録しながらテストプレイ中です。
リプレイデータは、ステージデータの必要な部分を切り出して、更にキー入力情報や更に必要なデータなどを付加して、形式上はステージファイルと同じ方法で記録されます。
リプレイデータの記録に関しては設定プログラムで設定してやらないと全く保存されないので、プレイする前に、クリアしたときに自動的にリプレイ記録する確率、ミスしたときの確率、記録するファイルの最大個数、手動で保存するときに使うボタンを設定してやります。
クリアしたときの自動セーブは適当でいいのですが、ミスしたときの記録はあまり確率を高くすると難しいステージなどでは全部が一つのステージの苦難の記録になってしまって楽しくないので、確率を低めに設定しておくとよさそうです。

ジェノサイドキャノン!

VB小ネタを更新してみました。こっそり。
ダブルクリックのタイミング調整についてです。
ふにゃさんのエディタの改良に使ったもので。

で、今日はふにゃさんのバージョン1.04をアップしました。
YouTubeで動画を公開していた操作説明のほか、先ほどのダブルクリックでエディタを便利に使えるようになりました。
これに伴い動画のほうも正式公開として、ダウンロードページから見られるようになりました。
ちなみに、ダウンロードできるファイルのサイズが小さくなっているのは、アーカイバを変更したためで、中身は当然増えてます。

地球防衛軍1のインフェルノを全部クリアしました。
二人協力プレイで。
インフェルノだとダロガがなかなか強いです。
まあ、2だとバゥがイージーですら強かったりするんですが。
というわけでジェノサイド砲ゲットです。
4丁ジェノサイドなんてなかなかクレイジーです。

そして今日は、メテオスオンラインでも始めてみました。
まあ、オリジナル版と比べて、色々感じることはあるのですが、ポイント購入さえしなければただだし、よかろうと思います。

WindowsVistaとVisualStudio

マイクロソフトの「よく寄せられる質問 : Visual Studio と Windows Vista」を見ていました。
何せWindowsXPとは全く異なるOSがもうすぐ出るっていうときに、開発に時間がかかり、なおかつ長い間プレイしてほしいゲームをWindowsXPで作ろうとしているのですから、気になるってものです。
これを見てまず驚いたのが、WindowsVistaでもまだ現役としてVisualBasic6.0が使えるということ。
こうなったのは修得の容易さからVB6を使う人が未だ多いためにしぶしぶといったところだそうですが、もうすぐ本格的にVB6とはお別れしなければいけないと思っていたところなのでちょっぴりうれしい気持ちです。
もっとも、VB6以外については、最新のVS2005と極端に変わらないと言う理由でVistaからはサポートしなくなるそうですが。
ただ、VB6やVS2005がWindowsVistaで使えるようになるのは2007年第1四半期からだそうで、そうなるとWindowsVistaの導入もそれにあわせて4月以降になってしまいそうです。
もちろん導入できればの話ですが。
WindowsVistaでは、.NET2のプログラムがそのまま動かせるそうで、また、WindowsXPでも.NET2をインストールすれば使えるということで、今後の開発は.NET2が中心になっていきそうです。
次のバージョンの.NET3も.NET2を完全にサポートするようですし。

それで気になるのが、今から作ろうとしているBomber丸Worldです。
まだ作り直しはききますし、C++からC#への移行はある程度容易です。
しかし今現在の状況では、開発環境が重い、ウィンドウ切り替え直後の再描画がなぜか遅い、などの欠点がありますし、そもそもVC#2005での本格的なゲームの開発経験は皆無です。
しかしその代わり、標準ライブラリは確実にVC6よりは充実していますし、開発環境も重くなった分やはり圧倒的に強力になっています。
すでに1割を切った古いウィンドウズの利用者を切り捨てて自分だけさっさと先に行ってしまうか、将来動くかどうかわからないプログラムをそのまま作り続けるべきか、悩みどころではあります。

それはそうと、今日はナマライザのファイル読み込みを作りました。
テスト用の小さなファイルで動作を確認したのですが、とりあえず現状ではうまく動いていそうです。
実はコピーして一部変更しなければならなかったコードをコピーだけして変更しないという初歩的なミスを犯したりしていたのですが。

VBCHECK

こっそりパネルαとじゃんけんαを更新ですよ。
VBのコードの問題点を指摘してくれるソフトをたまたま見つけたので、あたっている部分だけ修正してアップしました。
ついでに著作権情報や一部アルゴリズムも変更しておきました。

そのソフトを見つけるきっかけとなったのがNeoMupl。
NeoMuplの動作が極端に遅いということ、そして解決法は先日書いたとおりですが、ソートアルゴリズムや文字列-データ対応のプログラムなんかはいかにも誰かが作っていそうだったので手近なところでVectorで探していたら、目的のものは見つからずに他の便利そうなソフトが見つかったというわけです。
結局ソートアルゴリズム周りで楽はできそうにないので再びC#も視野に入れ始めたのですが、現段階の問題として、VC#2005がExpressEditionだからなのかあるいはC#だからなのか、エクスプローラからのドラッグ&ドロップができなくて、一歩踏み出せずにいます。
これさえあればもう迷わなかったんですけどね。
C#でエクスプローラからのドラッグ&ドロップの方法を模索しつつVBで効率のよいアルゴリズムを作るとしましょう。

そうそう、アキタラヤメル企画にレゴのコンテンツを追加しようと思います。
今レゴでオリジナルの作品がいくつもあり、それらを分解する前に作っておいたLDrawのデータがあるのですよ。
うちのキャラのいくつかはレゴで作ったものが元ネタだし、こういうのがあってもいいと思うのですよ。

VB + Java = C#

VisualC#、どちらかというと―IDEの影響が大きいかもしれませんが―VisualC++6よりははるかにVisualBasic6に近い感じがします。
ちょっとコードの一部を出してみると、
pnlInfoUpper.Height = cmbName.Height * 3;
lblName.Left = lblGame.Left = lblInfo.Left = 0;
lblName.Height = lblGame.Height = lblInfo.Height = lblGame.Top = cmbGame.Top = cmbName.Height;
lblInfo.Top = cmbName.Height * 2;
lblGame.Width = cmbName.Left = cmbGame.Left = lblName.Width;
data.Load();
ChangeView(ViewMode.ABC);
LayoutInfo();
プロパティを指定してコントロールの大きさを変更してるあたり、いかにもVBです。
他にもVBと同じ仕様のforeachがあったり(本当にVBのFor Eachに括弧をつけただけです)、refをつけて明示的に参照渡しにしたり(VBではByRef)、VBをC言語風の見た目にしたような感じでした。
ファイルの読み書きについてはJavaに似ていて、System.IO名前空間のクラスを使って読み書きします。
StreamReaderはテキスト読み込みクラスで、
sr = new StreamReader(filename, Encoding.GetEncoding(932));
でテキストファイルを開き(Encoding.GetEncoding(932)はシフトJIS)、ReadLine()メソッドで一行ずつ読み込めます。
もしかしたら変な予備知識がない分VB.NETやC++.NETより使いやすいかもしれません。
いや、だからこそC#にしたんですけど。
そうそう、コーディング中にもガンガンエラーを出したりヒントを出したりしてくれるので下手にヘルプを引くよりまずは何かを入力してみるというのが結構有効です。
そして、ヘルプは、大して速くもない自分のパソコンを使うよりも、Googleで検索したほうが圧倒的に早く、正確な情報が得られます。

愛夢!?フレーム!?

プログラミングを更新しました。
「activebasic vb c 速度比較」のアレです。
今日は面倒くさいので空ループしかしませんでしたが、結構意外な結果でした。
VBのほうが速いなんて…!

ふにゃさんエディタ、上層マップや下層マップは存在しない場合は保存しないようにしました。
これを保存してしまうとゲーム本体のほうで誤解釈して見た目に汚くなるので。
そろそろ画像読み込みを手軽にできるようにしたいです。

本体のほうでは、ギヤバネとふにゃとの相互作用を改良。天井や地面でギヤバネと重なってしまうと動けなくなってしまっていたのですが、天井ではギヤバネを、地面ではふにゃを強制的に動ける位置まで移動することにより動かなくなる現象を解消しました。
そして、ななななんと!!!!
新キャラ3体追加だそうですよッ!
調査チームが極秘に活動写真を入手したそうなのでお披露目しましょう!!

1125068189.png

アーミー隊解散のお知らせ

ちびロボ!ではついにアーミー隊が解散。
隊員の一部が訓練に厳しさに耐えかねて脱走したのです。
軍曹は二度と大切な仲間を失わないためにより厳しい訓練をしていたのですがそれが裏目に出たのです。
しかし、優秀で勇敢な隊員ちびロボが、猛獣タオのアジトに単身乗り込み、大切な仲間グワム二等兵の形見のドッグタグを取ってきたことで、グワム生存の希望がわき、アーミー隊は再び、以前より強く、結束したのです!(脱走した腑抜け除く)
んで、アーミー隊はプランを練るということで活動停止状態になり、仕方なく残りの腑抜けの相手をすることになりました。
そして、腑抜けの一人メンヒスのチキンレースに挑戦してみると、よくわかんなくてデタラメにブレーキを踏んだら偶然にもがけすれすれ車体の半分が飛び出す形で停止し、おそらく最高評価であろうSをいただきました。

プログラミングのVB小ネタをちょっと更新しました。
偶然間違えて全角入力モードでコードを打ち込んでしまって気付きました。
もはやトリビアですな。

3Dのあれは形としては完成。
羽が動かないのを気にしなければそのまま3Dゲームに組み込めるようになっています。

1123855921.jpg

敵キャラデータベース

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

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

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

.NET

学校のVC++.NETでDirectXが使えなかったからVB.NETのほうで挑戦。
VB8からアップグレードする機能かなんかを使ってコードを書くまではできたけれどもセキュリティエラーにより動かず。
うちの学校は開発環境用意しておくだけ用意しておいて使えないようにしておくのか!?

ガベージコレクタ

アクセスログ回収。
403エラーが増えてました。
わざとですけどね。

「RPG±0」で、DirectMusicを使えるところまで作りました。
そして、64個のサウンド+ミュージックのバッファも。
最初はObject型かVariant型の配列64個を作って両方に対応するつもりでしたが、型判別が面倒臭そうだし、自動メンバ表示が出てこないので、DirectSoundBufferとDirectMusicSegmentの両方を64個用意し、どちらを使うかを判別するための変数も64個。
どうせCreateしない限りは大してメモリを使わないんだし、変数が64個から192個になったってそう変わるものではないでしょう。
終了処理では、オブジェクトの実態の有無とは関係なしに片っ端からNothingにしています。
この辺ガベージコレクタが働いてくれてるのでCなどのようにNULLじゃなければ解放とかそんなまどろっこしいことはせずに済んで楽チンです。

Withは意外に遅い

VBで、Withブロックを使った場合と使わなかった場合のユーザー定義型へのアクセス速度を計測していたのですが、結構理不尽な結果が出てきています。
高い確率で明日更新するので、「With使ったら速いぜ~」などという情報を無条件に信じ込んでいる人は一度見ておいたほうがいいと思いますよ。

学校のパソコンで、JBuilderが固まるためJpadというエディタで作り直していたのですが、やっぱり固まりました。
どうやらNetscapeを使っていると操作できなくなるみたいです。
ブラウザを使わないとアプレットの確認ができないのですが・・・・嫌がらせですか?

爽やかな初夏の陽気、授業が終わって外の新鮮な空気を胸いっぱいに吸い込もうとしたら・・・・
迂闊だった。ドアの付近は学校内で数少ない喫煙所・・・・

例えば梨

次の更新のための文章を書いていました。
とりあえず「ByValとByRef」のときよりはマシな例え話を持ち出すつもりです。
個人的に重要そうだと思ったところを優先的に更新していくつもりです。
あと、「趣旨」を「はじめに」に変えて、内容を少し手直ししました。
面倒臭いから閉鎖しちゃおうかと思っていたところにあんなことがあったから、多少はやる気になったようです。
とりあえず、例え話を書いたら更新できそうです。

素早きマナー

プログラミングコーナーの「VBで速度比較」を作っていました。
いろいろな処理を違う構文で実行して時間を計っています。
とりあえずあまり数は多くないけど速度比較そのものはできました。
ただ、速度比較に関して、ちょっと困った問題が起こったので、それもあわせて書いているためもう少しばかり時間がかかりそうです。

「HPマナー」の移転の準備を始めました。
まずサイト本体に移転の予告。
そしてこちらに移転先となる場所を作っています。

サンプル集

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

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

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

教室が足りないからって…

「ByValとByRef」を更新しました。
前よりはもうちょっとましなフィクションです。

やっとうちの掲示板に寄生しているヤツが消えてくれました。
今までクッキーを荒されたりして困っていたんですけど、やっと別サーバーの掲示板に行ってくれました。
しかし向こうが勝手にこっちの掲示板を使ってたくせに自分が被害者面するなんて…

「熱・統計力学」は、今年は半分以上が絶対確実に単位を落とすそうです。
なぜなら、テストを受けられる定員が受講者の半分以下だから!
つまり、全員が優を取れる実力でも、下位半分は
バッサリ!
です。
こうなったら何が何でも単位を取ってやります。

シールドブレイカー!

そろそろ更新しないといけないようだったので、「ByValとByRef」を更新しました。
各関数の速度の実測値があるので参考にしていただければ、と思います。
構造体とかクラスはByValでは渡せません。
ちなみに、String型がByValで遅くなる原因は、私は、文字列をいったんコピーしてからそれを参照渡ししているからだと思っています。

「ふにゃgba」のタイトルの模様の元を一通りそろえました。
その画像の下には、通常のステージ用のタイルデータを入れるつもりです。
ちょっとしたこだわりなんですが、「ふにゃgba」の色には、無彩色を除き、灰色を混ぜないようにしています。

←今日が明日になる前に

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

次>