import 'package:gobang/state/user_context.dart'; abstract class GameState { int step = 0; int reg = 0; final UserContext userContext; GameState(this.userContext); bool regretChess(); bool surrender(); void play() { step++; } } /// 开局:不可悔棋、不可投降 class StartState extends GameState { StartState(super.userContext); @override bool regretChess() => false; @override bool surrender() => false; @override void play() { super.play(); if (step >= 4) { userContext.setState( MidState(userContext) ..step = step ..reg = reg, ); } } } /// 中盘:可悔棋(最多 3 次)、可投降 class MidState extends GameState { MidState(super.userContext); @override bool regretChess() { reg++; if (reg == 3) { userContext.setState( EndState(userContext) ..step = step ..reg = reg, ); } return true; } @override bool surrender() => true; } /// 终盘:悔棋用尽,仍可投降 class EndState extends GameState { EndState(super.userContext); @override bool regretChess() => false; @override bool surrender() => true; }