design and display dotmatrix font for pygame and Minecraft
ドットマトリクスフォントをデザインし、pygameとMinecraftで表示する。
「なつめもじ」フォントを利用しているが、再配布禁止のため、以下のページの一番下の<<「なつめもじ」をダウンロード>>というリンクからダウンロードすること。
nm.zipを展開して得られたnatumemozi.ttfを、fontsフォルダにコピーする。
Python 3.11.9で動作確認済み。 とりあえず、動くか試そう。
python designer.pypythonなんて知らない、あるいは、pygameモジュールが見つからない。 というエラーが出るかもしれない。
Pythonがインストールされているのか、どのPythonが選ばれているのか確認。
python -V
which pythonpygameが無い、というエラーが出る場合は、以下のコマンドでインストールする。
pygameでも動くが、pygame-ceを推奨するので、エラーが出ない場合もやっておこう。両方インストールされていると良くないので、pip uninstall pygameで削除する。
pip uninstall pygame
pip install pygame-ce -Uもう一度、動かしてみる。
python designer.pyこれでも動かない場合は想定外の操作、もしくはバグの可能性があるため、スクショを撮って報告してほしい。
コードが動くなら、とりあえずpyenvとpoetryが無くても良いが、インストールされているか、以下のコマンドで確認する。
pyenv --version
poetry --versionpyenvがインストールされているなら、 pyenvによってPython 3.11.9がインストールされているか確認する。
pyenv versionsPython 3.11.9がない場合は、インストールする。
pyenv install 3.11.9以下のコマンドで、仮想環境が作成され、その中にpygame-ceがインストールされる。
poetry installVS Codeの場合は、新しくターミナルを開けば、仮想環境が有効になるはず。 有効になっていない場合は、以下のコマンドで有効にする。
source .venv/bin/activateあとは、VS Codeが使用するPythonインタープリターを、この仮想環境のものに設定する。 Pythonファイルを開いている状態で、ウィンドウの下部にPython 3.11.9 ('.venv': Poetry)と表示されていればOK。違う場合は、クリックして選択する。
以下のコマンドでpygame-ceをインストールする。一番最初に試した時にインストール済みだったら、この手順は不要になるが、試してメッセージを確認しよう。
pip install pygame-ce- designer.py ドットマトリクスフォントをデザインするツール
以下、未実装
- demo_pg.py ドットマトリクスフォントを表示するデモコード
- demo_mc.py ドットマトリクスフォントをMinecraftで表示するデモコード
横(COLS、デフォルト5ドット)x縦(ROWS、デフォルト7ドット)のドットマトリクスフォントをデザインする。
得られるものは、font.txtというファイル。 あるいは、起動時に読み込んだfont.txtの内容を確認するだけ、あるいは、一部を編集/保存する使いかたもできる。
上部にフォント一覧用の表示領域、左下にデザイン参照用領域(青色)、右下にデザイン編集用領域(赤色)を持つ。 表示領域は、横(DISPLAY_COLS、デフォルト16文字)x縦(DISPLAY_ROWS、デフォルト6文字)の96文字で構成される。
-
表示領域でクリックした文字デザインが選択されて赤くなり、編集領域に大きく表示される。
-
鉛筆ボタンのクリック、あるいはEnterキーを押すと、編集領域のデザインが表示領域の赤色表示位置に書き込まれる。
-
チェックボタンのクリックで、表示領域の全ての文字のデザインデータがfont.txtに保存される。
表示領域でシフトクリックした文字デザインが選択されて青くなり、左下の参照領域に大きく表示される。
緑色の右矢印ボタンのクリックで、参照領域のデザインが編集領域にコピーされる。
- クリック、あるいは、ドラッグにより通過したドットはオンになる。
- その時に、シフトキーを押していた場合は、オフになる。
- ドラッグ中にシフトキーの状態を変化させても良い。
- クリックで、デザイン用文字の選択
- シフトクリックで、参照用文字の選択
フォントデータはfont.txtに、00000,改行11111,改行 といった改行区切り形式で、すべての文字が連続的に保存される。
起動時にfont.txtが存在しない場合は全て0で初期化して編集開始、 存在する場合は内容を読み込んで編集開始する。また、バックアップとしてfont.txt.bakを作成する。
現状のコードでも、例えば、8x8のフォントを扱うことは可能だが、読み込むfont.txtのデータ形式が一致しないと、エラーになる可能性がある。その場合は、font.txtファイルを削除して、再度designer.pyを起動することで初期化され、編集可能になる。
将来的には、ドットマトリクスの横x縦ドット数についてのデータをfont.txtの先頭に記述する予定。
例えば、5x7の場合は、
[{"cols":5},{"rows":7}]
00000,
11111,
10101,
,,,
というような形式。これによって、任意のドット数のフォントデータを柔軟に扱えるようになる。ヘッダーのjson部分に収容文字数、コードの範囲、フォント名などを追加するかもしれない。


