DroidFish: Updated stockfish engine to version 3.

This commit is contained in:
Peter Osterlund
2013-05-03 17:03:42 +00:00
parent 3f55b61865
commit 34b9fd139f
42 changed files with 2092 additions and 2383 deletions

View File

@@ -1,7 +1,7 @@
/*
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, Tord Romstad
Copyright (C) 2008-2013 Marco Costalba, Joona Kiiski, Tord Romstad
Stockfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
#include <cassert>
#include <iomanip>
#include <sstream>
#include <string>
#include <stack>
#include "movegen.h"
#include "notation.h"
@@ -28,7 +28,7 @@
using namespace std;
static const char* PieceToChar = " PNBRQK pnbrqk";
static const char* PieceToChar[COLOR_NB] = { " PNBRQK", " pnbrqk" };
/// score_to_uci() converts a value to a string suitable for use with the UCI
@@ -75,7 +75,7 @@ const string move_to_uci(Move m, bool chess960) {
string move = square_to_string(from) + square_to_string(to);
if (type_of(m) == PROMOTION)
move += PieceToChar[make_piece(BLACK, promotion_type(m))]; // Lower case
move += PieceToChar[BLACK][promotion_type(m)]; // Lower case
return move;
}
@@ -108,10 +108,9 @@ const string move_to_san(Position& pos, Move m) {
if (m == MOVE_NULL)
return "(null)";
assert(pos.move_is_legal(m));
assert(MoveList<LEGAL>(pos).contains(m));
Bitboard attackers;
bool ambiguousMove, ambiguousFile, ambiguousRank;
Bitboard others, b;
string san;
Color us = pos.side_to_move();
Square from = from_sq(m);
@@ -125,33 +124,25 @@ const string move_to_san(Position& pos, Move m) {
{
if (pt != PAWN)
{
san = PieceToChar[pt]; // Upper case
san = PieceToChar[WHITE][pt]; // Upper case
// Disambiguation if we have more then one piece with destination 'to'
// note that for pawns is not needed because starting file is explicit.
ambiguousMove = ambiguousFile = ambiguousRank = false;
// Disambiguation if we have more then one piece of type 'pt' that can
// reach 'to' with a legal move.
others = b = (pos.attacks_from(pc, to) & pos.pieces(us, pt)) ^ from;
attackers = (pos.attacks_from(pc, to) & pos.pieces(us, pt)) ^ from;
while (attackers)
while (b)
{
Square sq = pop_lsb(&attackers);
// Pinned pieces are not included in the possible sub-set
if (!pos.pl_move_is_legal(make_move(sq, to), pos.pinned_pieces()))
continue;
ambiguousFile |= file_of(sq) == file_of(from);
ambiguousRank |= rank_of(sq) == rank_of(from);
ambiguousMove = true;
Move move = make_move(pop_lsb(&b), to);
if (!pos.pl_move_is_legal(move, pos.pinned_pieces()))
others ^= from_sq(move);
}
if (ambiguousMove)
if (others)
{
if (!ambiguousFile)
if (!(others & file_bb(from)))
san += file_to_char(file_of(from));
else if (!ambiguousRank)
else if (!(others & rank_bb(from)))
san += rank_to_char(rank_of(from));
else
@@ -167,7 +158,7 @@ const string move_to_san(Position& pos, Move m) {
san += square_to_string(to);
if (type_of(m) == PROMOTION)
san += string("=") + PieceToChar[promotion_type(m)];
san += string("=") + PieceToChar[WHITE][promotion_type(m)];
}
if (pos.move_gives_check(m, CheckInfo(pos)))
@@ -226,7 +217,7 @@ string pretty_pv(Position& pos, int depth, Value value, int64_t msecs, Move pv[]
const int64_t K = 1000;
const int64_t M = 1000000;
StateInfo state[MAX_PLY_PLUS_2], *st = state;
std::stack<StateInfo> st;
Move* m = pv;
string san, padding;
size_t length;
@@ -261,7 +252,8 @@ string pretty_pv(Position& pos, int depth, Value value, int64_t msecs, Move pv[]
s << san << ' ';
length += san.length() + 1;
pos.do_move(*m++, *st++);
st.push(StateInfo());
pos.do_move(*m++, st.top());
}
while (m != pv)