5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】スマホを動かしてウサギを育てるアプリを作ろう🐰

Last updated at Posted at 2025-12-12

はじめに

こんにちは!watnow1回生のたうちです。
今回が記事初投稿になります。
カレンダーを担当するほかの方、先輩方と比べて拙い記事になると思いますが最後まで読んでいただけると嬉しいです:ok_hand:

今回の記事は今年最も印象に残った夏のハッカソンで開発したプロダクトについて紹介します!
その名も 「オレンジ農場」 です!:tangerine:

開発までの経緯

夏のwatnowハッカソンのテーマは「色」でした。
そして、自分たちのグループの担当はオレンジ、ということでオレンジの野菜や果物を収穫するゲームを作ろうってなったのが始まりです。

私が春からflutterを学習していたということもあり、今回の開発ではflutterを用いたモバイル向けアプリを作ることに!
今回はこのアプリについて紹介します!!

home_rabbit.png

:point_up:これがホーム画面

どんなアプリ??

まずは畑に行って野菜を収穫します!
「畑ガチャ」をおすとメロン、にんじん、かぼちゃのうちどれかが画面に現れるので、スマホを適切に動かすことで収穫できます!

S__50094083.jpg

例えば、人参を収穫するときはスマホを大きく振り上げるように動かさないと振った回数にカウントされません!

accelerometer.dart
void _startAccelerometer() {
    _accelerometerSubscription = accelerometerEventStream().listen((
      event,
    ) async {
      double magnitude = event.y.abs();
      if (magnitude > 15 && !_isShaking) {
        _isShaking = true;
        _animationController.forward(from: 0);

        setState(() {
          _shakeCount++;
          Vibration.vibrate(duration: 300);
          _playse('gasagasa.mp3');
          _carrotPosition = min(_shakeCount * 2.0, 20.0);

          if (_shakeCount >= 8) {
            _canHarvest = true;
          }
        });

        Future.delayed(const Duration(milliseconds: 300), () {
          _isShaking = false;
        });
      }

      if (_canHarvest && magnitude > 25) {
        _accelerometerSubscription?.cancel();
        if (mounted) {
          final prefs = await SharedPreferences.getInstance();
          var carrotcount = prefs.getInt('carrot') ?? 0;
          carrotcount += 1;
          Vibration.vibrate(duration: 1000);
          await prefs.setInt('carrot', carrotcount);
          _bgmPlayer.dispose();
          _playse('harvest_success.mp3');
          Navigator.pushReplacementNamed(context, '/result');
        }
      }
    });
  }

以上が収穫ゲーム画面のコードの一部です!

accelerometerEventStream().listenで端末から各方向の加速度を取得し、eventに入ります!
ある方向の加速度(上の場合はy軸方向)の加速度が一定以上になったらスマホを振りあげたと判定され、回数がカウントされます!
時間内に数回収穫の動きができれば収穫成功です!!:ok_hand:

時間内に収穫できないと野菜が腐ってしまい、収穫失敗です、、:sob:

スクリーンショット 2025-12-11 162525.png

👆野菜が腐ったときのイラストはchatGPTに描いてもらいました!
  ちゃっぴーすごい!!

野菜が収穫出来たら次は料理を作ります!
今度は料理の動きに合わせてスマホを動かしたりタッチしたりします!

例えば、メロンジュースを作るときにはメロンを切ったり、シェイクしたりするようにしてスマホを動かします!

98450_0.jpg

料理ができたらホーム画面で料理をウサギに食べさせてあげましょう!
料理を何個か食べさせるとウサギの見た目が変化するかも、、?

melon_rabbit.png

👆メロンうさぎ(これもちゃっぴー)

さいごに

S__50102274.jpg

👆京都のホテルにあったやつ

サークルに入って初めての夏のwatnowハッカソンでは先輩に頼ることもかなり多かったけど、他のグループの作品を見たり、企業の方の話を聞いたり、先輩から教えてもらったりしていろいろなことを吸収できたハッカソンでした!
さらに結果として最優秀賞もとれたのでうれしかったです!!:raised_hands:

さいごに私がflutter,Dartを学習する時にみていた記事などを貼っておきます!

Dart基本文法まとめ @haru-qiita
https://qiita.com/haru-qiita/items/87b9b6e9cf38872c5828
Flutter:Widget一覧 @matsukatsu
https://qiita.com/matsukatsu/items/e289e30231fffb1e4502
Flutter基礎入門 by Flutter大学
https://zenn.dev/kboy/books/ca6a9c93fd23f3
【未完】Flutter・Dart基礎 ~アプリ開発の手引き~
https://zenn.dev/engineerhikaru/books/ecf839ce7d0591bb203b

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?