mirror of
https://github.com/peterosterlund2/droidfish.git
synced 2025-12-12 09:02:41 +01:00
DroidFish: Updated stockfish engine to version 3.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user