Starting to pass a callback function but child is not cooperating yet.

This commit is contained in:
2026-05-08 12:26:45 -07:00
parent cd18c49d55
commit a586c712ed
+149 -42
View File
@@ -39,7 +39,13 @@ class GameBoard extends StatefulWidget {
class _GameBoardState extends State<GameBoard> { class _GameBoardState extends State<GameBoard> {
var text = "hello test lalala"; var text = "hello test lalala";
List<int> BOARD = []; List<int> _BOARD = [];
void updateBoard(List<int> board) {
setState(() {
_BOARD = board;
});
}
final _myGlobalKey = GlobalKey<ScaffoldState>(); final _myGlobalKey = GlobalKey<ScaffoldState>();
@@ -54,7 +60,7 @@ class _GameBoardState extends State<GameBoard> {
children: [ children: [
// Player 1 Goal // Player 1 Goal
Column( Column(
children: [Center(child: PlayerSpot(spot: 0, board: BOARD))], children: [Center(child: PlayerSpot(spot: 0, board: _BOARD))],
), ),
// Center holes // Center holes
Column( Column(
@@ -65,12 +71,60 @@ class _GameBoardState extends State<GameBoard> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Column(children: [BoardSpot(spot: 13, board: BOARD)]), Column(
Column(children: [BoardSpot(spot: 12, board: BOARD)]), children: [
Column(children: [BoardSpot(spot: 11, board: BOARD)]), BoardSpot(
Column(children: [BoardSpot(spot: 10, board: BOARD)]), spot: 13,
Column(children: [BoardSpot(spot: 09, board: BOARD)]), board: _BOARD,
Column(children: [BoardSpot(spot: 08, 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( Row(
@@ -78,19 +132,67 @@ class _GameBoardState extends State<GameBoard> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Column(children: [BoardSpot(spot: 01, board: BOARD)]), Column(
Column(children: [BoardSpot(spot: 02, board: BOARD)]), children: [
Column(children: [BoardSpot(spot: 03, board: BOARD)]), BoardSpot(
Column(children: [BoardSpot(spot: 04, board: BOARD)]), spot: 01,
Column(children: [BoardSpot(spot: 05, board: BOARD)]), board: _BOARD,
Column(children: [BoardSpot(spot: 06, 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), Text(text),
TextButton( TextButton(
onPressed: () { onPressed: () {
setState(() { setState(() {
BOARD = gameReset(BOARD); _BOARD = gameReset(_BOARD);
}); });
}, },
child: Text("Reset"), child: Text("Reset"),
@@ -98,7 +200,7 @@ class _GameBoardState extends State<GameBoard> {
TextButton( TextButton(
onPressed: () { onPressed: () {
setState(() { setState(() {
BOARD = BOARD; _BOARD = _BOARD;
logger.d(method: "Refresh", "Refreshed!"); logger.d(method: "Refresh", "Refreshed!");
}); });
}, },
@@ -108,7 +210,7 @@ class _GameBoardState extends State<GameBoard> {
), ),
// Player 2 Goal // Player 2 Goal
Column( 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 List<int> board;
final double w; final double w;
final double h; final double h;
final ValueChanged<List<int>>? boardUpdate;
BoardSpot({ BoardSpot({
super.key, super.key,
required this.board, required this.board,
required this.spot, required this.spot,
required this.boardUpdate,
this.w = 50, this.w = 50,
this.h = 50, this.h = 50,
}); });
@@ -155,9 +259,6 @@ class _BoardSpotState extends State<BoardSpot> {
logger.d(method: "_playBoardSpot", "Inside setState()"); logger.d(method: "_playBoardSpot", "Inside setState()");
if (BOARD[_spot].toString() == "Reset") { if (BOARD[_spot].toString() == "Reset") {
BOARD = gameReset(BOARD); BOARD = gameReset(BOARD);
}
if (_spot >= 12) {
null;
} else { } else {
BOARD = gameTurn(BOARD, _spot); BOARD = gameTurn(BOARD, _spot);
} }
@@ -202,7 +303,13 @@ class _PlayerSpotState extends State<PlayerSpot> {
@override @override
Widget build(BuildContext context) { 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) { marbleRemove (int spot, int marbles) {
// This should always be taking it down to 0, but doing the math anyways // 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) { List<int> gameTurn(List<int> board, int spot) {
if (BOARD.isEmpty) { if (board.isEmpty) {
BOARD = gameReset(BOARD); board = gameReset(board);
} }
int marbles = BOARD[spot]; int marbles = board[spot];
logger.d(method: "gameTurn", "spot = $spot, marbles = $marbles"); logger.d(method: "gameTurn", "spot = $spot, marbles = $marbles");
if (spot == 00 || spot == 07) { if (spot == 00 || spot == 07) {
logger.d(method: "gameTurn", "RETURN: Cannot play a player spot!"); logger.d(method: "gameTurn", "RETURN: Cannot play a player spot!");
return BOARD; return board;
} }
if (marbles == 0) { if (marbles == 0) {
logger.d(method: "gameTurn", "RETURN: Cannot play an empty hole!"); logger.d(method: "gameTurn", "RETURN: Cannot play an empty hole!");
return BOARD; return board;
} }
if ((boolTopPlayerTurn && spot <= 06) || (!boolTopPlayerTurn && spot >= 07)) { if ((boolTopPlayerTurn && spot <= 06) || (!boolTopPlayerTurn && spot >= 07)) {
logger.d("Not this player's turn, try again."); 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) { while (marbles > 0) {
if (spot == 06 && !boolTopPlayerTurn) { if (spot == 06 && !boolTopPlayerTurn) {
BOARD[07]++; board[07]++;
marbles--; marbles--;
spot++; spot++;
} else if (spot == 13 && boolTopPlayerTurn) { } else if (spot == 13 && boolTopPlayerTurn) {
BOARD[00]++; board[00]++;
marbles--; marbles--;
spot++; spot++;
} }
if (marbles == 0) { if (marbles == 0) {
logger.d( logger.d(
method: "gameTurn", method: "gameTurn",
"Landed in player hole, go again! board = $BOARD", "Landed in player hole, go again! board = $board",
); );
return BOARD; return board;
} }
spot++; spot++;
BOARD = marbleAdd(BOARD, spot % 14); board = marbleAdd(board, spot % 14);
marbles--; 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. // 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))) { ((boolTopPlayerTurn && spot >= 7) || (!boolTopPlayerTurn && spot <= 6))) {
// Spot 00 steals 11, 01 steals 10, ... 05 steals 06. // Spot 00 steals 11, 01 steals 10, ... 05 steals 06.
// This is a function of (spot_to_check = 11 - spot) // This is a function of (spot_to_check = 11 - spot)
int spotToCheck = 13 - spot; int spotToCheck = 13 - spot;
int theft = BOARD[spotToCheck % 14]; int theft = board[spotToCheck % 14];
if (boolTopPlayerTurn) { if (boolTopPlayerTurn) {
BOARD[00] += theft; board[00] += theft;
} else { } else {
BOARD[07] += theft; board[07] += theft;
} }
BOARD = marbleRemove(BOARD, spotToCheck % 14); board = marbleRemove(board, spotToCheck % 14);
} }
boolTopPlayerTurn = !boolTopPlayerTurn; boolTopPlayerTurn = !boolTopPlayerTurn;
logger.d(method: "gameTurn", "Finished, board = $BOARD"); logger.d(method: "gameTurn", "Finished, board = $board");
return BOARD; return board;
} }
bool boolTopPlayerTurn = false; bool boolTopPlayerTurn = false;