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> {
|
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user