Monthly Archives: November 2014

カーソルキーで座標指定できるCUIマインスイーパー with C#

vimとかemacsとかみたいな, 仮想端末上で動くソフトウェアって, どうやって描画をしているのか気になったので調べたところ,
C言語だとcursesライブラリを使う, C#ならConsoleクラスでごにょごにょするとできるということで, 遊んでみた.
その結果がマインスイーパー

仕様

C#で書かれたコンソール画面上で動くマインスイーパー. したがって.NETのランタイム必須
行数, 列数, 地雷数を入力したら, そのあとはカーソルキー+Enterキーで座標を指定.
もちろん地雷を踏んだらゲームオーバー
画面が下にスクロールしていかない仕様. わりと本格的に見える…?
チェックしたときに周りの地雷の数が0個なら, 隣の0このマスもどばって開くアレも実装

minesweaper

それっぽい!すごい!
画像だと見えないけどカーソルがちゃんとアンダーバー上にあります.
CUIでも結構がんばれるんだなと思った.

アプリケーション本体のダウンロード

ソースコードのダウンロード

どのようにして実現したか

Console.Clear で画面をまっさらに
Console.SetCursorPosition でカーソル位置を指定(左上が原点)
Console.WriteもしくはWriteLineでカーソル位置を起点として文字列描画

cursesだとこれよりはめんどくさいけどいうほどめんどくさいわけでもないはず.

(開設半年にしてやっとこさ動くものをアップロードした)

bmp→wav変換をしてみたけど……

何をしたのか

bmpファイルのヘッダ以外のデータの部分をそのまんまwav化した.
wavファイルのチャンネル数は1, 量子化ビット数は8bitとした. サンプリング周波数は自由に決められるがとりあえず44100kHzにした.
言語はC#. 本体データの読み取りにBinaryReader.ReadBytes()を使った. リトルエンディアンとかはとりあえず気にしないこととした.

ソースコード

usingとかは省く.

結果

音声試聴時の注意 不意に大きな音が流れます. 音量を絞って聞いてください.

画像1
(24bit Color)

画像2
(24bit Color)

画像3
(8bit モノクロ)

改良, 発展案

wav→bmpをしてみる.
頑張ってきれいな絵になる音を探してみると面白そう?
色の割り当てとかどうしようか.

感想

周波数領域のお絵かき(参考 – サウンドスペクトログラムに画像を埋め込む – 人工知能に関する断創録)
があったのでやってみたのだが何とも言えなかった. でも音として聞こえただけマシだったとは思う
3枚目の画像みたいなモノクロだと意外とそれっぽくなる???
画像としても綺麗で, なおかつ, 音声としてもまともに聞こえるような画像は果たしてこの世にあるのか