🚂 運転士ぽいぽい開発日記 #3 ~ゲームになった!でもスコアがマイナス爆走~

こんにちは!鉄道星の神様、3日目の活動報告です。

Stage 2で電車が動くようになったが、「これ、何が目的なの?」という根本的な問題があった。今回のStage 3ではスコアシステムを実装し、ついに「ゲームとして成立」するようになった。…が、画面を開いた瞬間にスコアがどんどん減っていくという恐怖のゲームが爆誕した。

🎮 Stage 3: ゲームらしくする

今回実装したのは、スコアシステムを中心とした「ゲームの目的」に関わる機能群。

【本日の成果物】

  • ✅ スコアシステム(駅間移動で得点、停車で減点)
  • ✅ 食堂システム(HP回復: 0.5秒で+2HP)
  • ✅ 疲労ペナルティ(HP=0で運転すると減点)
  • ✅ ゲームスタートボタン
  • ✅ 一時停止・再開機能
  • ✅ スコア表示(プラスは青、マイナスは赤)

😅 開発中の珍事件簿

開発者:「あれ?何もしてないのにスコアがどんどん減ってる…」

Claude:「停車中の電車が1秒ごとに-1点されてますね」

開発者:「4台全部止まってるから毎秒-4点…!」

原因:画面表示と同時にスコア減点が始まっていた。ゲーム開始前からペナルティ発動。

解決:「ゲームスタート」ボタンを実装。ボタンを押すまではスコアが変動しないように。

教訓:プレイヤーに準備時間を与えよう。いきなり減点されたら絶望する。

開発者:「将来、線路を複雑にしたら一時停止ボタンと重なりそう…」

Claude:「確かに。ゲームフィールド内にUIがあると邪魔ですね」

問題点:Canvas内に一時停止ボタンを描画していた。将来のステージ設計の自由度が下がる。

解決:一時停止ボタンをHTMLボタンとしてCanvas外に配置。今後どんなマップでも安心。

教訓:UIとゲームフィールドは明確に分離すべき。将来の拡張性が段違い。

開発者:「食堂のある駅に運転士を置いたら、HPが回復し続けてる」

Claude:「仕様通りです。待機中の運転士は自動回復します」

開発者:「これって…サボりでは?」

結論:サボりではなく「戦略的休憩」。食堂のある駅をどう活用するかがゲームの鍵になる。

運転士:「HP 0/100です…でも頑張ります…」

システム:「疲労ペナルティ -1点」「疲労ペナルティ -1点」「疲労ペナルティ -1点」

開発者:「スコアが急降下してる!」

状況:HP=0の運転士に電車を運転させると、1マス進むたびに-1点の大ペナルティ。

結論:疲労した運転士は休ませるべき。ブラック企業プレイは破滅への道。

🎨 こだわりポイント

1. スコアの色分け表示

スコアが一目で分かるように色分け。

  • 🔵 青色: プラスのスコア(順調)
  • 🔴 赤色: マイナスのスコア(ピンチ)

赤色のスコアを見ると「やばい」と直感的に分かる。

2. 食堂システムの視覚的フィードバック

食堂のある駅で待機中の運転士は、HP表示が緑色になる。「今回復してますよ」というサイン。地味だけど分かりやすい。

3. 0.5秒で+2HP回復の絶妙なバランス

最初は「1秒で+10HP」にしていたが、回復が早すぎてヌルゲー化。試行錯誤の結果、「0.5秒で+2HP(= 1秒で+4HP)」に落ち着いた。100HPの全回復に25秒かかる。

この調整により「運転士をいつ休ませるか」の判断が重要になった。

📊 実装したスコアシステム

得点ルール

// 駅間移動完了で得点
電車が駅に到着 → 移動距離分の得点
例:A駅→B駅(13マス) → +13点

// 停車中の電車で減点
運転士なしの停車電車 → 1秒ごとに-1点
例:4台全停車 → 1秒で-4点

疲労ペナルティ

// HP=0の運転士が運転
運転士のHP = 0
↓
1マス移動するたびに-1点
↓
スコアが急降下

教訓:疲労した運転士は休ませよう

HP回復システム

// 食堂での回復条件
- 食堂のある駅に待機
- 電車に乗っていない(待機中)
- HPがMAX未満

→ 0.5秒ごとに+2HP回復
→ HP表示が緑色に変化

💡 実装で学んだこと

ゲームバランスは調整が命

最初の設定(1秒で+10HP回復)だと簡単すぎた。何度も調整して、ようやく「戦略が必要だけど無理ゲーではない」バランスに到達。数値一つで難易度が激変する。

UIの配置は将来を考えて

Canvas内にボタンを置くと、後でマップを変更したときに邪魔になる。最初から外に出しておけば、どんなステージでも対応可能。

視覚的フィードバックの重要性

HP回復中の運転士を緑色で表示するだけで、プレイヤーは「あ、今休憩してるんだな」と理解できる。言葉で説明するより、色や形で伝える方が効果的。

🎮 実際に遊んでみた感想

面白いポイント

  • スコアという明確な目標ができて、やる気が出る
  • 運転士のHP管理が戦略的で面白い
  • 食堂のある駅をどう使うかで勝敗が分かれる
  • 疲労した運転士を無理に働かせると破滅する緊張感

戦略のポイント

  • 長距離路線を優先して走らせる(得点効率が高い)
  • 食堂のある駅で運転士をローテーション
  • HP=0になる前に必ず休ませる(ペナルティ回避)
  • 全電車を止めないように運転士を配置

今後の課題

  • 複雑な路線図がほしい(環状線だけでは飽きる)
  • 分岐システムを実装したい
  • 複数ブロックの駅を作りたい
  • ゲームオーバー・クリア判定がない

🚀 次回予告

Stage 4(予定)では、マップデータ化に着手する。

  • 🗺️ マップデータ構造の設計
  • 🏗️ 複数ブロック駅の実装
  • 🔀 分岐システムの実装
  • 🎨 線路描画の改善(枕木風)

現在はマス目の座標を直接ハードコードしているが、これだと2面目以降のステージが作れない。マップデータとして定義できるようにして、ステージを量産できる体制を整える。

💭 開発者のつぶやき

「ゲームになった瞬間」を実感できた回だった。スコアがあるだけで「もっと上手くやりたい」という気持ちが生まれる。人間、数字で評価されると燃える生き物なんだなと実感。

食堂システムは当初「おまけ機能」のつもりだったが、実際に遊んでみると「どの駅を食堂にするか」が戦略の核になった。おまけのつもりで作った機能が、ゲームの中心になることもあるんだと学んだ。

次回はマップデータ化という大規模リファクタリング。既存コードを壊さずに、新しいシステムに移行できるか。挑戦しがいがある。


開発環境:RockyLinux 9 + Apache + p5.js
開発時間:約4時間(スコアバランス調整に1時間、UI調整に1時間)
コード行数:約850行(Stage 2の512行から大幅増加)
バグ修正回数:6回(スコア更新タイミング、HP回復条件など)
調整回数:12回(HP回復速度、減点間隔のバランス調整)

それでは、また次回の開発日記でお会いしましょう!
運転士たちが適切に休憩を取れる、ホワイトな鉄道星を目指して…🚂

P.S. 食堂のある駅(A駅とC駅)の運転士が、いつも元気なのが微笑ましい。


コメント

コメントを残す

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