【Pythonで脳トレアプリ開発】ロジックを進化させろ!「色読み」グリッド作成の全思考プロセス

ALL

こんにちは、Tech Samuraiです!
今回は、シンプルな脳トレゲーム「色読み」を題材に、PythonとPySide6でGUIアプリケーションを開発した際の、ロジック構築の思考プロセスを段階的に共有します。

「色読み」とは、例えば「」と書かれた黄色の文字を見て、文字の意味(赤)ではなく、文字の色(黄色)を答える、という脳の認知機能を鍛えるトレーニングです(ストループ効果として知られています)。

この記事では、最終的な完成コードだけをお見せするのではなく、「単純なランダム表示」から始まり、次々と追加される制約(ルール)に対応するために、どのようにプログラムのロジックを「進化」させていったか、その試行錯誤の全過程を記録します。


Step 1: 基本機能 – 「文字と色が一致しない」ランダムなグリッド

最初の目標:
4つの漢字(赤, 青, 緑, 黄)を、それぞれの意味とは異なる4色(red, blue, green, yellow)で、6列x5行のグリッドにランダム表示する。

コアロジック

この段階のロジックは非常にシンプルです。

  1. 30個のセル(マス目)を順番に処理するループを開始します。
  2. 表示する漢字(例:「赤」)を4種類の中からランダムに選びます。
  3. 4色の候補リストから、今選んだ漢字が持つ意味の色(例:「赤」なら`’red’`)を**除外**します。
  4. 残った3色の候補の中から、文字色をランダムに選んで、漢字に適用します。

この実装により、基本的な要件である「文字と色が一致しないランダムなグリッド」が完成しました。しかし、実行してみると、偶然同じ色が3つ、4つと横に並んでしまい、見た目が少し単調に感じられました。


Step 2: ロジック進化 – 「3つ以上の色連続」を禁止する

次の目標:
グリッドの見た目をよりカラフルにするため、「横に3つ以上同じ色が続かない」という制約を追加する。

コアロジックの変更点

この制約を追加するには、プログラムに「直前の状態を記憶する」能力を持たせる必要があります。

  1. 行ごとに、使用した色を記録するためのリスト(previous_colors)を用意します。
  2. 各セルの色を決定する直前に、previous_colorsの末尾2つをチェックします。
  3. もし直近2つの色が同じだった場合(例: `[‘blue’, ‘blue’]`)、その色(`’blue’`)を今回の色の候補から**除外**します。
  4. これにより、3番目に同じ色が選ばれる可能性を物理的に排除しました。

この変更で、生成ロジックが単純なランダムから「直前の状態を考慮する」ロジックへと進化しました。


Step 3: 最終形態 – 「2つ以上の色連続」を禁止する

最終目標:
色の多様性をさらに高めるため、「横に同じ色が2つも続かない(隣り合うセルの色が必ず異なる)」ようにする。

コアロジックのさらなる進化

Step 2のロジックを、さらにシンプルかつ厳しくすることで、この目標は達成できます。

  1. 各セルの色を決定する際に、直前の1つのセルの色だけをチェックします。
  2. その直前のセルの色を、今回の色の候補から**除外**します。

この最終的な実装により、各行で隣り合うセルの色が必ず異なる、最もカラフルで脳が混乱する(?)グリッドが生成されるようになりました。


完成したコード

この一連の思考プロセスを経て完成したスクリプトの全コードは、以下のGitHubリポジトリで公開しています。ぜひ、あなたの手元で動かしてみてください。


https://amzn.to/3KCNqXn

まとめ:ロジックは進化する

今回の開発は、非常にシンプルな要求からスタートし、

「要件追加 → 問題点の発見 → ロジックの修正・改良」

というサイクルを繰り返すことで、最終的な形にたどり着きました。優れたソフトウェアは、決して一度で完成するものではなく、このように段階的に「進化」していくものです。

この思考のプロセスが、あなたが自身のプロジェクトで問題に直面したときの、一つのヒントになれば幸いです!

【Python/PySide6】ユーザーと共に育てる!パターン記憶ゲーム開発の全ステップまとめ

コメント

タイトルとURLをコピーしました