Get some decent logging going so we can see what's actually going on. Array ios working great; UI is not being redrawn based on the variables (like in Android).

This commit is contained in:
2026-05-06 14:59:15 -07:00
parent 32bf2353d5
commit 58b8ab9253
+39 -1
View File
@@ -1,5 +1,22 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
//import 'package:logger/logger.dart';
//final logger = Logger();
import 'dart:io';
class MyLogger {
void d(String output, {String method = ""}) {
stdout.write(DateTime.now());
if (method.isNotEmpty) {
stdout.write(" - $method");
}
print(": $output");
}
}
final logger = MyLogger();
void main() { void main() {
runApp(const MainApp()); runApp(const MainApp());
} }
@@ -123,6 +140,9 @@ class _BoardSpotState extends State<BoardSpot> {
setState(() { setState(() {
if (widget.text == "Reset") { if (widget.text == "Reset") {
gameReset(); gameReset();
}
if (widget.spot >= 12) {
null;
} else { } else {
gameTurn(widget.spot, BOARD[widget.spot]); gameTurn(widget.spot, BOARD[widget.spot]);
} }
@@ -213,9 +233,14 @@ marbleRemove (int spot, int marbles) {
*/ */
void gameTurn(int spot, int marbles) { void gameTurn(int spot, int marbles) {
logger.d(method: "gameTurn", "spot = $spot, marbles = $marbles");
if ((boolTopPlayerTurn && spot <= 5) || (!boolTopPlayerTurn && spot >= 6)) {
logger.d("Not this player's turn, try again.");
return;
}
marbleRemove(spot, marbles); marbleRemove(spot, marbles);
while (marbles > 0) { while (marbles > 0) {
if (spot == 6 && !boolTopPlayerTurn) { if (spot == 5 && !boolTopPlayerTurn) {
marbleReward(boolTopPlayerTurn, 1); marbleReward(boolTopPlayerTurn, 1);
marbles--; marbles--;
} else if (spot == 11 && boolTopPlayerTurn) { } else if (spot == 11 && boolTopPlayerTurn) {
@@ -223,6 +248,10 @@ void gameTurn(int spot, int marbles) {
marbles--; marbles--;
} }
if (marbles == 0) { if (marbles == 0) {
logger.d(
method: "gameTurn",
"Landed in player hole, go again! board = $BOARD, score = $SCORE",
);
return; return;
} }
@@ -243,6 +272,7 @@ void gameTurn(int spot, int marbles) {
} }
boolTopPlayerTurn = !boolTopPlayerTurn; boolTopPlayerTurn = !boolTopPlayerTurn;
logger.d(method: "gameTurn", "Finished, board = $BOARD, score = $SCORE");
} }
List<int> BOARD = []; List<int> BOARD = [];
@@ -250,32 +280,40 @@ List<int> SCORE = [];
bool boolTopPlayerTurn = false; bool boolTopPlayerTurn = false;
void gameReset() { void gameReset() {
logger.d(method: "gameReset", "Started");
BOARD = []; BOARD = [];
for (int i = 0; i < 12; i++) { for (int i = 0; i < 12; i++) {
BOARD.add(4); BOARD.add(4);
} }
SCORE = [0, 0]; SCORE = [0, 0];
logger.d(method: "gameReset", "Finished");
} }
void marbleAdd(int spot) { void marbleAdd(int spot) {
logger.d(method: "marbleAdd[spot=$spot]", "Started");
BOARD[spot]++; BOARD[spot]++;
logger.d(method: "marbleAdd[spot=$spot]", "Finished");
} }
void marbleReward(bool boolTopPlayer, int marbles) { void marbleReward(bool boolTopPlayer, int marbles) {
logger.d(method: "marbleReward[$boolTopPlayer, $marbles]", "Started");
if (boolTopPlayer) { if (boolTopPlayer) {
SCORE[0] += marbles; SCORE[0] += marbles;
} else { } else {
SCORE[1] += marbles; SCORE[1] += marbles;
} }
logger.d(method: "marbleReward[$boolTopPlayer, $marbles]", "Finished");
} }
void marbleRemove(int spot, int marbles) { void marbleRemove(int spot, int marbles) {
logger.d(method: "marbleRemove", "Started");
// 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
// just t make sure nothing wonky is going on, like 4 being removed then // just t make sure nothing wonky is going on, like 4 being removed then
// 5 being moved across the board or something. Which would likely be unrelated // 5 being moved across the board or something. Which would likely be unrelated
// code elsewhere, but oh well. // code elsewhere, but oh well.
BOARD[spot] -= marbles; BOARD[spot] -= marbles;
logger.d(method: "marbleRemove", "Finished");
} }
class ButtonReset extends StatelessWidget { class ButtonReset extends StatelessWidget {