Split singe file into set of src files
This commit is contained in:
87
lib/src/dartsunfish.dart
Normal file
87
lib/src/dartsunfish.dart
Normal file
@@ -0,0 +1,87 @@
|
||||
import 'dart:io';
|
||||
import 'dart:developer' as dv;
|
||||
import 'package:dartsunfish/index.dart';
|
||||
|
||||
class GameBot {
|
||||
GameBot();
|
||||
|
||||
void gameMain() {
|
||||
var hist = <Position>[
|
||||
Position(initial, 0, [true, true], [true, true], 0, 0),
|
||||
];
|
||||
var searcher = Searcher();
|
||||
while (true) {
|
||||
UI.printBoard(hist.last);
|
||||
|
||||
if (hist.last.score <= -MATE_LOWER) {
|
||||
print('You lost');
|
||||
break;
|
||||
}
|
||||
|
||||
// We query the user until she enters a (pseudo) legal move.
|
||||
var move = <int>[];
|
||||
final possibleMoves = hist.last.generateMoves().toList();
|
||||
while (!possibleMoves.doContains(move)) {
|
||||
var pattern = RegExp(
|
||||
r'([a-h][1-8])' * 2,
|
||||
caseSensitive: false,
|
||||
multiLine: false,
|
||||
);
|
||||
print('Your move:');
|
||||
var input = stdin.readLineSync();
|
||||
var match = pattern.firstMatch(input.toString());
|
||||
if (match != null) {
|
||||
move = [UI.parse(match.group(1)), UI.parse(match.group(2))];
|
||||
if (!possibleMoves.doContains(move)) {
|
||||
print('Not valid move typed in. Try again');
|
||||
}
|
||||
} else {
|
||||
// Inform the user when invalid input (e.g. "help") is entered
|
||||
print('Please enter a move like g8f6');
|
||||
}
|
||||
}
|
||||
try {
|
||||
hist.add(hist.last.movePiece(move));
|
||||
} catch (e) {
|
||||
// print(e.toString());
|
||||
}
|
||||
|
||||
// After our move we rotate the board and print it again.
|
||||
// This allows us to see the effect of our move.
|
||||
UI.printBoard(hist.last.rotate());
|
||||
// print('${hist.last.score}');
|
||||
|
||||
if (hist.last.score <= -MATE_LOWER) {
|
||||
print('You won');
|
||||
break;
|
||||
}
|
||||
// Fire up the engine to look for a move.
|
||||
var _depth = 0;
|
||||
var score = 0;
|
||||
var start = getSeconds();
|
||||
/*
|
||||
*/
|
||||
for (var s in searcher.search(hist.last, hist.toSet())) {
|
||||
_depth = s[0];
|
||||
move = s[1];
|
||||
score = s[2] ?? 0;
|
||||
if (getSeconds() - start > 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (score == MATE_UPPER) {
|
||||
print('Checkmate!');
|
||||
}
|
||||
// The black player moves from a rotated position, so we have to
|
||||
// 'back rotate' the move before printing it.
|
||||
print('My move: ${UI.render(119 - move[0]) + UI.render(119 - move[1])}');
|
||||
hist.add(hist.last.movePiece(move));
|
||||
}
|
||||
}
|
||||
|
||||
void playGame() {
|
||||
setPst();
|
||||
gameMain();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user