game_state.dart 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import 'package:gobang/models/user_context.dart';
  2. abstract class GameState {
  3. int step = 0;
  4. int reg = 0;
  5. final UserContext userContext;
  6. GameState(this.userContext);
  7. bool regretChess();
  8. bool surrender();
  9. void play() {
  10. step++;
  11. }
  12. }
  13. /// 开局:不可悔棋、不可投降
  14. class StartState extends GameState {
  15. StartState(super.userContext);
  16. @override
  17. bool regretChess() => false;
  18. @override
  19. bool surrender() => false;
  20. @override
  21. void play() {
  22. super.play();
  23. if (step >= 4) {
  24. userContext.setState(
  25. MidState(userContext)
  26. ..step = step
  27. ..reg = reg,
  28. );
  29. }
  30. }
  31. }
  32. /// 中盘:可悔棋(最多 3 次)、可投降
  33. class MidState extends GameState {
  34. MidState(super.userContext);
  35. @override
  36. bool regretChess() {
  37. reg++;
  38. if (reg == 3) {
  39. userContext.setState(
  40. EndState(userContext)
  41. ..step = step
  42. ..reg = reg,
  43. );
  44. }
  45. return true;
  46. }
  47. @override
  48. bool surrender() => true;
  49. }
  50. /// 终盘:悔棋用尽,仍可投降
  51. class EndState extends GameState {
  52. EndState(super.userContext);
  53. @override
  54. bool regretChess() => false;
  55. @override
  56. bool surrender() => true;
  57. }