import 'package:gobang/bridge/chess_shape.dart'; import 'package:gobang/bridge/circle_shape.dart'; import 'package:gobang/bridge/rect_shape.dart'; import 'package:gobang/flyweight/chess.dart'; import 'package:gobang/flyweight/chess_flyweight_factory.dart'; import 'package:gobang/state/game_state.dart'; import 'package:gobang/state/user_context.dart'; class GameViewModel { GameViewModel._(); static final GameViewModel instance = GameViewModel._(); static GameViewModel getInstance() => instance; final UserContext _userContext = UserContext(); Chess play() { _userContext.play(); return ChessFlyweightFactory.getInstance().getChess('white'); } ChessShape shapeFor(bool useCircle) => useCircle ? CircleShape() : RectShape(); bool undo() => _userContext.regretChess(); String get state { final s = _userContext.state; if (s is StartState) { return '热身阶段,不能悔棋,不能投降'; } if (s is MidState) { return '入神阶段,可以悔棋且剩余${3 - s.reg}次,可以投降'; } if (s is EndState) { return '白热化阶段,悔棋次数已用完,但可以投降'; } return ''; } void reset() => _userContext.reset(); bool surrender() => _userContext.surrender(); }