VB.NETでNullを含むテキストファイルを読み込む

Windowsフォームアプリケーションで単純にログファイルをTextBoxに表示したいが0x00(NUL)コードがファイル内にあるとそこまでしか読み込んでくれない。どうしたものか。

これで少々詰まったので備忘として書いておく。
結果的には一旦ファイルをByte配列として開き、NULをスペース(0x20 SPC)に置換、その後文字に変換することで正常に表示できた。

コード:

 

ログファイルはShift_JISを想定、
あとこの方法だとファイルサイズが大きいものは処理が遅そうだが、事は足りたし自分はインフラ屋なので後は知らん(逃げ)

 

 

HSPの迷路プログラム更新した

こんちゃ

せっかくの春休みなのに風邪を引いて全く活発に活動できないのでごろごろしつつ一昨年くらいに書いた迷路プログラムを改造してみた。

なにもおもしろい機能は増えてないが、セーブロード周りの強化と細かい動作の改善程度。

laby150

 

前回と決定的に違うのは、ちゃんと配布するところです。

こちらからどうぞ。

ダウンロード

2018年6月追記:今更だけど再構築に伴ってリンク切れてたので修正しました。

 

ウィザードリィっぽい迷路探索

たまにHSPでなんかつくろうと思った。なんとなく遊べるものを作るのにはHSPは手軽でいい。

ウィザードリィ風にしようと思った理由は簡単である。画面に線しか引かなくていいからだ。酷い理由だな。

 

labyexp

 

まずはうろうろ出来るようになった。

迷路は1マスあたり16進2桁で記録している。壁を1で道を0にするというのだとあとから仕掛けなど入れようと思ったときに道の種類など追加できない。まぁいまのところ種も仕掛けもないただの迷路なんだけど…

次に自動生成機能でも作ろうと思ったのだが、迷路を自動生成するならば2進で表せる迷路の方が簡単じゃないかと思った。というわけで先に0と1で表した迷路データを16進2桁のデータに変換するコードを書いた。

コンバータ部ができたところで、これなら手軽に使えるマップエディタが作れるなと思ったので自動生成はそっちのけでマップエディタを作成。

edit-exp

これでマップエディタで迷路を作ってそのまますぐ遊べる。

マップエディタで複雑な迷路を作れるようになると、今度は自分で作った迷路にもかかわらずクリア出来ないという事案が多発するようになった。クリアできない迷路ほど腹立たしいものはないので今度はミニマップをつけた。

minimap

ミニマップはあってないようなタイトル画面でON/OFFできる。自分で方眼紙にマッピングして遊ぶという方はOFFにして遊んで下さい。

さて、このへんまでくると迷路の自動生成はどうでもよくなってきた。今度はこの迷路にどんな仕掛けをつけるかが問題だ。謎解きくらいは盛り込みたいものだが、未だに方向性を絞れずにいるのでこのプロジェクトは停滞中。

 

 

 

 

ところで、似たような見た目の迷路を2,3年前にも作った。

labyrus

今回のものと昔作った物の決定的な違いは視界にある。

以前作った物は自分が今いるタイルしか表示されない。つまるところお先真っ暗。

今回のは2.5先まで見えている。

まぁただそれだけなんだが。

 

2016年2月追記

最新版置いときます

 

 

Bukkitサーバー用のプラグインを作ってみた

マインクラフトサーバーの更新にあたり、サーバープログラムをbukkitからSpigotに変更した。

また、MCbansと競合することがあった管理・ロギングプラグインであるShadowAdminをやめて定番のHawkeyeに入れ替えることにした。特に問題はなく移行は完了したのだが、ShadowAdminについていたチャット整形機能が使えなくなったためチャットの表示はデフォルトに戻ってしまった。

2014-04-01_19.52.58

使用上はなにも問題がないがShadowAdminの表示に見慣れていたのと、時間表示が便利であったためチャットを整形するプラグインを導入することにした。

もちろん先に既出の同等プラグインがないか探したけれど発見できず、ならばと自分で作ることにした。プラグインの作り方についてのページは英語、日本語ともに豊富で情報を集めるのに不自由はなかった。

まずはじめにプラグインを作成するにあたり、Javaの基本的な書き方について押さえなくてはならない。今までJavaは書いたことがなかった。

開発環境にEclipseを用意し、解説を読みながらとりあえず書いていく。イベントを関知する部分でちょっと悩んだが非常に簡単な機能のプラグインということもありあっけなく完成してしまった。

timecode

 

 

今回Bukkitのイベント一覧をざっと見たが、様々なイベントを取得できるようになっており、アイディア次第で様々な楽しいプラグインを作れそうだと感じたが、他にたいしたアイディアもなくこれ以来プラグインはおろかJavaすら書いていないのであった。

 

HSP3 横スクロールシューティング

先日はHSPで星もどきを多重スクロールするプログラムについて紹介しましたが、ああいうのはいかにも横シューの背景であるのでレーザーを撃てる自機を作ってみます。

とりあえず、以下のプログラムを実行してみてください。なお、今回は敵のプログラム部分は抜いてあります。

 

動作イメージがわかったところで各セクションについて説明を加えていきます。

各命令についてはHSPの命令リファレンスなどを参照してください。

 

 

//ショットフラグ用の変数

・この配列変数には、「レーザーが画面に表示されているか」のフラグが格納されます。

・上のサンプルでは配列が10ですので、画面上には同時に10本のレーザーが表示できます。

 

//画面初期化

・次フレーム描画のためにここで画面を一度まっさらな状態にしています。

 

//キー入力判定

・getkey及びstick命令でキー入力を取得しています。

・stick命令は同時押し判定が必要な時に便利です。

 

//ショットフラグを立てる

・スペースキーが押された場合にショットフラグを立てます。配列の若い方が優先されます。

・shotLimitで1フレーム中にフラグを立てられる数を1つに制限しています。

 

//自機移動

・キー入力に基づいて自機を移動します。サンプルでは上下左右ともに移動速度は4ドット/フレームです。

 

//レーザー描画

・ショットフラグに基づいてレーザーを描画します。

・サンプルではlaserLength(レーザー長)は100です。自機の前に突然長さ100のレーザーが現れるのは不自然ですから、64行目で自機からレーザーが伸びる処理をしています。レーザー長が100に達するまではレーザーの始点は自機に追従します。

・レーザーは10ドット/1フレームの速度で発射されます。

・65行目は実際にline命令でレーザーを描画しています。

・66行目ではlaserLengthが100に達したレーザーを画面右にスクロールしています。レーザ長や速度を変更する場合は、64行目のlaserLengthとlaserPosXに数値を一致させなければなりません。

・67行目では、画面外に出たレーザーのショットフラグを解除(下ろす)しています。

 

//背景スクロール

前述の通り、前回のプログラムを使用しています。

 

//画面に反映

・試してもらえばわかりますが、redraw部分がないと画面がちらつきます。

 

 

ざっと説明させてもらいましたが、不明な点などはコメント欄にお寄せいただければ可能な限りお答えいたします。

それでは今回はこの辺で。

 

 

HSP3基礎編 ループ命令

今回はHSPネタです。

大昔に自分が書いたコードを見ていたら、「星の多重スクロール」をさせるプログラムがありました。星といってもpsetで点を打って動かしてるだけです。横スクロールシューティングの背景でよくあるアレです。

 

仕様としては、3レイヤーで各20個の点が移動します。

続きを読む