我是Flutter的新手,我在打井字游戏中遇到很多麻烦。它可以在控制台中运行,但是我不知道如何使游戏在已构建的GUI中运行。
我知道我需要用于游戏按钮的某种数组,但是我不确定如何实现这一点。我用这样的行和列构建了游戏板:
body: new Container(
padding: EdgeInsets.all(14.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
//Start of the 1st Row
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
// Button 0 in 1st Row
RaisedButton(
padding: const EdgeInsets.all(20.0),
onPressed: () {
_button0();
},
child: new Text(_mBoard[0],
textAlign: TextAlign.center,
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: 40.0,
fontFamily: 'Roboto',
)),
color: Colors.grey[300],
),
这是在第一个RaisedButton的onPressed函数中调用的_button0。他们上升到8。
void _button0() {
setState(() {
if (_mBoard[0] == humanPlayer || _mBoard[0] == computerPlayer) {
return;
} else if (win == 0) {
if (turn == 0) {
_mBoard[0] = humanPlayer;
_text = humanPlayer + " MOVED, O's TURN";
turn = 1;
win = checkWinner();
checkGameOver(win);
displayBoard();
}
if ((turn == 1) && (win == 0)) {
turn = 0;
computerTurn();
win = checkWinner();
checkGameOver(win);
displayBoard();
}
}
});
}
打印板到控制台:
void displayBoard() {
print(_mBoard[0] + " | " + _mBoard[1] + " | " + _mBoard[2]);
print("-----------");
print(_mBoard[3] + " | " + _mBoard[4] + " | " + _mBoard[5]);
print("-----------");
print(_mBoard[6] + " | " + _mBoard[7] + " | " + _mBoard[8]);
}
我希望用户选择的RaisedButton可以显示“ X”,而计算机的选择可以显示“ O”。
答案 0 :(得分:0)
您将_mBoard值更新的部分和displayBoard()方法都包含在setState()中。调用setState()后,它将通知StatefulWidget更新视图。但是您在setState内调用displayBoard(),并且此方法尚未更新_mBoard值。
有两种解决方法,
将_mBoard作为参数传递给displayBoard(_mBoard),因此它将访问本地_mBoard值而不是状态值。
在调用setState()之后调用displayBoard。