diff --git a/lib/board.dart b/lib/board.dart index 87a10a0..1846bb2 100644 --- a/lib/board.dart +++ b/lib/board.dart @@ -3,7 +3,7 @@ import 'package:flutterfiar/coordinate.dart'; import 'match_page.dart'; class Board { - List> _boxes = List.generate( + List> _boxes = List.generate( 7, (i) => List.generate( 7, @@ -13,29 +13,28 @@ class Board { Board(); - Board.from(List> boxes) { + Board.from(List> boxes) { _boxes = boxes; } - Player getBox(Coordinate coordinate) => - _boxes[coordinate.col][coordinate.row]; + Color getBox(Coordinate coordinate) => _boxes[coordinate.col][coordinate.row]; int getColumnTarget(int col) => _boxes[col].lastIndexOf(null); - void setBox(Coordinate coordinate, Player player) => + void setBox(Coordinate coordinate, Color player) => _boxes[coordinate.col][coordinate.row] = player; void reset() { _boxes.forEach((r) => r.forEach((p) => p = null)); } - bool checkWinner(Coordinate coordinate, Player player) { + bool checkWinner(Coordinate coordinate, Color player) { return checkHorizontally(coordinate, player) || checkVertically(coordinate, player) || checkDiagonally(coordinate, player); } - bool checkHorizontally(Coordinate coordinate, Player player) { + bool checkHorizontally(Coordinate coordinate, Color player) { var r = 0; for (; coordinate.col + r < 7 && @@ -59,7 +58,7 @@ class Board { return false; } - bool checkDiagonally(Coordinate coordinate, Player player) { + bool checkDiagonally(Coordinate coordinate, Color player) { var ur = 0; for (; coordinate.col + ur < 7 && @@ -121,7 +120,7 @@ class Board { return false; } - bool checkVertically(Coordinate coordinate, Player player) { + bool checkVertically(Coordinate coordinate, Color player) { var u = 0; for (; coordinate.row + u < 7 && diff --git a/lib/cpu.dart b/lib/cpu.dart index 24a81ee..cd5af2c 100644 --- a/lib/cpu.dart +++ b/lib/cpu.dart @@ -5,20 +5,20 @@ import 'coordinate.dart'; import 'match_page.dart'; abstract class Cpu { - final Player player; + final Color color; final Random _random = Random(DateTime.now().millisecond); - Cpu(this.player); + Cpu(this.color); - Player get otherPlayer => player == Player.RED ? Player.YELLOW : Player.RED; + Color get otherPlayer => color == Color.RED ? Color.YELLOW : Color.RED; Future chooseCol(Board board); } class DumbCpu extends Cpu { - DumbCpu(Player player) : super(player); + DumbCpu(Color player) : super(player); - Player get otherPlayer => player == Player.RED ? Player.YELLOW : Player.RED; + Color get otherPlayer => color == Color.RED ? Color.YELLOW : Color.RED; @override Future chooseCol(Board board) async { @@ -33,7 +33,7 @@ class DumbCpu extends Cpu { } class HarderCpu extends Cpu { - HarderCpu(Player player) : super(player); + HarderCpu(Color player) : super(player); @override Future chooseCol(Board board) async { @@ -55,8 +55,8 @@ class HarderCpu extends Cpu { final coordinate = Coordinate(i, target); - boardCopy.setBox(coordinate, player); - if (boardCopy.checkWinner(coordinate, player)) { + boardCopy.setBox(coordinate, color); + if (boardCopy.checkWinner(coordinate, color)) { scores[i] += deepness / (step + 1); continue; } @@ -101,7 +101,7 @@ class HarderCpu extends Cpu { } class HardestCpu extends HarderCpu { - HardestCpu(Player player) : super(player); + HardestCpu(Color player) : super(player); @override Future chooseCol(Board board) async { diff --git a/lib/cpu_level_page.dart b/lib/cpu_level_page.dart index e2aa69a..491cd5b 100644 --- a/lib/cpu_level_page.dart +++ b/lib/cpu_level_page.dart @@ -31,8 +31,8 @@ class CpuLevelPage extends StatelessWidget { '/match', arguments: { 'mode': Mode.PVC, - 'cpu': DumbCpu( - Random().nextBool() ? Player.RED : Player.YELLOW), + 'cpu': + DumbCpu(Random().nextBool() ? Color.RED : Color.YELLOW), }, ); }, @@ -53,7 +53,7 @@ class CpuLevelPage extends StatelessWidget { arguments: { 'mode': Mode.PVC, 'cpu': HarderCpu( - Random().nextBool() ? Player.RED : Player.YELLOW), + Random().nextBool() ? Color.RED : Color.YELLOW), }, ); }, @@ -74,7 +74,7 @@ class CpuLevelPage extends StatelessWidget { arguments: { 'mode': Mode.PVC, 'cpu': HardestCpu( - Random().nextBool() ? Player.RED : Player.YELLOW), + Random().nextBool() ? Color.RED : Color.YELLOW), }, ); }, diff --git a/lib/game_chip.dart b/lib/game_chip.dart index 99cede6..1c737c3 100644 --- a/lib/game_chip.dart +++ b/lib/game_chip.dart @@ -10,7 +10,7 @@ class GameChip extends StatelessWidget { }) : super(key: key); final Animation translation; - final Player color; + final Color color; @override Widget build(BuildContext context) { @@ -25,7 +25,7 @@ class GameChip extends StatelessWidget { width: 40, child: Material( shape: CircleBorder(), - color: color == Player.RED ? Colors.red : Colors.yellow, + color: color == Color.RED ? Colors.red : Colors.yellow, ), ), ); diff --git a/lib/home_page.dart b/lib/home_page.dart index 7c49bf2..c0e05f1 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -65,7 +65,7 @@ class HomePage extends StatelessWidget { ), onPressed: () { final harderCpu = - HarderCpu(Random().nextBool() ? Player.RED : Player.YELLOW); + HarderCpu(Random().nextBool() ? Color.RED : Color.YELLOW); Navigator.pushNamed( context, '/match', diff --git a/lib/match_page.dart b/lib/match_page.dart index 66b90d3..e961f58 100644 --- a/lib/match_page.dart +++ b/lib/match_page.dart @@ -8,7 +8,7 @@ import 'cpu.dart'; import 'game_chip.dart'; import 'hole_painter.dart'; -enum Player { +enum Color { YELLOW, RED, } @@ -37,8 +37,8 @@ class MatchPage extends StatefulWidget { class _MatchPageState extends State with TickerProviderStateMixin { final board = Board(); - Player turn; - Player winner; + Color turn; + Color winner; List>> translations = List.generate( 7, @@ -81,7 +81,7 @@ class _MatchPageState extends State with TickerProviderStateMixin { padding: const EdgeInsets.all(32.0), child: winner != null ? Text( - '${winner == Player.RED ? 'RED' : 'YELLOW'} WINS', + '${winner == Color.RED ? 'RED' : 'YELLOW'} WINS', textAlign: TextAlign.center, style: Theme.of(context) .textTheme @@ -91,7 +91,7 @@ class _MatchPageState extends State with TickerProviderStateMixin { : Column( children: [ Text( - '${turn == Player.RED ? 'RED' : 'YELLOW'} SPEAKS', + '${turn == Color.RED ? 'RED' : 'YELLOW'} SPEAKS', textAlign: TextAlign.center, style: Theme.of(context) .textTheme @@ -117,19 +117,19 @@ class _MatchPageState extends State with TickerProviderStateMixin { String name; if (widget.mode == Mode.PVC) { - if (turn == widget.cpu.player) { + if (turn == widget.cpu.color) { name = 'CPU - ${widget.cpu.toString()}'; } else { name = 'USER'; } } else if (widget.mode == Mode.PVP) { - if (turn == Player.RED) { + if (turn == Color.RED) { name = 'PLAYER1'; } else { name = 'PLAYER2'; } } else { - if (turn == widget.cpu.player) { + if (turn == widget.cpu.color) { name = 'CPU1 - ${widget.cpu.toString()}'; } else { name = 'CPU2 - ${widget.cpu2.toString()}'; @@ -146,11 +146,11 @@ class _MatchPageState extends State with TickerProviderStateMixin { void initState() { super.initState(); turn = widget.cpu?.otherPlayer ?? - (Random().nextBool() ? Player.RED : Player.YELLOW); - if (widget.mode == Mode.PVC && turn == widget.cpu.player) { + (Random().nextBool() ? Color.RED : Color.YELLOW); + if (widget.mode == Mode.PVC && turn == widget.cpu.color) { cpuMove(widget.cpu); } else if (widget.mode == Mode.DEMO) { - if (turn == widget.cpu.player) { + if (turn == widget.cpu.color) { cpuMove(widget.cpu); } else { cpuMove(widget.cpu2); @@ -225,7 +225,7 @@ class _MatchPageState extends State with TickerProviderStateMixin { putChip(col); if (winner == null && widget.mode == Mode.DEMO) { - if (turn == widget.cpu.player) { + if (turn == widget.cpu.color) { cpuMove(widget.cpu); } else { cpuMove(widget.cpu2); @@ -253,7 +253,7 @@ class _MatchPageState extends State with TickerProviderStateMixin { if (mounted) { setState(() { board.setBox(Coordinate(col, target), turn); - turn = turn == Player.RED ? Player.YELLOW : Player.RED; + turn = turn == Color.RED ? Color.YELLOW : Color.RED; }); } @@ -277,7 +277,7 @@ class _MatchPageState extends State with TickerProviderStateMixin { } } - void showWinnerDialog(BuildContext context, Player player) { + void showWinnerDialog(BuildContext context, Color player) { setState(() { winner = player; }); diff --git a/lib/player.dart b/lib/player.dart new file mode 100644 index 0000000..cb684eb --- /dev/null +++ b/lib/player.dart @@ -0,0 +1,7 @@ +import 'package:flutterfiar/match_page.dart'; + +abstract class Player { + final Color player; + + Player(this.player); +}