generated from me/template-mit
Starting to pass a callback function but child is not cooperating yet.
This commit is contained in:
+149
-42
@@ -39,7 +39,13 @@ class GameBoard extends StatefulWidget {
|
||||
|
||||
class _GameBoardState extends State<GameBoard> {
|
||||
var text = "hello test lalala";
|
||||
List<int> BOARD = [];
|
||||
List<int> _BOARD = [];
|
||||
|
||||
void updateBoard(List<int> board) {
|
||||
setState(() {
|
||||
_BOARD = board;
|
||||
});
|
||||
}
|
||||
|
||||
final _myGlobalKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
@@ -54,7 +60,7 @@ class _GameBoardState extends State<GameBoard> {
|
||||
children: [
|
||||
// Player 1 Goal
|
||||
Column(
|
||||
children: [Center(child: PlayerSpot(spot: 0, board: BOARD))],
|
||||
children: [Center(child: PlayerSpot(spot: 0, board: _BOARD))],
|
||||
),
|
||||
// Center holes
|
||||
Column(
|
||||
@@ -65,12 +71,60 @@ class _GameBoardState extends State<GameBoard> {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Column(children: [BoardSpot(spot: 13, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 12, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 11, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 10, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 09, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 08, board: BOARD)]),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 13,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 12,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 11,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 10,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 09,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 08,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
@@ -78,19 +132,67 @@ class _GameBoardState extends State<GameBoard> {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Column(children: [BoardSpot(spot: 01, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 02, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 03, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 04, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 05, board: BOARD)]),
|
||||
Column(children: [BoardSpot(spot: 06, board: BOARD)]),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 01,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 02,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 03,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 04,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 05,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
BoardSpot(
|
||||
spot: 06,
|
||||
board: _BOARD,
|
||||
boardUpdate: updateBoard,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Text(text),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
BOARD = gameReset(BOARD);
|
||||
_BOARD = gameReset(_BOARD);
|
||||
});
|
||||
},
|
||||
child: Text("Reset"),
|
||||
@@ -98,7 +200,7 @@ class _GameBoardState extends State<GameBoard> {
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
BOARD = BOARD;
|
||||
_BOARD = _BOARD;
|
||||
logger.d(method: "Refresh", "Refreshed!");
|
||||
});
|
||||
},
|
||||
@@ -108,7 +210,7 @@ class _GameBoardState extends State<GameBoard> {
|
||||
),
|
||||
// Player 2 Goal
|
||||
Column(
|
||||
children: [Center(child: PlayerSpot(spot: 07, board: BOARD))],
|
||||
children: [Center(child: PlayerSpot(spot: 07, board: _BOARD))],
|
||||
),
|
||||
],
|
||||
);
|
||||
@@ -120,11 +222,13 @@ class BoardSpot extends StatefulWidget {
|
||||
final List<int> board;
|
||||
final double w;
|
||||
final double h;
|
||||
final ValueChanged<List<int>>? boardUpdate;
|
||||
|
||||
BoardSpot({
|
||||
super.key,
|
||||
required this.board,
|
||||
required this.spot,
|
||||
required this.boardUpdate,
|
||||
this.w = 50,
|
||||
this.h = 50,
|
||||
});
|
||||
@@ -155,9 +259,6 @@ class _BoardSpotState extends State<BoardSpot> {
|
||||
logger.d(method: "_playBoardSpot", "Inside setState()");
|
||||
if (BOARD[_spot].toString() == "Reset") {
|
||||
BOARD = gameReset(BOARD);
|
||||
}
|
||||
if (_spot >= 12) {
|
||||
null;
|
||||
} else {
|
||||
BOARD = gameTurn(BOARD, _spot);
|
||||
}
|
||||
@@ -202,7 +303,13 @@ class _PlayerSpotState extends State<PlayerSpot> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BoardSpot(w: 50, h: 100, spot: _spot, board: BOARD);
|
||||
return BoardSpot(
|
||||
w: 50,
|
||||
h: 100,
|
||||
spot: _spot,
|
||||
board: BOARD,
|
||||
boardUpdate: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,7 +364,7 @@ marbleReward (bool boolTopPlayer, int marbles) {
|
||||
}
|
||||
}
|
||||
|
||||
Oh, also need too removve the marbles from the originally called spot befpre the while loop!
|
||||
Oh, also need too remove the marbles from the originally called spot befpre the while loop!
|
||||
|
||||
marbleRemove (int spot, int marbles) {
|
||||
// This should always be taking it down to 0, but doing the math anyways
|
||||
@@ -269,70 +376,70 @@ marbleRemove (int spot, int marbles) {
|
||||
}
|
||||
*/
|
||||
|
||||
List<int> gameTurn(List<int> BOARD, int spot) {
|
||||
if (BOARD.isEmpty) {
|
||||
BOARD = gameReset(BOARD);
|
||||
List<int> gameTurn(List<int> board, int spot) {
|
||||
if (board.isEmpty) {
|
||||
board = gameReset(board);
|
||||
}
|
||||
int marbles = BOARD[spot];
|
||||
int marbles = board[spot];
|
||||
logger.d(method: "gameTurn", "spot = $spot, marbles = $marbles");
|
||||
|
||||
if (spot == 00 || spot == 07) {
|
||||
logger.d(method: "gameTurn", "RETURN: Cannot play a player spot!");
|
||||
return BOARD;
|
||||
return board;
|
||||
}
|
||||
|
||||
if (marbles == 0) {
|
||||
logger.d(method: "gameTurn", "RETURN: Cannot play an empty hole!");
|
||||
return BOARD;
|
||||
return board;
|
||||
}
|
||||
|
||||
if ((boolTopPlayerTurn && spot <= 06) || (!boolTopPlayerTurn && spot >= 07)) {
|
||||
logger.d("Not this player's turn, try again.");
|
||||
return BOARD;
|
||||
return board;
|
||||
}
|
||||
BOARD = marbleRemove(BOARD, spot % 14);
|
||||
board = marbleRemove(board, spot % 14);
|
||||
while (marbles > 0) {
|
||||
if (spot == 06 && !boolTopPlayerTurn) {
|
||||
BOARD[07]++;
|
||||
board[07]++;
|
||||
marbles--;
|
||||
spot++;
|
||||
} else if (spot == 13 && boolTopPlayerTurn) {
|
||||
BOARD[00]++;
|
||||
board[00]++;
|
||||
marbles--;
|
||||
spot++;
|
||||
}
|
||||
if (marbles == 0) {
|
||||
logger.d(
|
||||
method: "gameTurn",
|
||||
"Landed in player hole, go again! board = $BOARD",
|
||||
"Landed in player hole, go again! board = $board",
|
||||
);
|
||||
return BOARD;
|
||||
return board;
|
||||
}
|
||||
|
||||
spot++;
|
||||
BOARD = marbleAdd(BOARD, spot % 14);
|
||||
board = marbleAdd(board, spot % 14);
|
||||
marbles--;
|
||||
}
|
||||
|
||||
// TODO: Check if this is the only marble in the hole, and if it's on the player's side, and if so, steal all the marbles on the opposite side.
|
||||
if (BOARD[spot % 14] == 1 &&
|
||||
if (board[spot % 14] == 1 &&
|
||||
((boolTopPlayerTurn && spot >= 7) || (!boolTopPlayerTurn && spot <= 6))) {
|
||||
// Spot 00 steals 11, 01 steals 10, ... 05 steals 06.
|
||||
// This is a function of (spot_to_check = 11 - spot)
|
||||
int spotToCheck = 13 - spot;
|
||||
int theft = BOARD[spotToCheck % 14];
|
||||
int theft = board[spotToCheck % 14];
|
||||
if (boolTopPlayerTurn) {
|
||||
BOARD[00] += theft;
|
||||
board[00] += theft;
|
||||
} else {
|
||||
BOARD[07] += theft;
|
||||
board[07] += theft;
|
||||
}
|
||||
BOARD = marbleRemove(BOARD, spotToCheck % 14);
|
||||
board = marbleRemove(board, spotToCheck % 14);
|
||||
}
|
||||
|
||||
boolTopPlayerTurn = !boolTopPlayerTurn;
|
||||
logger.d(method: "gameTurn", "Finished, board = $BOARD");
|
||||
logger.d(method: "gameTurn", "Finished, board = $board");
|
||||
|
||||
return BOARD;
|
||||
return board;
|
||||
}
|
||||
|
||||
bool boolTopPlayerTurn = false;
|
||||
|
||||
Reference in New Issue
Block a user