マップ上の演算子を取って、条件に合うスコアを作って先に進もう!
リンク
https://unityroom.com/games/01_zerone_10
PCやスマホで遊べます。

ゲーム概要
2025年春ハッカソンのお題は「ぐるぐる」「じゅう」でした。
「じゅう」→10→2進数表記が思いつきました。
様々な演算を行ってスコアを目的の値に近づけるゲームを作ることにしました。

このステージを見てみましょう。矢印キー or 右下のボタン入力で移動できます。
左上のスタートから移動して、ゴールまでたどり着いて、かつスコアを10にするにはどうすればいいでしょうか?

こんな動き方が考えられます。

計算は正しかったようです!
ちょうどスコアが10になり、ゴールが開きました。

こんな感じの計算を色々なステージで行います。

個性豊かな27つのステージが遊べます! チュートリアルから超難関ステージまで幅広い難易度です。
中の話
メンバー
プログラマ
@s9 (22B リーダー)
@inaniha_1728 (25B)
@2251799813685248 (25B)
@pasa (25B)
@kosyou (25B)
グラフィック
@tobuhitodesu (23B)
サウンド
@jupiter_68 (24B)
テーマ
「ぐるぐる」「じゅう」です。
じゅう→10→2進数っぽい→2進数のパズル という方針になります。
紆余曲折あり、以下でまとまります。
グリッド線のマス目の上をプレイヤーが移動するカード(枚数や組み合わせは指定)を用いて移動して演算子のマス目を通り目標の数字にしていくゲーム
スケジュール
準備期間が6日, 開発期間が1.5日(土曜日+日曜日前半)ありました。
準備期間の2日目にゲームの方針が決まりました。
当初はスコアの満たすべき目標が複数あったり、スコアが2倍になる目標がありました。しかし、実際のステージを作る中で複数の目標をふくむステージがあまり出てこなかったため、最終的には「スコアを〇〇にする」というステージが主になりました。
画面遷移の議論・グラフィックの議論(当初はドット絵を考えていたが後に変更)・サウンドの議論・プログラムの設計についての議論などを行い、おおむね準備できている状態で開発に入りました。
開発1日目の時点でゲームとして遊べる状態になっていました。
2日目はゲームロジック以外の部分(UX向上, アニメーション導入, グラフィックの調整など)をおこない、クオリティアップを実現しました。
春ハッカソンは、集団開発に慣れていないメンバーと2日ほどで共同開発するのが非常に難しいのですが、余裕をもって完成できました。
実装
概要
Unity+C#で実装しました。
部内Gitでプログラマ(5人)の進捗管理をおこないました。
Title.unity(タイトル画面), StageSelect.unity(ステージ選択画面), Game.unity(ゲーム画面)の3つのシーンを事前に作りました。
Game.unityについては、描画的に分けられそうな単位でプレハブを作り、シーンではなくプレハブを各自で編集してもらうことで、各々のシーンの編集が衝突しにくくなるようにしました。
プログラマは新入生が多い(4人)ことから、プログラムの依存関係をなるべく切り離しました。
たとえば描画については、後述するStageData.csの中身さえ知っていれば、他者の進捗と独立して開発することができます。StageData.cs(とUnity)以外との依存がないためです。
ロジック
StageData.csに、ゲームプレイ・描画に必要な変数をpublic static
(グローバル変数のようなもの)で記載しました。これを各ファイルから参照・編集してもらいます。
各ステージの配置・クリア条件などもここに直書きで記載されています。public static
なので、ここを誰かが書き換えることで不具合が起きるかもしれません。しかし、この実装は難易度が低い上にあくまでも短期開発のため、許容しました。
GameManager.csは、キャラ移動・計算といったゲームロジックを記載しています。
プログラムを分割しないと肥大化してコードが複雑化します。しかし、複数人でコアロジックを書くとそれはそれですり合わせが大変です。今回はこの大きなクラスを作り、開発スピードを保つために1人だけに作業してもらいました。
描画
基本的に、StageData.csから値を受け取る→プログラム内のvoid Update()
で描画を行うことにしています。GameManager.cs等からメソッドを呼び出してもらって描画の更新をしてもいいのですが、こちらの方がプログラム間の依存関係が少なく並列作業がしやすかったです。
StageView.cs(マップ描画), Cell.cs(マップの各マスの描画), ScoreViewScore.cs(スコア描画), GameUIClicked.cs(UIのボタン押下時の処理), GameClear.cs(クリア画面の表示), ConditionView.cs(条件の描画), Card.cs(右下のカードの描画), CalcPreview.cs(マウスオーバー時の計算の描画)があります。
StagePreView.cs(ステージ選択画面のプレビュー)については、ステージのデータから動的に描画するのではなく、実はスクリーンショットを表示することで実現しています。
アニメーションはDoTweenを用いました。
ほか
Title.csおよびStageSelect.csは、タイトル画面とステージ選択画面のプログラムです。この部分は実装量が少ないので1つにまとめました。
BGM.csはBGMを再生するプログラムです。シーンをまたいで再生し続けられるようにしています。(DontDestroyOnLoad+シングルトンです)
感想
s9
リーダー+プログラマでした。
今回はかなりうまくいったと思います。ゲームを完成させるだけでなく、ブラッシュアップを果たすこともできて良かったです。試遊会ではたくさんの人に楽しんでもらいました。
2年前・1年前の春ハッカソンは未完で終わって悔しかったです。今回は運にも恵まれて企画がすんなり決まっただけでなく、余った時間で様々な準備をしてゲームのクオリティを高めることができました。
1週間がんばって動いてくれたチームのみなさん、ゲームを遊んでくれたみなさんありがとうございました!
tobuhitodesu
メイングラフィッカーでした。
普段はドット絵を描いてるのですが今回は上級生として自我を出さずにゲームに合ったデザインをFigmaで製作しました。s9さんがゲーム制作への練度が非常に高い先輩なのでプログラマ関連は完全にお任せできたのが非常に心強く、さらに後輩のメンバーのみんなが頑張ってくれたのでゲームの完成にこぎつけたと思います。
ゲームの仕様が決まっていたので、ゲームの構造からUIデザインや配置をかなり事前に練れるだけ練れたので結構自信のあるデザインにできたかなと思います。うまくいったことも反省点も今後の糧に絶対なると思うので完成までいけた最高のチームに感謝が尽きないです!ありがとうございました~!
inaniha_1728
プログラマでした。
主に盤面の表示周りやUIの一部を作りました。集団でゲームを作るのは初めてでしたが、タスクがうまく切り分けられていたため、スムーズに進めることができました。自分の知らないうちに新しい機能がどんどん実装されていて、集団開発ならではの面白さを感じました。
短い期間で開発を進めるということで、普通なら使わないような強引な実装方法なんかも出てきて、ハッカソンのノリと勢いを味わい尽くせたと思います。
↓これは魂を込めて全部手打ちしたフィールドデータ

2251799813685248
プログラマーを担当しました。このハッカソンの数日前に、このゲームの強化版であるAtcoderのLRUD instructionsを解いたので、実際のプログラミングはそれほど支障なく行えました。しかし、競プロとは異なり、ほかのスクリプトファイルから変数を引っ張り出す必要があったり、プログラムの処理順をしっかりと定める必要があったりしたので、いつもとは違うプログラミング経験ができました。
後半になってFigmaによるアニメーションが直接実装できないことが判明し、どうしようかと迷っていましたが、目標地点へ向かうベクトルを定数倍して毎フレームごとプレイヤー座標に加算する方法をとることで無理やり対処しました。(ロボットの比例制御と同じ感じ)
このように慣れないことや初めてのことが多かったので無理やりの実装が多くなってしまいましたが、計算パズルゲームとして成立するものを作れたので満足できました。
ステージ名にある2^51が何を意味するか考えてみよう!!(ヒント:2^51を具体的に計算してみよう)
pasa
プログラマでした。
ゲームクリア時の処理とUIの一部、クリアチェックを担当しました。ゲーム製作は完全に未経験でunityを使うのもほぼ初めての状態でしたが、班の皆さんに教えられながらなんとか自分のタスクを進めることができました。自分が実装した機能が動くときの楽しさや、完成したゲームを多くの人が遊んでいるところを見たときの嬉しさを初めて感じることができて、製作を楽しく行えた2日間でした。今回は集団かつ短期間の開発でしたが、個人での開発や長期間かけて作る上品な実装も学んでいきたいと思いました。
最高の班の皆さんのおかげで初めて製作したゲームとして最高の思い出が出来ました!本当にありがとうございました!
jupiter_68
サウンドを担当しました。
普段は競技プログラミングを中心に活動しているため、今回のハッカソン参加は私にとって新しい挑戦であり、正直かなり緊張していました。
このハッカソンでサウンドを制作するにあたって、「プレイヤーができるだけパズルに没頭できるようなBGMを作ること」を目標として取り組みました。
まだまだ未熟な点も多くありますが、このハッカソンを通じて多くのことを学び、大きな成長を実感できたことをとても嬉しく思っています。
s9先輩や飛ぶ人先輩をはじめとした経験者の方々が、準備や計画の段階から全体をうまくまとめてくださったおかげで、安心して制作に集中することができました。
また、新入生のプログラマーのみんなが積極的にアイデア出しや実装に取り組んでくれたおかげで、無事にゲームを完成させることができたのだと思います。
本当にありがとうございました!!
kosyou
プログラマでした。
ステージセレクトの部分やUIを担当しました。ゲームをほとんど作ったことのない初心者でさらにチーム開発ということで何をすればいいのかわからないことが沢山ありましたが、s9さんや他の人に様々なことを教えてもらいゲームを作ることができました。そして、自分達が作ったゲームが完成して、他のみんなに遊んでもらうことがとても嬉しかったです。
次はワンマンソンに向けて自分でもUnityを勉強しようかなと思います!