Select Git revision
-
Benoît Harrault authoredBenoît Harrault authored
game.dart 3.53 KiB
import 'package:flutter/material.dart';
import '../layout/board.dart';
import '../provider/data.dart';
import '../utils/board_utils.dart';
import '../utils/game_utils.dart';
class Game {
static Container buildGameWidget(Data myProvider) {
bool gameIsFinished = myProvider.gameWin || myProvider.gameFail;
return Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 8),
Game.buildTopIndicatorWidget(myProvider),
SizedBox(height: 2),
Expanded(
child: Board.buildGameBoard(myProvider),
),
SizedBox(height: 2),
Container(
child: gameIsFinished
? Game.buildEndGameMessage(myProvider)
: Board.buildToggleFlagModeLayout(myProvider),
),
SizedBox(height: 8),
],
),
);
}
static Widget buildTopIndicatorWidget(Data myProvider) {
int flaggedCellsCount = BoardUtils.countFlaggedCells(myProvider.cells);
int minesCount = myProvider.minesCount;
double blockSize = 40;
Image flagIconBlock = Image(
image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_flag.png'),
fit: BoxFit.fill,
height: blockSize,
width: blockSize,
);
Image mineIconBlock = Image(
image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'),
fit: BoxFit.fill,
height: blockSize,
width: blockSize,
);
Text markedMinesCountBlock = Text(
flaggedCellsCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.black
),
);
Text placedMinesCountBlock = Text(
minesCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.black
),
);
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
markedMinesCountBlock,
flagIconBlock,
SizedBox(width: blockSize * 2),
mineIconBlock,
placedMinesCountBlock,
],
)
]);
}
static FlatButton buildRestartGameButton(Data myProvider) {
return FlatButton(
child: Container(
child: Image(
image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill,
),
),
onPressed: () => GameUtils.resetGame(myProvider),
);
}
static Container buildEndGameMessage(Data myProvider) {
Image decorationImage = Image(
image: AssetImage(
myProvider.gameWin
? 'assets/icons/game_win.png'
: myProvider.gameFail
? 'assets/icons/game_fail.png'
: ''
),
fit: BoxFit.fill
);
return Container(
margin: EdgeInsets.all(2),
padding: EdgeInsets.all(2),
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
TableRow(
children: [
Column(children: [ decorationImage ]),
Column(children: [ myProvider.animationInProgress ? decorationImage : buildRestartGameButton(myProvider) ]),
Column(children: [ decorationImage ]),
],
),
]
)
);
}
}