【マイレース開発記録(22)】ゾーン表示の意味づけ                          

マイレースでは、5匹のウサギがそれぞれのレーンを走り、順位やタイムが表示されます。

最初の実装では、この「順位」と「スピード」だけを結果として表示していました。

しかし、実際に動かしてみると、どうしても一つの違和感が残りました。

順位だけを見ると、

  • 1位=良い
  • 最下位=悪い

という印象が強くなってしまうのです。

もともとこのアプリは、
「評価」ではなく「流れを眺める」ためのツールとして設計していました。

そのため、順位だけではなくその日の流れの質を示す指標が必要だと考えるようになりました。

そこで導入したのが「ゾーン」という概念です。

マイレースでは、ウサギの状態を二つの要素で表しています。

一つは スピード
もう一つは ジャンプ(リズム) です。

スピードは、外側の環境との相性を表します。

ジャンプは、心や体のリズム、内側の状態を表します。

この二つを組み合わせることで、

  • 環境は追い風か
  • 心身は前向きか
  • 今は動くタイミングか
  • 休むタイミングか

という流れが見えるのではないかと考えました。

この考えをコードに落とし込むと、非常にシンプルなロジックになります。

def detect_zone(is_fast: bool, is_jump: bool) -> str:
if is_fast and is_jump:
return "tailwind"
if is_fast and not is_jump:
return "steady"
if not is_fast and is_jump:
return "playful"
return "rest"

判定は次の二つです。

  • 平均より速いかどうか
  • リズム(ジャンプ)が高いかどうか

この組み合わせから、4つのゾーンを作りました。

スピードもリズムも高い状態。

外側の流れも良く、内側のエネルギーも動きやすいタイミングです。

このときは、迷うよりも一歩踏み出す方が自然に物事が進みやすい日になります。


スピードは速いけれど、ジャンプは高くない状態。

環境としては進みやすいものの、内側のリズムは落ち着いている状態です。

無理に勢いを出すよりも、

  • 段取りを整える
  • 一つずつ進める

という行動の方が、結果として安定します。


スピードは遅めですが、ジャンプが高い状態です。

外側の環境はそこまで追い風ではありませんが、内側の気分は軽やかです。

このときは、

  • 寄り道
  • 試しにやってみること

が、後から意味を持つことがあります。


スピードもジャンプも低めの状態です。

このゾーンは、一見すると「停滞」に見えるかもしれません。

しかし実際には、

  • 休息
  • 準備
  • 整理

といった時間が必要なタイミングです。

マイレースでは、このゾーンを「悪い日」とは扱っていません。

むしろ、回復のための重要な時間として位置づけています。


ゾーンは結果画面だけではなく、入力フォームの演出にも使っています。

レースが終わると、その日のゾーンに応じてフォームの色が変化します。

function applyZoneGlow(zone){
formArea.classList.remove(
"zone-tailwind",
"zone-steady",
"zone-playful",
"zone-rest"
);

if(zone === "tailwind") formArea.classList.add("zone-tailwind");
if(zone === "steady") formArea.classList.add("zone-steady");
if(zone === "playful") formArea.classList.add("zone-playful");
if(zone === "rest") formArea.classList.add("zone-rest");
}

これは単なる装飾ではなく、

  • 追い風 → 暖色系の光
  • 慎重 → 落ち着いたグリーン
  • 楽しさ → ピンク系
  • 整える → 青系

というように、視覚的に「今日の流れ」を感じ取れるようにするための工夫です。

ゾーンを導入してから、このアプリの意味が少し変わりました。

順位だけを見ると、どうしても勝ち負けの感覚が生まれます。

しかしゾーンを見ると、

  • 今は進むタイミングか
  • 今は整えるタイミングか

という「流れ」が見えてきます。

このアプリで大事にしたかったのは、まさにこの部分でした。

このゾーン設計も、最初からうまくまとまっていたわけではありません。

最初は判定条件が増えすぎて、

  • 条件分岐が複雑になる
  • 表示の意味が分かりにくくなる

という問題が出ていました。

そこでAIとの対話の中で、

  • ロジックをできるだけシンプルにする
  • UIで意味を補う

という方向に整理していきました。

最終的に、

スピード × リズム

という二軸だけに絞ることで、コードも意味もすっきりした形に落ち着きました。

次の記事は、

【マイレース開発記録(23) スコアボード演出改善】

として、

  • レース結果の表示方法
  • 電光掲示板風UI
  • Canvasアニメーションとの連携

など、結果表示まわりの調整について書いていきます。

\ 最新情報をチェック /

コメントを残す

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