ターミナルにドット絵を表示する方法
CUIのコンソールにドット絵を表示する方法についてのメモ
背景色を使う
調べるとよく出てくる方法
エスケープシーケンスを使用して背景色を指定します。
メリット・デメリット
+ カラフルなドット絵を表示できる
- 表示スペースが大きくなる
エスケープシーケンスについてはこの記事(Qiita)を参考
点字を使う方法
紹介してる記事がほとんど見つからない
メリット・デメリット
+ 1行に4ドット表示可能
- ドットごとに色を設定できない
- 表示環境によっては4ビットごとに隙間が発生
点字ドット絵の実装方法
点字はUnicodeから作成すると簡単
ドットの有無を2進数で表現し、ベースとなる0x2800に2進数を加算
.ビットの位置
・・ 03
・・ 14
・・ 25
・・ 67
例.
文字コード ベース 76543210
⣿ 0x28FF <= 0x2800 + 0b11111111
⣴ 0x28FE <= 0x2800 + 0b11111110
⠋⠀0x2813 <= 0x2800 + 0b00010011
文字列配列から点字に変換するサンプル
sample.py
def draw(pattern, W, H):
key = [
[0, 3],
[1, 4],
[2, 5],
[6, 7]
]
# 配列を初期化
output = [[0 for _ in range((W + 1) // 2)] for _ in range((H + 3) // 4)]
for h in range(H):
for w in range(W):
if pattern[h][w] == 'o':
output[h // 4][w // 2] += 2 ** key[h % 4][w % 2]
BASE = 0x2800
for raw in output:
for c in raw:
print(chr(BASE + c), end='')
print()
# 使用例
pattern = [
" oo ",
" o o ",
"o o",
"o o",
" o o ",
" oo ",
]
W = 6
H = 6
draw(pattern, W, H)
$ python3 sample.py
⡔⠉⢢
⠈⠒⠁
まとめ
- 2色のドット絵を表示するなら点字を活用するのもアリ