Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Napoleon - constants.h

constants.h

Caricato da: Crybot
Scarica il programma completo

  1. #ifndef CONSTANTS_H
  2. #define CONSTANTS_H
  3. #include "move.h"
  4. #include "piece.h"
  5. #include "defines.h"
  6. #include "fenstring.h"
  7.  
  8. namespace Napoleon
  9. {
  10.     namespace Constants
  11.     {
  12.  
  13.         namespace Magics
  14.         {
  15.             const BitBoard FileMagic[] =
  16.             {
  17.                 0x8040201008040200, 0x4020100804020100, 0x2010080402010080, 0x1008040201008040,
  18.                 0x0804020100804020, 0x0402010080402010, 0x0201008040201008, 0x0100804020100804
  19.             };
  20.  
  21.             const BitBoard A1H8DiagonalMagic[] =
  22.             {
  23.                 0x0000000000000000, 0x0000000000000000, 0x0808080000000000, 0x1010101000000000,
  24.                 0x2020202020000000, 0x4040404040400000, 0x8080808080808000, 0x0101010101010100,
  25.                 0x0101010101010100, 0x0101010101010100, 0x0101010101010100, 0x0101010101010100,
  26.                 0x0101010101010100, 0x0000000000000000, 0x0000000000000000
  27.             };
  28.  
  29.             const BitBoard H1A8DiagonalMagic[] =
  30.             {
  31.                 0x0000000000000000, 0x0000000000000000, 0x0101010101010100, 0x0101010101010100,
  32.                 0x0101010101010100, 0x0101010101010100, 0x0101010101010100, 0x0101010101010100,
  33.                 0x0080808080808080, 0x0040404040404040, 0x0020202020202020, 0x0010101010101010,
  34.                 0x0008080808080808, 0x0000000000000000, 0x0000000000000000
  35.             };
  36.         }
  37.  
  38.         namespace Squares
  39.         {
  40.             enum Square {
  41.                 IntA1, IntB1, IntC1, IntD1, IntE1, IntF1, IntG1, IntH1,
  42.                 IntA2, IntB2, IntC2, IntD2, IntE2, IntF2, IntG2, IntH2,
  43.                 IntA3, IntB3, IntC3, IntD3, IntE3, IntF3, IntG3, IntH3,
  44.                 IntA4, IntB4, IntC4, IntD4, IntE4, IntF4, IntG4, IntH4,
  45.                 IntA5, IntB5, IntC5, IntD5, IntE5, IntF5, IntG5, IntH5,
  46.                 IntA6, IntB6, IntC6, IntD6, IntE6, IntF6, IntG6, IntH6,
  47.                 IntA7, IntB7, IntC7, IntD7, IntE7, IntF7, IntG7, IntH7,
  48.                 IntA8, IntB8, IntC8, IntD8, IntE8, IntF8, IntG8, IntH8
  49.             };
  50.  
  51.             const Napoleon::Square Invalid = 65;
  52.             const BitBoard A1 = 0x0000000000000001;
  53.             const BitBoard B1 = 0x0000000000000002;
  54.             const BitBoard C1 = 0x0000000000000004;
  55.             const BitBoard D1 = 0x0000000000000008;
  56.             const BitBoard E1 = 0x0000000000000010;
  57.             const BitBoard F1 = 0x0000000000000020;
  58.             const BitBoard G1 = 0x0000000000000040;
  59.             const BitBoard H1 = 0x0000000000000080;
  60.  
  61.             const BitBoard A2 = 0x0000000000000100;
  62.             const BitBoard B2 = 0x0000000000000200;
  63.             const BitBoard C2 = 0x0000000000000400;
  64.             const BitBoard D2 = 0x0000000000000800;
  65.             const BitBoard E2 = 0x0000000000001000;
  66.             const BitBoard F2 = 0x0000000000002000;
  67.             const BitBoard G2 = 0x0000000000004000;
  68.             const BitBoard H2 = 0x0000000000008000;
  69.  
  70.             const BitBoard A3 = 0x0000000000010000;
  71.             const BitBoard B3 = 0x0000000000020000;
  72.             const BitBoard C3 = 0x0000000000040000;
  73.             const BitBoard D3 = 0x0000000000080000;
  74.             const BitBoard E3 = 0x0000000000100000;
  75.             const BitBoard F3 = 0x0000000000200000;
  76.             const BitBoard G3 = 0x0000000000400000;
  77.             const BitBoard H3 = 0x0000000000800000;
  78.  
  79.             const BitBoard A4 = 0x0000000001000000;
  80.             const BitBoard B4 = 0x0000000002000000;
  81.             const BitBoard C4 = 0x0000000004000000;
  82.             const BitBoard D4 = 0x0000000008000000;
  83.             const BitBoard E4 = 0x0000000010000000;
  84.             const BitBoard F4 = 0x0000000020000000;
  85.             const BitBoard G4 = 0x0000000040000000;
  86.             const BitBoard H4 = 0x0000000080000000;
  87.  
  88.             const BitBoard A5 = 0x0000000100000000;
  89.             const BitBoard B5 = 0x0000000200000000;
  90.             const BitBoard C5 = 0x0000000400000000;
  91.             const BitBoard D5 = 0x0000000800000000;
  92.             const BitBoard E5 = 0x0000001000000000;
  93.             const BitBoard F5 = 0x0000002000000000;
  94.             const BitBoard G5 = 0x0000004000000000;
  95.             const BitBoard H5 = 0x0000008000000000;
  96.  
  97.             const BitBoard A6 = 0x0000010000000000;
  98.             const BitBoard B6 = 0x0000020000000000;
  99.             const BitBoard C6 = 0x0000040000000000;
  100.             const BitBoard D6 = 0x0000080000000000;
  101.             const BitBoard E6 = 0x0000100000000000;
  102.             const BitBoard F6 = 0x0000200000000000;
  103.             const BitBoard G6 = 0x0000400000000000;
  104.             const BitBoard H6 = 0x0000800000000000;
  105.  
  106.             const BitBoard A7 = 0x0001000000000000;
  107.             const BitBoard B7 = 0x0002000000000000;
  108.             const BitBoard C7 = 0x0004000000000000;
  109.             const BitBoard D7 = 0x0008000000000000;
  110.             const BitBoard E7 = 0x0010000000000000;
  111.             const BitBoard F7 = 0x0020000000000000;
  112.             const BitBoard G7 = 0x0040000000000000;
  113.             const BitBoard H7 = 0x0080000000000000;
  114.  
  115.             const BitBoard A8 = 0x0100000000000000;
  116.             const BitBoard B8 = 0x0200000000000000;
  117.             const BitBoard C8 = 0x0400000000000000;
  118.             const BitBoard D8 = 0x0800000000000000;
  119.             const BitBoard E8 = 0x1000000000000000;
  120.             const BitBoard F8 = 0x2000000000000000;
  121.             const BitBoard G8 = 0x4000000000000000;
  122.             const BitBoard H8 = 0x8000000000000000;
  123.         }
  124.  
  125.         namespace Ranks
  126.         {
  127.             const BitBoard One = 0x00000000000000FF;
  128.             const BitBoard Two = 0x000000000000FF00;
  129.             const BitBoard Three = 0x0000000000FF0000;
  130.             const BitBoard Four = 0x00000000FF000000;
  131.             const BitBoard Five = 0x000000FF00000000;
  132.             const BitBoard Six = 0x0000FF0000000000;
  133.             const BitBoard Seven = 0x00FF000000000000;
  134.             const BitBoard Eight = 0xFF00000000000000;
  135.         }
  136.  
  137.         namespace Files
  138.         {
  139.             const BitBoard A = 0x0101010101010101;
  140.             const BitBoard B = 0x0202020202020202;
  141.             const BitBoard C = 0x0404040404040404;
  142.             const BitBoard D = 0x0808080808080808;
  143.             const BitBoard E = 0x1010101010101010;
  144.             const BitBoard F = 0x2020202020202020;
  145.             const BitBoard G = 0x4040404040404040;
  146.             const BitBoard H = 0x8080808080808080;
  147.         }
  148.  
  149.         namespace InitialPositions
  150.         {
  151.             const BitBoard WhitePawns = 0x000000000000FF00;
  152.             const BitBoard WhiteKnights = 0x0000000000000042;
  153.             const BitBoard WhiteBishops = 0x0000000000000024;
  154.             const BitBoard WhiteRooks = 0x0000000000000081;
  155.             const BitBoard WhiteQueen = 0x0000000000000008;
  156.             const BitBoard WhiteKing = 0x0000000000000010;
  157.  
  158.             const BitBoard BlackPawns = 0x00FF000000000000;
  159.             const BitBoard BlackKnights = 0x4200000000000000;
  160.             const BitBoard BlackBishops = 0x2400000000000000;
  161.             const BitBoard BlackRooks = 0x8100000000000000;
  162.             const BitBoard BlackQueen = 0x0800000000000000;
  163.             const BitBoard BlackKing = 0x1000000000000000;
  164.         }
  165.  
  166.         namespace Masks
  167.         {
  168.             /// <summary>
  169.             /// questi array con esattamente 6 bit attivi per ciascun elemento
  170.             /// saranno utili nella generazione delle mosse delle torri e delle regine
  171.             /// per ottenere i gradi di occupazione a 6 bit di tali pezzi
  172.             /// </summary>
  173.  
  174.             const BitBoard SquareMask[] =
  175.             {
  176.                 Squares::A1, Squares::B1, Squares::C1, Squares::D1, Squares::E1, Squares::F1, Squares::G1, Squares::H1,
  177.                 Squares::A2, Squares::B2, Squares::C2, Squares::D2, Squares::E2, Squares::F2, Squares::G2, Squares::H2,
  178.                 Squares::A3, Squares::B3, Squares::C3, Squares::D3, Squares::E3, Squares::F3, Squares::G3, Squares::H3,
  179.                 Squares::A4, Squares::B4, Squares::C4, Squares::D4, Squares::E4, Squares::F4, Squares::G4, Squares::H4,
  180.                 Squares::A5, Squares::B5, Squares::C5, Squares::D5, Squares::E5, Squares::F5, Squares::G5, Squares::H5,
  181.                 Squares::A6, Squares::B6, Squares::C6, Squares::D6, Squares::E6, Squares::F6, Squares::G6, Squares::H6,
  182.                 Squares::A7, Squares::B7, Squares::C7, Squares::D7, Squares::E7, Squares::F7, Squares::G7, Squares::H7,
  183.                 Squares::A8, Squares::B8, Squares::C8, Squares::D8, Squares::E8, Squares::F8, Squares::G8, Squares::H8,
  184.             };
  185.  
  186.             const BitBoard SixBitRankMask[] =
  187.             {
  188.                 0x000000000000007E, 0x0000000000007E00, 0x00000000007E0000,
  189.                 0x000000007E000000, 0x0000007E00000000, 0x00007E0000000000,
  190.                 0x007E000000000000, 0x7E00000000000000
  191.             };
  192.  
  193.             const BitBoard SixBitFileMask[] =
  194.             {
  195.                 0x0001010101010100, 0x0002020202020200, 0x0004040404040400,
  196.                 0x0008080808080800, 0x0010101010101000, 0x0020202020202000,
  197.                 0x0040404040404000, 0x0080808080808000
  198.             };
  199.  
  200. //            const BitBoard RankMask[] =
  201. //            {
  202. //                0x000000000000007E, 0x0000000000007E00, 0x00000000007E0000,
  203. //                0x000000007E000000, 0x0000007E00000000, 0x00007E0000000000,
  204. //                0x007E000000000000, 0x7E00000000000000
  205. //            };
  206.  
  207.             const BitBoard FileMask[] =
  208.             {
  209.                 0x101010101010101, 0x202020202020202, 0x404040404040404,
  210.                 0x808080808080808, 0x1010101010101010, 0x2020202020202020,
  211.                 0x4040404040404040, 0x8080808080808080
  212.             };
  213.  
  214.             const BitBoard A1H8DiagonalMask[] =
  215.             {
  216.                 0x0000000000000080, 0x0000000000008040, 0x0000000000804020, 0x0000000080402010,
  217.                 0x0000008040201008, 0x0000804020100804, 0x0080402010080402, 0x8040201008040201,
  218.                 0x4020100804020100, 0x2010080402010000, 0x1008040201000000, 0x0804020100000000,
  219.                 0x0402010000000000, 0x0201000000000000, 0x0100000000000000
  220.             };
  221.  
  222.             const BitBoard H1A8DiagonalMask[] =
  223.             {
  224.                 0x0000000000000001, 0x0000000000000102, 0x0000000000010204, 0x0000000001020408,
  225.                 0x0000000102040810, 0x0000010204081020, 0x0001020408102040, 0x0102040810204080,
  226.                 0x0204081020408000, 0x0408102040800000, 0x0810204080000000, 0x1020408000000000,
  227.                 0x2040800000000000, 0x4080000000000000, 0x8000000000000000
  228.             };
  229.         }
  230.  
  231.         namespace Castle
  232.         {
  233.             const Byte WhiteCastleOO = 0x1;
  234.             const Byte WhiteCastleOOO = 0x2;
  235.             const Byte BlackCastleOO = 0x4;
  236.             const Byte BlackCastleOOO = 0x8;
  237.             const Byte FullCastlingRights = 0xF;
  238.             const BitBoard WhiteCastleMaskOO = 0x0000000000000060;
  239.             const BitBoard WhiteCastleMaskOOO = 0x000000000000000E;
  240.  
  241.             const BitBoard BlackCastleMaskOO = 0x6000000000000000;
  242.             const BitBoard BlackCastleMaskOOO = 0x0E00000000000000;
  243.  
  244.             const Move WhiteCastlingOO(Squares::IntE1, Squares::IntG1, KingCastle);
  245.             const Move WhiteCastlingOOO(Squares::IntE1, Squares::IntC1, QueenCastle);
  246.  
  247.             const Move BlackCastlingOO(Squares::IntE8, Squares::IntG8, KingCastle);
  248.             const Move BlackCastlingOOO(Squares::IntE8, Squares::IntC8, QueenCastle);
  249.         }
  250.  
  251.         namespace Piece
  252.         {
  253.             const Napoleon::Piece Null = Napoleon::Piece(PieceColor::None, PieceType::None);
  254.             const int PieceValue[] = { 100, 320, 330, 500, 1000, 2000 };
  255.         }
  256.  
  257.         namespace Node
  258.         {
  259.             const int Pv = 0;
  260.             const int Cut = 1;
  261.             const int All = 2;
  262.         }
  263.  
  264.         namespace Eval
  265.         {
  266.             // Side to move relative
  267.             const int OpeningGameMat = 6000;
  268.             const int MiddleGameMat = OpeningGameMat - 500;
  269.             const int EndGameMat = MiddleGameMat - 1500;
  270.         }
  271.  
  272.         const std::string StartPosition = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
  273.  
  274.         const int CaptureMask = 0x4;
  275.         const int EpMask = 0x5;
  276.  
  277.         const Move NullMove(0, 0);
  278.         const BitBoard Empty = 0x0000000000000000;
  279.         const BitBoard Universe = 0xFFFFFFFFFFFFFFFF;
  280.  
  281.         const BitBoard LightSquares = 0x55AA55AA55AA55AA;
  282.         const BitBoard DarkSquares = 0xAA55AA55AA55AA55;
  283.  
  284.         const BitBoard NotAFile = ~Files::A;
  285.         const BitBoard NotBFile = ~Files::B;
  286.         const BitBoard NotCFile = ~Files::C;
  287.         const BitBoard NotDFile = ~Files::D;
  288.         const BitBoard NotEFile = ~Files::E;
  289.         const BitBoard NotFFile = ~Files::F;
  290.         const BitBoard NotGFile = ~Files::G;
  291.         const BitBoard NotHFile = ~Files::H;
  292.         const BitBoard NotABFile = NotAFile | NotBFile;
  293.         const BitBoard NotGHFile = NotGFile | NotHFile;
  294.  
  295.         const int Infinity = 200000;
  296.         const int Unknown = 2*Infinity;
  297.         const int MaxMoves = 192;
  298.         const int MaxPly = 1024;
  299.  
  300.         const BitBoard DeBrujinValue = 0x07EDD5E59A4E28C2;
  301.         const int DeBrujinTable[] =
  302.         {
  303.             63,  0, 58,  1, 59, 47, 53,  2,
  304.             60, 39, 48, 27, 54, 33, 42,  3,
  305.             61, 51, 37, 40, 49, 18, 28, 20,
  306.             55, 30, 34, 11, 43, 14, 22,  4,
  307.             62, 57, 46, 52, 38, 26, 32, 41,
  308.             50, 36, 17, 19, 29, 10, 13, 21,
  309.             56, 45, 25, 31, 35, 16,  9, 12,
  310.             44, 24, 15,  8, 23,  7,  6,  5
  311.         };
  312.  
  313.     }
  314. }
  315.  
  316. #endif // CONSTANTS_H