import 'dart:async'; import 'dart:math'; import 'package:flutter/material.dart'; import 'package:testmoduled/gameOver.dart'; import 'package:testmoduled/main.dart'; import 'dart:ui'; import 'package:testmoduled/ranking.dart'; import 'package:testmoduled/username.dart'; late Offset playerOffset; int mkg = 0; int fg = 0; int pf = 0; int fish = 0; int gt = 0; class Piece{ late int score; late String assets; late Offset offset; bool alive =true; Piece(this.score,this.assets,this.offset); } class Game extends StatefulWidget { const Game({super.key}); @override State createState() => _GameState(); } class _GameState extends State with TickerProviderStateMixin{ late int live; late int score; late int duration; late Timer timer; bool isPause =false; late AnimationController controller; late List pieces; late double speed; @override void initState() { // TODO: implement initState super.initState(); resetGame(); } void resetGame(){ live = 3; score = 0; duration = 0; speed = 0.5; pieces = []; playerOffset = Offset(phoneWidth-100, phoneHeight-110); timer = Timer.periodic(Duration(seconds: 1), (_) { duration++; String randomString = dishList[Random().nextInt(dishList.length)]; pieces.add(Piece( mapData[randomString]["score"], mapData[randomString]["assets"], Offset(Random().nextInt((phoneWidth-160).toInt())+80, 300) )); setState(() { }); }); controller = AnimationController(vsync: this,duration: Duration(seconds: 1)) ..addListener(a) ..repeat() ; } void a(){ myDown(); upDate(); gameOver(); setState(() { }); } void myDown(){ for (var piece in pieces) { piece.offset+=Offset(0,speed); if(piece.offset.dy>phoneHeight){ piece.alive = false; if(piece.score>0){ live--; } } } setState(() { }); } void gameOver(){ if(live==0){ controller.dispose(); timer.cancel(); rankList.add(ScoreModal(score, duration, textEditingController.value.text)); Navigator.of(context).push(MaterialPageRoute(builder: (c)=>GameOver())); } } void upDate(){ pieces.removeWhere((element) => !element.alive); speed = (score~/100).toDouble()+0.5; // if(score%50==0){ // live++; // } for (var piece in pieces) { if((piece.offset.dy-playerOffset.dy).abs()<65 && (piece.offset.dx-playerOffset.dx).abs()<65){ piece.alive =false; score+=piece.score; if(piece.score==30){ duration+=30; } if(piece.score==-20){ live--; } switch(piece.score){ case 10: fg++; case 20: mkg++; case 30: pf++; case -20: fish++; case -10: gt++; } } } setState(() { }); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: GestureDetector( onPanUpdate: (d){ if(d.globalPosition.dx>80 && d.globalPosition.dxNavigator.of(context).push(MaterialPageRoute(builder: (c)=>StartGame())),child: Image.asset("lib/assets/out.png",height: 50,width: 50,fit: BoxFit.fill,)), ], ) ) ); } }