https://github.com/dev001hajipro/typing-game-py
JavaScriptでタイピングソフトの基本部分を作ったので、Python+Tkinterに移植してみました。130行ぐらいで、タイマー、スコア表示、タイピングが実装できました。まだゲーム終了とリトライ機能、音声はありませんが、初心者には参考になると思います。またPython+Tkinter課題がいくつか見えてきました。
目次
TkinterはUI更新はメインスレッドで行う
最初、タイマー機能を実現するために、ワーカースレッドを用意して、そのスレッドでUI更新をしようとしましたが、例外が発生しました。ワーカースレッドでは、データ更新を行い、Tk.after関数で定期的にUIリフレッシュをする機能を別途設けて対応しました。
Tkinterに音声再生はない
Pythonで音声再生をする場合は、PyAudioなどを使う方法がありますが面倒そうです。
Pythonではglobalに状態変数を持ち、それを関数で呼び出す場合コードが汚くなっていく。
Pythonはグローバル変数を関数のスコープで使う場合、globalキーワードを使います。とりあえずグローバル変数を使うと、コードが汚くなるのが分かりました。状態保持用のクラスを作成するなどをしたほうがよさそうです。
ゲームライブラリーを使ったほうが良い
ゲームエンジン、ライブラリーは、入力支援、音声再生、スプライト表示などが簡単に書けるので、PyGame、PySDL2、Godot3 Engineを検討したほうがよいと感じました。