ボード ゲームBlokusのコマンド ライン バージョンを作成しています。行の高さいっぱいにピースを配置したいと考えています。Unicode 文字 █ (U+2588) を使用しようとしましたが、次のように行に垂直方向のギャップが残ります。
どうすれば全行を占めることができるか知っている人はいますか?
ボード ゲームBlokusのコマンド ライン バージョンを作成しています。行の高さいっぱいにピースを配置したいと考えています。Unicode 文字 █ (U+2588) を使用しようとしましたが、次のように行に垂直方向のギャップが残ります。
どうすれば全行を占めることができるか知っている人はいますか?
これらの文字は、定義上、文字セル全体を埋めることになっています。そうでない場合は、使用しているフォントに問題がある可能性があります。(たとえば、デフォルトのフォントにその文字が含まれていない可能性があるため、端末は異なるメトリックの代替フォントを使用する必要があります。)
"\x1b[7m"
これを回避するには、逆ビデオモード( )に入り、スペース文字を出力し、終了したら元に戻す( )ことでブロック文字を「偽造」することができ"\x1b[0m"
ます。
U+2588 は、端末の行の高さ全体を使用する必要がありますが、フォントの問題により、常にそうであるとは限りません。
ブロック要素文字は、条項 15.8 Unicode 文字の幾何学的記号で説明されています。[…] ターミナル アプリケーションをエミュレートする場合、ブロック要素文字を実装するフォントは、U+2588 フル ブロックなどの文字の隣接するグリフが、それらの間にギャップのないソリッド パターンを作成するように設計する必要があります。」</p>
ただし、U+2588 をサポートするフォントが常に正しく実装されているとは限りません。そのため、DejaVu Sans など、U+2588 の正しいグリフを持つフォントにフォントを設定できるかどうかを確認する必要があります。
単純な端末をエミュレートするソフトウェアやワープロなど、単純な端末よりも複雑な環境で U+2588 とその仲間を使用している場合は、おそらく別の問題もあるでしょう。U+2588 がフォントに正しく実装されている場合、フォントの高さ全体を使用しますが、通常、ラインの高さ全体を使用するわけではありません。通常、行の高さはフォントの高さ (フォント サイズ) よりも大きいため、それらを同じにする (テキストを「ベタ塗り」にする) ための特別な措置が必要になります。