InsanichessGame.fromICString constructor
InsanichessGame.fromICString(
- String s
Returns new InsanichessGame
object from ICString representation s
.
Implementation
factory InsanichessGame.fromICString(String s) {
final List<String> lines = s.split('\n');
final List<String> timeControlStringList = lines[2].split(' ');
final List<String> remainingTimeStringList = lines[3].split(' ');
final List<String> timesPerMoveStringList = lines[4].split(' ');
final InsanichessGame game = InsanichessGame.fromPosition(
id: lines[0],
whitePlayer: const InsanichessPlayer.testWhite(),
blackPlayer: const InsanichessPlayer.testBlack(),
timeControl: InsanichessTimeControl(
initialTime: Duration(seconds: int.parse(timeControlStringList.first)),
incrementPerMove:
Duration(seconds: int.parse(timeControlStringList.last)),
),
timesSpentPerMove: timesPerMoveStringList
.map<Duration>((String s) => Duration(milliseconds: int.parse(s)))
.toList(),
remainingTimeWhite:
Duration(milliseconds: int.parse(remainingTimeStringList.first)),
remainingTimeBlack:
Duration(milliseconds: int.parse(remainingTimeStringList.last)),
position: insanichess.Board.initialPosition,
);
for (int i = 6; i < lines.length; i++) {
final List<String> splittedLine = lines[i].trim().split(' ');
if (splittedLine.first.isEmpty) break;
game.move(insanichess.Move.fromICString(splittedLine.first));
if (splittedLine.length > 1) {
game.move(insanichess.Move.fromICString(splittedLine.last));
}
}
// If the status was not automatically resolved, the status is therefore
// a draw.
if (game.inProgress) {
game.draw();
}
return game;
}