あいすぱずる

https://github.com/tRensn/DDD-dainagon

GitHub

JavaScript

Node.js

VSCode

アイスクリームのちょっと変わったパズルゲーム

tLen

みかん

てんてん

ロック

推しアイデア

普通の落ちモノゲー......と思いきや、置いたアイスが時間経過で「溶ける」,フィーバーで「凍る」所です。 溶けたアイスをためて、フィーバー時に一掃しよう!

作った背景

ハッカソンのテーマ「D」から、某アイス屋の某フレーバーに発想を飛ばしました。

推し技術

アイスが時間経過で「溶ける」,「凍る」所です。 1年が頑張ってくれました~

プロジェクト詳細

「あいすぱずる」とは

同じアイスクリームを3個繋げて消そう!

スコアを伸ばしてランキング上位を目指します。 ポイントは、アイスの「溶ける」,「凍る」タイミング! 操作方法はおてがるかんたん、十字キーとスペースキーだけ。

推し,審査ポイント

テーマ要素

今回のハッカソンのテーマ「D」から発想を飛ばし、某アイス屋のフレーバー「D納言あずき」から、アイスを消すパズルゲームを作成しました。 推しポイントは勿論、アイスが「溶ける」,「凍る」ところ!

開発の進め方

2年2人,1年2人で開発をしました。 キックオフ後、Figmaを使って、アイデア出し,MVP,ペルソナ設定を行いました。 またサークル室やVCに集まって、事前準備に力を入れました。  ・タスク振り分け→各自プログラム作成(2年と一緒に)→改善点,疑問点,新たなアイデアの共有 の流れで行いました。 また、developを挟むことでコンフリクトを起こさずに開発を行うことができました。

主な担当

愉快な仲間たち ・てんてん→タイトル画面全般,音源,モード分け,任意アイコン設定 ・ロック→ゲーム画面全般,「溶ける」,「凍る」演出,フィーバー ・みかん→バックエンド,物理演算,ランキング,ログイン画面,supabase ・tLen→環境開発,CodeRabbitの導入,Topa'z,後方腕組相談役面

技術チャレンジ/成長度

・てんてん→人生2回目のハッカソンになりました。私はホール画面のUIや、音源を担当しました。こだわった点は、アイコンを自分で選べたり、ランキングをそれぞれのモードごとに分けたことです。まだ、自分で色々出来るレベルじゃないけど、全員追い越します。

・ロック→初めて本格的なゲーム開発に挑戦しました。私はゲームのプレイ画面の2つのモードのうち一つを担当しました。工夫した点としては派手なフィーバーの演出やアイスが時間経過で溶けるシステムです。また、VScode等の扱いを学ぶことができました。

・みかん→初めてバックエンドに挑戦し、supabaseを使ってランキングやログイン機能を作りました。さらに、フロントエンドとのつなぎや、Matter.jsを使用して新たなゲームモードも作りました。対戦機能を実現できました。初めてデプロイをしたのですが上手くいったので良かったです。

・tLen→初めて環境構築をしました。AIと壁打ちしながらですが、環境構築の方法や仕組みを学ぶことができました。

画面詳細

タイトル画面

image

  • ログイン→プレイヤー名,パスワードを記入後、[ログイン],[新規登録]ができる。 また、ログイン後にユーザーアイコンを押すと、任意のアイコン設定,ログアウトが可能。

image image

  • ソロ→「ノーマルモード」と「ころころモード」から選択可能。制限時間(60s)のON,OFFが可能。
  • 対戦→「ノーマルモード」と「ころころモード」から選択可能。制限時間(60s)。

ソロ,対戦選択後、モードセレクト画面にて、?を押すと遊び方を確認できる。 (・「ノーマルモード」→グリッドに積み上げて消すモード ・「ころころモード」→物理演算を使用し、アイスが転がる仕様のモード)

image

  • ランキング→登録している全てのユーザーの、5位までの順位,スコアを確認できる。  「ノーマル」,「ころころ」,「時間なし」,「時間あり」の4つから絞り込み表示ができる。

各プレイ画面

共通仕様 image image

  • 操作方法 ・十字キーでアイスを操作する。クイックドロップはスペースキー。UI上での操作も可能。
  • ゲームオーバー条件  置いたアイスが上の赤線以上になるとゲームオーバー
  • PAUSE  Escを押すとPAUSE画面になる。UI上での操作も可能。「リトライ」,「ゲームに戻る」,「ホーム画面へ」を選択可能。
  • 消える基準  3個以上同じアイスを揃える
  • スコア計算  ・大納言あずき / 10点  ・クッキーアンドクリーム / 5点  ・ストロベリー / 3点  ・チョコミント / -5点    ・消去スコアの計算式   1グループのスコア (game-scene.js:2240)  ・グループスコア = 基礎点 + (個数 - 3) × 2 (例: あずき5個 → 10 + (5-3)×2 = 14点)  ・連鎖ボーナス (game-scene.js:2247)   最終スコア = グループスコア合計 + 3 × (連鎖数 - 1) (例: 2連鎖で基礎8点 → 8 + 3×1 = 11点)

image

  • フィーバー  スコアを一定数溜めると、フィーバータイムに突入。  一定時間でフィーバーゲージがなくなり、通常に戻る。  ・基準    消去のたびに feverGaugeScore += 今回の得点(フィーバー中は加算しない)    feverGaugeScore >= 20 になった瞬間にフィーバー発動    フィーバー継続時間: 10秒    フィーバー発動時: 溶けていたアイスが全部復活(フリーズ)して即マッチ判定
  • 「溶ける」,「凍る」  ・溶ける→時間経過でアイスが溶ける。溶けたアイスは消える能力を失い、エリア内に残り続ける。(時間設定は後述)  ・凍る→フィーバータイムに突入すると、溶けたアイスが「凍る」。凍ったアイスは消える能力を取り戻す。

<ソロについて> 制限時間(60s)のON,OFFが可能。

ノーマルモード

  • 落下速度の変化  ・スコア 速度値   0〜29 58(最遅)   30〜59 166   60〜89 275   90〜119 383   120〜149 492   150以上 600(最速)    フィーバーゲージ & 発動条件(game-scene.js:2171)
  • 溶ける時間は置いてから20秒後

ころころモード

  • 自由落下速度は一定(60px/秒)
  • 溶ける時間は置いてから8秒後

リザルト image

  • ゲームオーバーになると「まもなくリザルトへ...」の表示後、リザルトへ移行。今回のスコア,詳細結果,ランキング、リスタート,ホームボタンが表示される。  ・ランキング→通常と制限時間に分けて表示
  • アイスの塔  スコアによってアイスの段数が増える。   ・4段(パーフェクト!) → 100点-   ・3段(スーパー!)   → 50点-99点   ・2段(グッド!)    → 20点-49点   ・1段(ナイス!)    → 5点-19点   ・0段(もう少し!)   → -5点

<対戦について> 制限時間(60s)

  • ノーマルモード,ころころモード  仕様(速度設定,溶ける時間)はソロモードと同様。

image image

  • 部屋を作る→押すと4桁のコードが表示される。ゲストがコードを入力,認証後、ゲームが開始される。
  • 部屋に入る→押すと部屋コードの入力欄が表示される。入室を押すと、ゲームが開始される。

image

  • 画面左に自分のスコアと相手のスコアが表示される。

リザルト

image

  • 自身のスコア結果と相手のスコア結果が表示される。  ・勝敗によってメッセージが変わる   ・勝ち→あなたの勝ち!   ・引き分け→引き分け!   ・負け→負け....またチャレンジ!  ・もう一度対戦を押すと、再度対戦できる。  ・ホームに戻るを押すと、ホームに戻ることができる。

今後の展望

スマホ版作りたいなぁ→できたなぁ (比率がおかしいのでそこは改善点)

技術スタック

フロントエンド ・Phaser 4.1.0 - ゲームフレームワーク ・JavaScript (ES Module) - 言語 ・Matter Physics - 物理エンジン(ころころモード使用)

バックエンド ・Express 5.2.1 - Web サーバー/API フレームワーク ・Node.js - ランタイム ・Supabase - PostgreSQL ベースのバックエンド BaaS(ランキング保存など)

その他/開発ツール ・ESLint - リント ・Prettier - コード整形 ・Nodemon - 開発時自動リロード ・Node.js Test Module - テスト実行 ・Render - デプロイ

tLen

@te