| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import 'package:gobang/models/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;
- }
|