From d8f055511a67eee5ce1a4cb14353c5c3e4f7de16 Mon Sep 17 00:00:00 2001 From: Calcitem Date: Sun, 8 Nov 2020 21:20:05 +0800 Subject: [PATCH] =?UTF-8?q?flutter:=20=E5=AE=8C=E5=96=84=20types?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/flutter/lib/common/types.dart | 114 ++++++++++++++++++++++++++ src/ui/flutter/lib/mill/mill.dart | 72 ---------------- src/ui/flutter/lib/mill/position.dart | 9 +- 3 files changed, 120 insertions(+), 75 deletions(-) diff --git a/src/ui/flutter/lib/common/types.dart b/src/ui/flutter/lib/common/types.dart index 58aa21a8..192bb0f7 100644 --- a/src/ui/flutter/lib/common/types.dart +++ b/src/ui/flutter/lib/common/types.dart @@ -16,3 +16,117 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + +import 'package:sanmill/common/misc.dart'; + +enum MoveType { place, move, remove } + +enum Phase { none, ready, placing, moving, gameOver } + +enum Action { none, select, place, remove } + +enum GameOverReason { + noReason, + loseReasonlessThanThree, + loseReasonNoWay, + loseReasonBoardIsFull, + loseReasonResign, + loseReasonTimeOver, + drawReasonThreefoldRepetition, + drawReasonRule50, + drawReasonBoardIsFull +} + +enum PieceType { none, blackStone, whiteStone, ban, count, stone } + +enum Square { + SQ_0, + SQ_1, + SQ_2, + SQ_3, + SQ_4, + SQ_5, + SQ_6, + SQ_7, + SQ_8, + SQ_9, + SQ_10, + SQ_11, + SQ_12, + SQ_13, + SQ_14, + SQ_15, + SQ_16, + SQ_17, + SQ_18, + SQ_19, + SQ_20, + SQ_21, + SQ_22, + SQ_23, + SQ_24, + SQ_25, + SQ_26, + SQ_27, + SQ_28, + SQ_29, + SQ_30, + SQ_31, +} + +const sqBegin = Square.SQ_8; +const sqEnd = 32; +const sqNumber = 40; +const effectiveSqNumber = 24; + +enum MoveDirection { clockwise, anticlockwise, inward, outward } + +enum LineDirection { horizontal, vertical, slash } + +enum File { A, B, C } + +const fileNumber = 3; + +enum Rank { rank_1, rank_2, rank_3, rank_4, rank_5, rank_6, rank_7, rank_8 } + +const rankNumber = 8; + +bool isOk(int sq) { + return sq == 0 || (sq >= 8 && sq <= 31); // TODO: SQ_NONE? +} + +int fileOf(int sq) { + return (sq >> 3); +} + +int rankOf(int sq) { + return (sq & 0x07) + 1; +} + +int fromSq(int move) { + move = abs(move); + return (move >> 8); +} + +int toSq(int move) { + move = abs(move); + return (move & 0x00FF); +} + +MoveType typeOf(int move) { + if (move < 0) { + return MoveType.remove; + } else if (move & 0x1f00 > 0) { + return MoveType.move; + } + + return MoveType.place; // m & 0x00ff +} + +int makeMove(int fromSq, int toSq) { + return (fromSq << 8) + toSq; +} + +int reverseMove(int move) { + return makeMove(toSq(move), fromSq(move)); +} diff --git a/src/ui/flutter/lib/mill/mill.dart b/src/ui/flutter/lib/mill/mill.dart index 4d69f575..858fc754 100644 --- a/src/ui/flutter/lib/mill/mill.dart +++ b/src/ui/flutter/lib/mill/mill.dart @@ -17,78 +17,6 @@ along with this program. If not, see . */ -enum MoveType { place, move, remove } - -enum Phase { none, ready, placing, moving, gameOver } - -enum Action { none, select, place, remove } - -enum GameOverReason { - noReason, - loseReasonlessThanThree, - loseReasonNoWay, - loseReasonBoardIsFull, - loseReasonResign, - loseReasonTimeOver, - drawReasonThreefoldRepetition, - drawReasonRule50, - drawReasonBoardIsFull -} - -enum PieceType { none, blackStone, whiteStone, ban, count, stone } - -enum Square { - SQ_0, - SQ_1, - SQ_2, - SQ_3, - SQ_4, - SQ_5, - SQ_6, - SQ_7, - SQ_8, - SQ_9, - SQ_10, - SQ_11, - SQ_12, - SQ_13, - SQ_14, - SQ_15, - SQ_16, - SQ_17, - SQ_18, - SQ_19, - SQ_20, - SQ_21, - SQ_22, - SQ_23, - SQ_24, - SQ_25, - SQ_26, - SQ_27, - SQ_28, - SQ_29, - SQ_30, - SQ_31, -} - -const sqBegin = Square.SQ_8; -const sqEnd = 32; -const sqNumber = 40; -const effectiveSqNumber = 24; - -enum MoveDirection { clockwise, anticlockwise, inward, outward } - -enum LineDirection { horizontal, vertical, slash } - -enum File { A, B, C } - -const fileNumber = 3; - -enum Rank { rank_1, rank_2, rank_3, rank_4, rank_5, rank_6, rank_7, rank_8 } - -const rankNumber = 8; - Map squareToIndex = { 8: 17, 9: 18, diff --git a/src/ui/flutter/lib/mill/position.dart b/src/ui/flutter/lib/mill/position.dart index ef0d7b53..b4e52d7e 100644 --- a/src/ui/flutter/lib/mill/position.dart +++ b/src/ui/flutter/lib/mill/position.dart @@ -17,6 +17,7 @@ along with this program. If not, see . */ +import '../common/types.dart'; import '../mill/mill.dart'; import '../mill/recorder.dart'; @@ -139,6 +140,11 @@ class Position { nPlayed = other.nPlayed; } + String pieceOnGrid(int index) => _grid[index]; + String pieceOn(int sq) => _board[sq]; + + bool empty(int sq) => pieceOn(sq) == Piece.noPiece; + /// fen() returns a FEN representation of the position. String fen() { @@ -338,9 +344,6 @@ class Position { changeSideToMove() => _sideToMove = Color.opponent(_sideToMove); - String pieceOnGrid(int index) => _grid[index]; - String pieceOn(int sq) => _board[sq]; - get halfMove => _recorder.halfMove; get fullMove => _recorder.fullMove;