エラー解決

PythonのPygame Zeroで日本語フォントの文字化けを解決する方法

PythonのPygameZeroで日本語フォントの文字化けを解決する方法

Pygame Zeroは、Pythonでゲーム開発を行うための簡単で効果的なライブラリです。

しかし、日本語フォントを使用しようとすると、しばしば文字化けの問題に直面します。

この記事では、Pygame Zeroで日本語フォントの文字化けを解決するための具体的な手順と、関連するトラブルシューティングのヒントを紹介します。

結論から言うと、「日本語に対応したフォントファイルを用意し、スクリプト内でファイル名を指定する」というだけです。

詳しくは後述しています。

ゲーム開発を行う際の日本語の問題を解決することで、魅力的なゲーム開発ができる手助けになれば幸いです。

「動画の方が良い」という方は、以下のYouTube版をご覧ください。

状況説明

今回の記事では、日本語を表示したいのに下図のようになってしまう場合の解決策を取り上げます。

screen.draw.textメソッドの第一引数に表示したい文字を「日本語で」指定すると、文字化け?というか上手く表示されない状況です。

日本語フォントが文字化けする原因

日本語フォントが文字化けする主な原因は、

  • 使用しているフォントが日本語の文字をサポートしていない
  • ファイル名が正しくない
  • ファイル名に大文字が含まれる
  • フォントファイルへのパスが正しくない
  • 文字エンコーディングの問題

などがあります。

使用しているフォントが日本語の文字をサポートしていない

これは最も一般的な原因の一つです。

フォントが日本語の文字セットを含んでいない場合、それらの文字は正しく表示されません。

この原因について、以降で詳しく解説します。

ファイル名が正しくない・大文字小文字の間違い

フォントファイルの名前が間違っている場合、フォントファイルを正しく読み込めません。

これは「よく確認しましょう」ということですね。

フォントファイルへのパスが正しくない

ファイル名と同様に、パス(保存先)が間違っているとファイルを正しく読み込めません。

これも「よく確認しましょう」ということですね。

文字エンコーディングの問題

Pythonの開発環境で文字エンコーディングが異なると、文字化けする場合があります。

現在はデフォルトのエンコーディングはUTF-8ですが、古いシステムや設定を使用している場合に起きます。

また、ファイルを作成する際に異なる言語環境で作成されるとこの問題が発生します。

日本語フォントのサポートを確認する

システムにインストールされているフォントを確認する方法は、オペレーティングシステムによって異なります。

Windowsでは「コントロールパネル」から、macOSでは「フォントブック」アプリケーションを使用し、Linuxではコマンドラインツール(fc-list)を利用します。

この記事では、各OSごとの操作手順は省略します。

ただし、pygamezeroで「日本語フォントを使うと文字化けする」からといって、システムのデフォルトサンセリフフォント(例えばWindowsならArialなど)を変更するというのはやめた方が良いでしょう。

pygamezeroでは問題が解決しても、他の場面で不具合が生じる恐れがあるからです。

文字化け解決までの3ステップ

使用しているフォントが日本語の文字をサポートしていないために起こる場合、次の3つのステップで解決できます。

①日本語対応のフォントファイルを用意

システムフォント(メイリオ、MSゴシック等)を指定する方法も存在するようですが、私の環境では再現できませんでした。

この記事では、フリーのフォントファイルを用意し、利用する方法を紹介します。

まずは、フリーフォントを探しましょう。

注意点として、商用利用か?など規約をしっかり確認してください。

開発したゲームを有料アプリで公開する場合などは、後からトラブルにならないように十分気を付けてください。

今回はこちらのあずきフォントを利用させて頂きました。

利用規約も確認し、問題ありませんでした。

あずきフォントさん、ありがとうございます。

②フォントファイルを入れるフォルダを用意

ダウンロードしたものがzip形式の場合、それを展開してttf形式のファイルを用意します。

これをプロジェクト内のfontsフォルダに入れます。

③スクリプト内でフォントファイルを指定

日本語対応のフォントを用意したら、Pygame Zeroのscreen.draw.textメソッドの第3引数以降にfontname属性でフォントのファイル名を指定します。

import pgzrun

WIDTH = 300
HEIGHT = 200

def draw():
    screen.clear()
    screen.draw.text("Hello World", (10, 10))
    screen.draw.text("こんにちは、世界", (10, 100), fontname='azuki.ttf')

pgzrun.go()

ファイル名はシングルクォーテーションで囲むのを忘れずに。

上手く表示されました!

とてもかわいいです。

文字ごとにフォントを変えることもできるので、fontname属性で指定してください。

*上手くいかない場合

今回いくつかテストしたうち、こちらのサイトで公開されていたフォントファイルを使用したところ、上手くいきませんでした。

日本語フォントのはずですが、上手く読み込めない場合があります。

その理由は、使用する文字の種類(ひらがな、カタカナ、漢字)が対応していないためです。

その場合は諦めて他のフォントを使うようにしましょう。

この経緯については、ブログ記事では省略します。

詳しく知りたい方はこちらの動画版をご覧ください。

よくあるトラブルシューティング

ファイルもファイル名もファイルパスも問題がないのに、「フォントが見つからない」などのエラーが出る場合があります。

その場合は「ファイル名が小文字である」という原因でファイルが読み込まれないことがあります。

その場合はフォント名を修正するか、別のフォントファイルを探しましょう。

まとめ

今回は、Pygame Zeroで日本語フォントの文字化けを解決するための具体的な手順と、関連するトラブルシューティングについて解説しました。

Pygame Zeroで日本語フォントを使う際は、システムフォントの確認、適切なフォントの選択、正確なパス指定が重要です。

これらのポイントを押さえておけば、ゲームに日本語テキストを効果的に組み込むことができるでしょう。

もし、この記事では解決できない事例がありましたら、コメント欄で教えてください。

また、この記事の内容と同じものをYouTubeに動画で公開しています。

宜しければ、ぜひご覧ください。

今後もPythonを中心としたプログラミングの情報をお届けします。

Pythonの演習はこちら ▶

以下のメルマガにご登録頂くと、不定期に配信をお届けします。

ぜひ購読してください!

それでは、ステキなPythonライフを!

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 最近ではPythonを用いたアプリ開発、ウェブアプリケーションの開発と運営に没頭。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です