指を足に見立ててタップで走るモバイルゲーム
| 項目 | 内容 |
|---|---|
| コンセプト | 指を足に見立て、左右交互にタップして走る |
| 目標 | スイカゲームのように「シンプルだけど面白い」 |
| ターゲット | スコアアタック勢(将来的に大会も見据える) |
| プラットフォーム | Android → iOS(クロスプラットフォーム) |
| サポーター要素 | 広告視聴・アプリ内購入(チケット/スキン/エフェクト)、課金でゲームが有利にならない設計 |
| 項目 | 技術 |
|---|---|
| フレームワーク | Flutter |
| 言語 | Dart |
| 開発環境 | Windows + Visual Studio Code |
| データ保存 | SharedPreferences(ローカル) |
| バージョン管理 | Git + GitHub |
- 画面下部に左右2つのボタンを配置
- 左→右→左→右... と交互にタップ
- 両手プレイ向け
- 片側のみを連打
- 片手(親指)でプレイ可能
- 通勤通学時など片手しか使えない状況向け
※ ランキングは各モードで分離
- 100回タップするまでの時間を計測
- 1/100秒単位の精度
- 10秒間で何回タップできるかを計測
- 同じ側を連続タップした場合、最初の1回のみカウント(2本モード)
| 状況 | エフェクト |
|---|---|
| 正常タップ | 波紋エフェクト + ボタン拡大縮小 |
| 無効タップ | 赤色フラッシュ + シェイク |
| 速度連動 | 速度に応じて5段階でエフェクト強化 |
| 振動 | なし(連打ゲームのため) |
速度は直近10タップの平均tpsで計算。速度が落ちたら即座にレベルダウン。
速度閾値
| Lv | 1本モード | 2本モード |
|---|---|---|
| 1 | 〜5 tps | 〜10 tps |
| 2 | 5〜8 tps | 10〜15 tps |
| 3 | 8〜11 tps | 15〜20 tps |
| 4 | 11〜13 tps | 20〜23 tps |
| 5 MAX | 13 tps〜 | 23 tps〜 |
デフォルト演出(無料) — 白/薄青の光のみで5段階表現
| Lv | 波紋 | ボタン | 画面 |
|---|---|---|---|
| 1 | 小・1重・薄い | 軽くフラッシュ | なし |
| 2 | 中・1重・はっきり | 少し光る | なし |
| 3 | 大・2重 | グロー(ぼんやり輝く) | なし |
| 4 | 大・3重・速い | 強グロー | 画面端がうっすら光る |
| 5 MAX | 全力・広がる | 白フラッシュ | 画面端が強く光る |
課金スキン(色テーマ) — デフォルトと同じ光の動きに色を付与
| スキン | 波紋の色 | グローの色 | テーマ |
|---|---|---|---|
| デフォルト | 白 | 白〜薄青 | クリーン |
| 炎 | オレンジ→赤 | 赤 | ホット |
| 電撃 | 黄→白 | 黄 | エレクトリック |
| 氷 | 水色→白 | 水色 | クール |
| オーラ | 紫→白 | 紫 | ミステリアス |
- モード選択後、「スタート」ボタンを押す
- "On your mark"(固定秒数表示)
- "Set"(ランダム待機: 1.5〜3秒)
- "Go!!"(タップ開始)
| モード | ペナルティ |
|---|---|
| タップチャレンジ | マイナス表示からカウントアップ(例: -10から開始) |
| タイムアタック | 一定秒数タップが無効 |
フライングペナルティなしでプレイできる特別アイテム。
- 使用するとフライングペナルティが発生しない
- "Go!!"前にタップしても即スタート扱い
- 記録が伸びやすくなる(有利)
| 方法 | 獲得数 | 備考 |
|---|---|---|
| 広告視聴 | 1回分 | 無料 |
| 課金購入 | 10回分 | アプリ内課金 |
| スキップ | 0 | 入手しない選択も可能 |
- チケット使用時は記録に 🎫 マークを付与
- 通常記録とチケット記録は同じランキングに表示
- ランキングでは「チケット使用記録を含める/除外」のフィルタ機能あり
[フィルタ]
☑ チケット使用記録を含める
【ランキング】
1. Player_A 11.98秒 🎫
2. Player_B 12.34秒
3. Player_C 12.56秒
4. Player_D 12.60秒 🎫
| 項目 | 仕様 |
|---|---|
| タップ位置 | ユーザーが任意に設定可能 |
| タップ範囲サイズ | 小さめ固定(指1本分程度) |
| 目的 | 複数指での同時タップ防止 |
大きいタップ範囲(NG): 小さいタップ範囲(採用):
┌─────────────────┐ ┌───┐
│ 複数の指が入る │ │ 1 │ ← 指1本分
└─────────────────┘ └───┘
| 対策 | 説明 |
|---|---|
| 同時タップ検知 | 2本モードで左右同時押しは無効 |
| 異常速度検知 | 人間の限界を超えるタップ速度は無効 |
| 範囲外タップ | 設定範囲外のタップは無効 |
┌───────────────────────┐
│ │
│ タイマー/ │
│ カウンター表示 │
│ │
├───────────┬───────────┤
│ ┌───┐ │ ┌───┐ │
│ │ L │ │ │ R │ │ ← 小さいタップ範囲
│ └───┘ │ └───┘ │
└───────────┴───────────┘
┌───────────────────────┐
│ │
│ タイマー/ │
│ カウンター表示 │
│ │
├───────────────────────┤
│ ┌───┐ │
│ │ ● │ │ ← 位置はカスタマイズ可能
│ └───┘ │
└───────────────────────┘
1. ホーム画面
├─ タイムアタック選択 → プレイ画面(100回)
└─ タップチャレンジ選択 → プレイ画面(10秒)
2. プレイ画面
- チケット使用選択(広告視聴/課金/スキップ)
- 「スタート」ボタン押下
- "On your mark" → "Set" → "Go!!"
- タップ開始
- フライング時: ペナルティ演出(チケット未使用の場合)
└─ 完了 → リザルト画面
3. リザルト画面
- 今回の記録(チケット使用時は🎫マーク付き)
- ベストとの差分
- 履歴表示
├─ 「もう一度」→ プレイ画面
└─ 「メニュー」→ ホーム画面
※ 中断時(バックグラウンド等): 記録破棄してホームへ
// プレイヤーデータ
class PlayerData {
// チケット所持数
int tickets = 0;
// 2本モード - タイムアタック100回
RecordData? timeAttack100Best_2finger;
List<RecordData> timeAttack100History_2finger = []; // 直近10件
// 2本モード - タップチャレンジ10秒
RecordData? tapChallenge10sBest_2finger;
List<RecordData> tapChallenge10sHistory_2finger = []; // 直近10件
// 1本モード - タイムアタック100回
RecordData? timeAttack100Best_1finger;
List<RecordData> timeAttack100History_1finger = []; // 直近10件
// 1本モード - タップチャレンジ10秒
RecordData? tapChallenge10sBest_1finger;
List<RecordData> tapChallenge10sHistory_1finger = []; // 直近10件
// タップ位置設定
TapPositionSettings tapPositionSettings;
}
class TapPositionSettings {
// 2本モード: 左右ボタンの位置
Offset leftButtonPosition;
Offset rightButtonPosition;
// 1本モード: ボタンの位置
Offset singleButtonPosition;
}
class RecordData {
final double value; // 秒 or タップ数
final DateTime date;
final bool hadFalseStart;
final bool usedTicket;
final int fingerMode; // 1 or 2
}連打ゲームでタップ漏れや誤検出は致命的。プロトタイプ段階で徹底的に検証する。
大会を見据えているため、フライングでのリスタートではなく、ペナルティ制を採用。見切りスタートも戦略の一つ。
チケット使用記録は🎫マーク付きで区別。ランキングでフィルタ可能なため、通常プレイヤーとの公平性を維持。
スキン・エフェクトは見た目のカスタマイズのみ。チケットはランキングで区別されるため実力評価に影響しない。広告スキップも選択肢の一つ。課金したからといってゲームで有利になることはない(Pay-to-Winなし)。
シンプルなルール、中毒性のあるゲームプレイ、すぐ遊べてもう一回やりたくなる体験を目指す。
片手でプレイできる1本モードにより、電車でつり革を持ちながらでもプレイ可能。通勤通学のスキマ時間を狙う。
タップ範囲を小さくし、同時タップや異常速度を検知することで公平性を担保。
# Windows: https://docs.flutter.dev/get-started/install/windows
# ダウンロード後、パスを通す- https://developer.android.com/studio
- エミュレータのセットアップ
- Flutter
- Dart
flutter doctor