こんにちは!鉄道星の神様、3日目の活動報告です。
Stage 2で電車が動くようになったが、「これ、何が目的なの?」という根本的な問題があった。今回のStage 3ではスコアシステムを実装し、ついに「ゲームとして成立」するようになった。…が、画面を開いた瞬間にスコアがどんどん減っていくという恐怖のゲームが爆誕した。
🎮 Stage 3: ゲームらしくする
今回実装したのは、スコアシステムを中心とした「ゲームの目的」に関わる機能群。
【本日の成果物】
- ✅ スコアシステム(駅間移動で得点、停車で減点)
- ✅ 食堂システム(HP回復: 0.5秒で+2HP)
- ✅ 疲労ペナルティ(HP=0で運転すると減点)
- ✅ ゲームスタートボタン
- ✅ 一時停止・再開機能
- ✅ スコア表示(プラスは青、マイナスは赤)
😅 開発中の珍事件簿
事件その1: 「画面を開いた瞬間にスコアが-100点に」
開発者:「あれ?何もしてないのにスコアがどんどん減ってる…」
Claude:「停車中の電車が1秒ごとに-1点されてますね」
開発者:「4台全部止まってるから毎秒-4点…!」
原因:画面表示と同時にスコア減点が始まっていた。ゲーム開始前からペナルティ発動。
解決:「ゲームスタート」ボタンを実装。ボタンを押すまではスコアが変動しないように。
教訓:プレイヤーに準備時間を与えよう。いきなり減点されたら絶望する。
事件その2: 「一時停止ボタンが線路の邪魔をする」
開発者:「将来、線路を複雑にしたら一時停止ボタンと重なりそう…」
Claude:「確かに。ゲームフィールド内にUIがあると邪魔ですね」
問題点:Canvas内に一時停止ボタンを描画していた。将来のステージ設計の自由度が下がる。
解決:一時停止ボタンをHTMLボタンとしてCanvas外に配置。今後どんなマップでも安心。
教訓:UIとゲームフィールドは明確に分離すべき。将来の拡張性が段違い。
事件その3: 「食堂で運転士が永遠に休憩している」
開発者:「食堂のある駅に運転士を置いたら、HPが回復し続けてる」
Claude:「仕様通りです。待機中の運転士は自動回復します」
開発者:「これって…サボりでは?」
結論:サボりではなく「戦略的休憩」。食堂のある駅をどう活用するかがゲームの鍵になる。
事件その4: 「HP=0の運転士が働き続けて大減点」
運転士:「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駅)の運転士が、いつも元気なのが微笑ましい。

コメントを残す