ブロック要素文字という ものがある。初期の文字表示機能しかないパソコンで、絵を出すために使われたそうだ。

次のものを使えば、1つの文字セルを4分割した区画の好きな部分を塗り潰すこ とができる。

▄ U+2584 Lower half block

█ U+2588 Full block

▌ U+258C Left half block

▐ U+2590 Right half block

▖ U+2596 Quadrant lower left

▗ U+2597 Quadrant lower right

▘ U+2598 Quadrant upper left

▙ U+2599 Quadrant upper left and lower left and lower right

▚ U+259A Quadrant upper left and lower right

▛ U+259B Quadrant upper left and upper right and lower left

▜ U+259C Quadrant upper left and upper right and lower right

▝ U+259D Quadrant upper right

▞ U+259E Quadrant upper right and lower left

▟ U+259F Quadrant upper right and lower left and lower right

Unicode に登録されているのおかげで、これらの文字はどこでも使うことがで き、また最近の端末エミュレーターはフルカラーの色指定を解する。

つまり 80x24 文字の標準的な文字端末を 160x48 ピクセルの(ほとんど)フル カラーなビットマップディスプレイとして使うことができるのである。

ただし、1セルでは全景色と背景色の2色しか使えないし、2x2 と言ってもアス ペクト比は「半角」なので 1:2 くらいになる。

この方式で端末に好きな PNM 形式の画像を表示するコマンドを作った。(HDD が壊れて、この頃書いたものが取り出せなくなってしまったのだが、プログラ ムは gist に上げていた ので消えなかった。)

sgp-slime

もげぞうの塔の UI が DQ 的なウィンドウ型に進化していたから、文字 端末でのリッチな表現を探っていた関係で作ったのだと思う。下図はWeb版も げRPGのタイトル画面。(この絵は多分もげぞうさんが描いた のを無断使用している…)

sgp-mogerpg

使用したアルゴリズム

入力されたビットマップの 2x2 の区画をナイスな感じに 2 色に減色しなけれ ばならない。クラスタリングの問題だと思ったので、ちょっと調べたら k平均法 というのがあった。データ点を任意の数 k 個のクラスターに纏めるアルゴリズ ムだ。

結果的にこれが一石二鳥だった。最大4色あるピクセルを2色にグループ分けす るだけでなく、その過程でそれぞれのクラスターの色の平均値が求めらて、こ れがまさに欲しいところの色であるからだ。

一方よくわからなかったところは、ループを何回ぐらいまわせばきちんとした クラスター分けができるのかってこと。なんか 1 回でも悪くなかったけど、2 回まわすことにした。