ティラノカップ

カタヤブーリ先生の 劇的!脳トレパズル

https://github.com/Conken-NitKit/2023_TYRANNO_CUP

Azure

C#

Unity

カタヤブーリ先生監修! パズルを解いて楽しく脳トレ!

林壱仁_++志井++

Aizaki Sohshun

Caron101

森脇大輔

推しアイデア

クリアするたび追加される条件に合わせて形を変える「形破り」をするゲーム!

作った背景

パスワードを作るゲーム見て似たようなの作りたかった! アルゴリズムぽいのしたい! なるべく単純に作りたい! 以上!

推し技術

UniRxでイベント管理をしてます! MVPパターンもどきでパズルの表示、状態管理まで簡単にできるように! アルゴリズムで正誤判定めっちゃやってます!約10個くらい!

プロジェクト詳細

カタヤブーリ先生の 劇的!脳トレパズル

ゲームについて

タイトル

カタヤブーリ先生の 劇的!脳トレパズル

概要

条件追加パズルゲーム

9*9のマス目に色を塗っていき、提示された全ての条件に合うような図形を作るゲームです。 条件が追加されるたび、前の形を壊して、「形破り」をすることでクリアを目指していきます。

時間をかけてじっくりプレイできる「ノーマルモード」 自分のタイムの限界に挑戦する「チャレンジモード」 そのタイムのランキングが見れる「ランキングモード」 があります。

企画書

Canva

フォルダ管理について

Assets ├── DownLoadAssets │   ├── DOTween │   └── UniRx └── MyAssets ├── Commmon │   ├── Animations │   ├── アニメーション入れるとこ │   ├── Fonts │   ├── フォント入れるとこ │  ├── Musics │   │ ├── SEs │   │ ├── 効果音を入れるとこ │   │ ├── BGMs │   │ └── 音楽入れるところ │   ├── 曲入れるとこ │   ├── Prefabs │   ├── プレファブ入れるとこ │   ├── Scripts │   ├── コード入れるとこ │   ├── Sprites │   ├── 画像入れるとこ │   └── 同階層の他のフォルダの中身も大体こんな感じです    ├── Develops │   └── 個人の開発シーンの置き場    ├── Normal    ├── Ranking    ├── TimeAttack    └── Title

シーンごとにScriptやPrefabを管理しています。 DownLoadAssetsにはDoTweenやUniRxなどの導入するだけで使えるもの、大量の画像ファイルなどがあるものを置いています。 MyAssetsには実際に開発するときにいじるものを置いています。

設計

クラス図

Pazzles

難易度について

今回難易度がいくつかに分かれていますが、基本的には解くべき条件の数や、最初から何個条件があるかなどで難易度の調節を行なっています。 また、条件の数をどれだけ増やしても正常に動作するように設計しています。

使用技術

アルゴリズム

条件を満たしているかの判定部分の実装に深さ優先探索アルゴリズムを使用しました。現在5個の条件を深さ優先探索アルゴリズムを用いて判定しています。 実装は分岐地点をStackで保存し、進める場所がなくなるとStackから最後の分岐地点を取り出して戻る方法で実装しました。

アルゴリズムの実装は以下のURLをご確認ください。 Algorithm.cs

UniRx

イベント管理を行うことのできるライブラリです。 クラスの変数が変更された場合、その変更の通知を受け取ってなんらかの処理を行うことができます。簡単に言えば依存性の逆転が行えたりします。

例えば、変数を変更するクラスAとその変更されたことによって処理を行うクラスBがあったとします。

UniRxなし

クラスAは自身の変数を変更したときにクラスBを参照して、クラスBのメソッドを発火する必要があります。 この時クラスBはクラスAのことを知る必要はありません。

image

UniRxあり

クラスAが自身の変数を変更したという通知をクラスBが受け取ることでクラスBが自身の処理を発火させます。 この時クラスAはクラスBのことを知る必要はありません。

image

例の場合、変更を行う、変更から処理を行うの関係が1 : 1の関係なので、いまいちピンと来ないかも知れませんが、変更から処理を行うクラスがもしも複数個あった場合、変更を行うクラスはそれだけたくさんのクラスを参照することになります。

image

依存性の逆転を行うことで、それぞれの変更から処理を行うクラスは変更を行うクラス1つを参照すれば良いため、擬似的に1 : 1の関係を生み出すことができます。

image

今回は、データとUIを完全にわけ、データ間でのやりとりやUIの表示を行いやすくしました

DoTween

高品質なアニメーションを行うことのできるライブラリです。 例えば三角形を上に移動させたい時は以下のコードを1行書くだけで動画のように動きます。

this.gameObject.transform.DOMove(Vector3.up * 2, 3);

image

動きながら回転は以下のように

this.gameObject.transform.DOMove(Vector3.up * 2, 3); this.gameObject.transform.DORotate(new Vector3(0, 0, 360), 3, RotateMode.FastBeyond360);

image

ちょっと力を貯めて

this.gameObject.transform.DOMove(Vector3.up * 2, 3).SetEase(Ease.InBack); this.gameObject.transform.DORotate(new Vector3(0, 0, 360), 3, RotateMode.FastBeyond360).SetEase(Ease.InBack);

image

といった具合に簡単にアニメーションを行うことができます。

今回は、ほぼ全てのシーンにおいて、アニメーション実装で用いました。

Azure PlayFab

Azureのゲームむけのサービスです。 ランキングの実装、プレイヤーごとに報酬を渡す実装などが簡単に出来ます。

今回は自分の名前とタイムアタックの秒数をランキングに登録、その登録した情報を取得してランキングとして表示させました。

メンバー

  • 林 - 企画 メインロジック実装
  • 森脇 - ランキングロジック実装、ランキング画面のデザイン
  • 竹村 - タイトル画面のデザイン
  • 相崎 - 正誤判定アルゴリズムの実装 タイトル画面の実装

林以外はハッカソン、チーム開発ともに初

林壱仁_++志井++

@ITI0820