4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ターミナルにドット絵を表示する

Posted at

ターミナルにドット絵を表示する方法

CUIのコンソールにドット絵を表示する方法についてのメモ

背景色を使う

調べるとよく出てくる方法
エスケープシーケンスを使用して背景色を指定します。

メリット・デメリット
+ カラフルなドット絵を表示できる
- 表示スペースが大きくなる

スクリーンショット 2024-12-04 125332.png

エスケープシーケンスについてはこの記事(Qiita)を参考

点字を使う方法

紹介してる記事がほとんど見つからない

メリット・デメリット
+ 1行に4ドット表示可能
- ドットごとに色を設定できない
- 表示環境によっては4ビットごとに隙間が発生

スクリーンショット 2024-12-04 125332.png

点字ドット絵の実装方法

点字は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色のドット絵を表示するなら点字を活用するのもアリ
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?