Home * Engines * Joker IT
Jolly_Rosso.jpg

Joker,
a Chess Engine Communication Protocol compliant chess engine by Manlio Morini, developed from 1998 until 2001, written in C++ with some conditional x86 inline assembly concerning population count and bitscan of bitboards. Joker runs under BSD, Linux and Windows, and was in 2017 published on GitHub as open source as "historical" artifact, under the terms of the MIT license [1].
A Joker card [2]

Description

During its lifetime, around Version 0.6.7 in 1999, Joker used MTD(f) along with ETC [3], but finally stuck with PVS and aspiration [4]. It initially used the 0x88 board representation but evolved to bitboards. Quiet move generation of sliding pieces is still done with a nested loop over directions with pre-increments of origin until target squares are empty [5].
  // Mosse di Alfiere, Torre, Donna.
  for (pezzo pz(alfiere); pz <= donna; ++pz) {
    bb = mappa(c,pz);
    while (bb) {
      const posizione pos(bb.firstone());
      for (const direzione *d = dir[pz]; *d; d++) {
        for (posizione arrivo(pos + *d);
             !arrivo.fuori() && libere[arrivo];
             arrivo += *d) {
          lm->push_back(pos,arrivo,pz,vuoto);
        }
      }
      bb.elimina(pos);
    }
  }
However, the more time critical capture generation is implemented more in the set-wise bitboard fashion similar to the Tinker approach, traversing the intersection of sliding piece attacks on the otherwise empty board with opponent pieces, and looking whether the squares inbetween the sliding origin and potential capture target are empty .
  // Catture di Alfiere, Torre, Donna.
  for (pezzo pz(alfiere); pz <= donna; ++pz) {
    bb = mappa(c,pz);
    while (bb) {
      const posizione pos(bb.firstone());
      const bitboard *const a = bitboard::raggio[pos];
      bitboard prede(mosse[pz][pos] & nemici);
      while (prede) {
        const posizione p_preda(prede.firstone());
        if ( !(a[p_preda] & pezzi) ) {
          const pezzo preda(t_preda(!c,p_preda));
          lm->push_back(pos,p_preda,pz,preda,cattura);
        }
        prede.elimina(p_preda);
      }
      bb.elimina(pos);
    }
  }

Features

Board Representation

Search

Evaluation

Misc


Namesake


See also


Forum Posts


External Links

Chess Engine

Misc


References

  1. ^ joker/README.md at master · morinim/joker · GitHub
  2. ^ Jolly Rosso, image by Trocche100, November 30, 2014, Joker (playing card) from Wikipedia, Wikimedia Commons
  3. ^ joker/history at master · morinim/joker · GitHub
  4. ^ joker/giocatore.cc at master · morinim/joker · GitHub, see Ricerca_radice (root search)
  5. ^ Code snippets from joker/situazione.cc at master · morinim/joker · GitHub, slightly formatted concerning white spaces and brackets

What links here?


Up one Level