🚂 運転士ぽいぽい開発日記 #1 ~神様、初めて線路を敷く~

こんにちは!鉄道星の新米神様であ~る。(プロモーションは含みません:特にUR…)

今日から「運転士ぽいぽい」というゲームの開発を始める。タイトルからして「なんだそれ?」という感じだが、運転士をつまんで、電車にぽいぽい投げ込むゲームらしい。いや、神様だからつまむんじゃなくて「配置する」って言うべきか…まぁいいや。


🎮 Stage 1: とりあえず画面に何か出してみる


プログラミングは「表示」から…ということで、最初は「Hello World」的なノリで、とりあえず画面に何か表示させることから始めよう。


【本日の成果物】


  • ✅ 800x800pxの正方形キャンバス完成
  • ✅ 40x40pxのマス目(20×20マス)でグリッドシステム構築
  • ✅ 駅を4つ配置(A・B・C・D駅)
  • ✅ 環状線の線路を敷設
  • ✅ 各駅に電車を1台ずつ配置(赤い丸)
  • ✅ 運転士4人を待機エリアに配置(緑の丸)

😅 開発中の珍事件簿


事件その1: 「運転士が消えた!」

運転士を画面下部の待機エリアに配置したはずが、表示されない…!

原因:待機エリアの背景を運転士の後に描画していたため、運転士が背景に埋もれていた。

教訓:描画順序は大事。後から描いたものが上に来る。基本中の基本だなあ。


事件その2: 「駅の配置で迷走」

開発者:「駅Bを17から16に…いや、やっぱり17…いや15…あ、16がいい!」

Claude:「…(黙々と修正)」

結論:最終的に駅の位置が3回も変更。でも結果的にバランスの良い配置になった。


事件その3: 「謎の文字化け?B駅とD駅だけ読めない」

なぜか「B駅待機」と「D駅待機」の文字だけ縁取りがついて読めない状態に。

原因:食堂マーク(🍴)の描画で設定したストローク(縁取り)が、ループで次の駅のテキストに影響していた。

解決noStroke()でリセット。p5.jsあるある… らしい。


🎨 こだわりポイント


1. 駅ごとの待機エリアシステム

当初は画面下部に共通の運転士待機エリアを作る予定で進めていたが、「各駅に専用の待機エリアがあった方がリアル」ということで、急遽仕様変更し、各駅の近くに4マスずつの待機エリアを設置。薄い黄色で表示して、どこが待機エリアかわかるように、視覚的変化をつけた。

2. 食堂マークの実装

A駅とC駅には食堂(🍴)を設置。将来的にはここで運転士のHPが回復する仕様になる予定。小さな黄色い丸に「食」の文字。シンプルだけど分かりやすい?! いや、電車で見えねえええ~。でも今は放置プレイ

3. グリッドシステムの採用

最初は20×20pxの小さなマス目だったが、「見づらい!」ということで40×40pxに拡大。結果、すべてのオブジェクトも2倍サイズになって、かなりマシになった。


📊 現在の仕様


// グリッドシステム
const GRID_SIZE = 40;  // 1マス = 40px
const GRID_WIDTH = 20;  // 横20マス
const GRID_HEIGHT = 20; // 縦20マス

// 駅の配置
駅A: (3, 3) - 食堂あり
駅B: (16, 3) - 食堂なし
駅C: (16, 16) - 食堂あり
駅D: (3, 16) - 食堂なし

// 運転士の初期配置
運転士1: A駅待機エリア
運転士2: B駅待機エリア
運転士3: C駅待機エリア
運転士4: D駅待機エリア

🚀 次回予告


Stage 2では、ついに「運転士をぽいぽい投げる」機能を実装予定!ドラッグ&ドロップで運転士を電車に配置できるようしたい。

さらに、電車が実際に動き始める予定。環状線をぐるぐる回る電車…想像しただけでワクワク……ってしねえよ! プラレールの基本セットかよ!


💭 開発者のつぶやき


p5.jsを初めて使うことになったが、比較的分かりやすいかも。とはいえ、こいつを本領発揮させるには、まだまだ時間がかかるな。昔のFlashを思い出すなあ(年齢がバレる)。

最終的にはSteamで配信したいとか、Nintendo Switchに移植したいとか夢は無駄に大きい。次の「動くものを作る」ところで難易度が上がりそう。プロトタイプ開発は今のところ楽しい!



開発環境:RockyLinux 9 + Apache + p5.js
開発時間:約2時間(駅の配置で悩んだ時間含む)
コード行数:271行
バグ修正回数:5回(主に表示関連)

それでは、また次回の開発日記をお楽しみに!!
運転士たちが無事に電車に乗れる日を夢見て…🚂

P.S. 「ぽいぽい」って名前、やっぱり変??


コメント

コメントを残す

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