Difference between revisions of "BBC"
GerdIsenberg (talk | contribs) |
GerdIsenberg (talk | contribs) |
||
Line 4: | Line 4: | ||
a didactic bitboard chess engine by [[Maksim Korzh]] alias Code Monkey King, written in [[C]]. BBC is subject of a [https://en.wikipedia.org/wiki/YouTube YouTube] [https://en.wikipedia.org/wiki/Tutorial video tutorial] started in summer 2020 <ref>[https://youtu.be/QUNP-UjujBM Bitboard CHESS ENGINE in C: intro]</ref>, actually work in progress. | a didactic bitboard chess engine by [[Maksim Korzh]] alias Code Monkey King, written in [[C]]. BBC is subject of a [https://en.wikipedia.org/wiki/YouTube YouTube] [https://en.wikipedia.org/wiki/Tutorial video tutorial] started in summer 2020 <ref>[https://youtu.be/QUNP-UjujBM Bitboard CHESS ENGINE in C: intro]</ref>, actually work in progress. | ||
The [[:Category:Open Source|open source engine]] is further published on [https://en.wikipedia.org/wiki/GitHub GitHub] <ref>[https://github.com/maksimKorzh/bbc GitHub - maksimKorzh/bbc: Bit Board Chess (BBC) - The easiest to understand bitboard chess engine by Code Monkey King]</ref>, and will be compliant to the [[UCI]] protocol. | The [[:Category:Open Source|open source engine]] is further published on [https://en.wikipedia.org/wiki/GitHub GitHub] <ref>[https://github.com/maksimKorzh/bbc GitHub - maksimKorzh/bbc: Bit Board Chess (BBC) - The easiest to understand bitboard chess engine by Code Monkey King]</ref>, and will be compliant to the [[UCI]] protocol. | ||
− | While the series offers a nice introduction in | + | While the series offers a nice introduction in chess engine programming and [[Bitboards|bitboard]] techniques, |
the advanced approach of [[Magic Bitboards]] to determine [[Sliding Piece Attacks|sliding piece attacks]] with all its lengthy initialization topics might be hard to understand and deterrent for the intended novice target group. | the advanced approach of [[Magic Bitboards]] to determine [[Sliding Piece Attacks|sliding piece attacks]] with all its lengthy initialization topics might be hard to understand and deterrent for the intended novice target group. | ||
− | The linewise approaches of [[First Rank Attacks]] to introduce occupancy lookups, followed by [[Kindergarten Bitboards]] - as intermediate step towards magics bitboards - seem didactically more appropriate. | + | The linewise approaches of [[First Rank Attacks]] to introduce occupancy lookups, followed by [[Kindergarten Bitboards]] - as intermediate step towards magics bitboards - seem didactically more appropriate. Anyway, a valuable video series covering various aspects of computer chess programming. '''BBC 1.0''' was finally released on September 24, 2020 <ref>[http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75199 BBC 1.0 release - UCI chess engine by CMK] by [[Maksim Korzh]], [[CCC]], September 24, 2020</ref>. |
=See also= | =See also= | ||
Line 15: | Line 15: | ||
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74917 Comparing 4 move generators: 0x88 vs 10x12 vs 10x12 + bitboards HYBRID vs Pure MAGIC BITBOARDS] by [[Maksim Korzh]], [[CCC]], August 28, 2020 | * [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=74917 Comparing 4 move generators: 0x88 vs 10x12 vs 10x12 + bitboards HYBRID vs Pure MAGIC BITBOARDS] by [[Maksim Korzh]], [[CCC]], August 28, 2020 | ||
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75017 Bitboard CHESS ENGINE in C: YouTube series by Code Monkey King] by [[Maksim Korzh]], [[CCC]], September 06, 2020 | * [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75017 Bitboard CHESS ENGINE in C: YouTube series by Code Monkey King] by [[Maksim Korzh]], [[CCC]], September 06, 2020 | ||
+ | * [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75155 Zobrist hashing tutorials on YouTube] by [[Maksim Korzh]], [[CCC]], September 19, 2020 | ||
+ | * [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75199 BBC 1.0 release - UCI chess engine by CMK] by [[Maksim Korzh]], [[CCC]], September 24, 2020 | ||
=External Links= | =External Links= | ||
Line 34: | Line 36: | ||
# [https://youtu.be/gaXLyW-yMvg Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces] | # [https://youtu.be/gaXLyW-yMvg Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces] | ||
# [https://youtu.be/JjFYmkUhLN4 Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm] » [[Pseudorandom Number Generator]] | # [https://youtu.be/JjFYmkUhLN4 Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm] » [[Pseudorandom Number Generator]] | ||
− | # [https://youtu.be/KqWeOVyOoyU Generating MAGIC NUMBER candidates] | + | # [https://youtu.be/KqWeOVyOoyU Generating MAGIC NUMBER candidates] » [[Looking for Magics]] |
# [https://youtu.be/UnEu5GOiSEs Generating MAGIC NUMBERS via brute force trial and error method] | # [https://youtu.be/UnEu5GOiSEs Generating MAGIC NUMBERS via brute force trial and error method] | ||
− | # [https://youtu.be/1lAM8ffBg0A Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS] | + | # [https://youtu.be/1lAM8ffBg0A Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS]»[[Magic Bitboards#Plain|Plain Magic Bitboards]] |
− | # [https://youtu.be/ZBBju42pKvw Defining BITBOARDS, OCCUPANCIES and helper variables] | + | # [https://youtu.be/ZBBju42pKvw Defining BITBOARDS, OCCUPANCIES and helper variables] » [[Bitboard Board-Definition]] |
− | # [https://youtu.be/iJ0VpXq90zY Printing CHESS BOARD position and game state variables] | + | # [https://youtu.be/iJ0VpXq90zY Printing CHESS BOARD position and game state variables] » [[Chess Position]] |
− | # [https://youtu.be/IdFHFRiQtj8 Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state] | + | # [https://youtu.be/IdFHFRiQtj8 Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state] » [[Forsyth-Edwards Notation]] |
# [https://youtu.be/KSs4KRQPOKE Getting QUEEN ATTACKS by looking up bishop & rook attack tables] | # [https://youtu.be/KSs4KRQPOKE Getting QUEEN ATTACKS by looking up bishop & rook attack tables] | ||
− | # [https://youtu.be/v9CEqjliv3E Implementing routine to find out whether SQUARE IS ATTACKED] | + | # [https://youtu.be/v9CEqjliv3E Implementing routine to find out whether SQUARE IS ATTACKED] » [[Square Attacked By]] |
− | # [https://youtu.be/eRvCLaa-3Rk Writing GENERATE MOVES function skeleton] | + | # [https://youtu.be/eRvCLaa-3Rk Writing GENERATE MOVES function skeleton] » [[Move Generation]] |
− | # [https://youtu.be/62Hy1JEehqI Generating QUIET PAWN moves] | + | # [https://youtu.be/62Hy1JEehqI Generating QUIET PAWN moves] » [[Pawn Pushes (Bitboards)]] |
− | # [https://youtu.be/cezEoX8WpWs Generating PAWN CAPTURE moves] | + | # [https://youtu.be/cezEoX8WpWs Generating PAWN CAPTURE moves] » [[Pawn Attacks (Bitboards)#PawnCaptures|Pawn Captures]] |
− | # [https://youtu.be/TXvV2jVl7co Generating CASTLING MOVES] | + | # [https://youtu.be/TXvV2jVl7co Generating CASTLING MOVES] » [[Castling]] |
# [https://youtu.be/clNvT1W93o4 Generating SLIDER & LEAPER piece MOVES by attack tables lookup] | # [https://youtu.be/clNvT1W93o4 Generating SLIDER & LEAPER piece MOVES by attack tables lookup] | ||
− | # [https://youtu.be/ubX5lyIQoSs Binary formatting of MOVE ITEMS] | + | # [https://youtu.be/ubX5lyIQoSs Binary formatting of MOVE ITEMS] » [[Encoding Moves]] |
− | # [https://youtu.be/gyf3mr1LI7A Encoding & decoding MOVE ITEMS] | + | # [https://youtu.be/gyf3mr1LI7A Encoding & decoding MOVE ITEMS] |
− | # [https://youtu.be/AINYYiV-83I Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions] | + | # [https://youtu.be/AINYYiV-83I Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions] » [[Move List]] |
− | # [https://youtu.be/944aTQQnWAA Populating MOVE LIST with newly GENERATED MOVES] | + | # [https://youtu.be/944aTQQnWAA Populating MOVE LIST with newly GENERATED MOVES] |
+ | # [https://youtu.be/CsUelozl0a8 Preserving & restoring BOARD STATE aka COPY/MAKE approach] » [[Copy-Make]] | ||
+ | # [https://youtu.be/coVPpTJN9iU Implementing MAKE MOVE function (moving pieces)] » [[Make Move]] | ||
+ | # [https://youtu.be/nkRrQnhRo80 Implementing MAKE MOVE function (handling captures)] » [[Captures]] | ||
+ | # [https://youtu.be/gnDyJImkfVo Implementing MAKE MOVE function (handling pawn promotions)] » [[Promotions]] | ||
+ | # [https://youtu.be/5h5Z3bx0EKc Implementing MAKE MOVE function (handling enpassant moves)] » [[En passant]] | ||
+ | # [https://youtu.be/J-k2p1g6VTQ Implementing MAKE MOVE function (handling double pawn pushes)] » [[Pawn Push#DoublePush|Double Pawn Push]] | ||
+ | # [https://youtu.be/pHohRpH30a0 Implementing MAKE MOVE function (handling castling moves)] » [[Castling]] | ||
+ | # [https://youtu.be/zOWPZ4fuLGg Implementing MAKE MOVE function (updating castling rights)] » [[Castling Rights]] | ||
+ | # [https://youtu.be/ZBotXGrgbdg Implementing MAKE MOVE function (updating occupancy bitboards)] » [[Occupancy]] | ||
+ | # [https://youtu.be/sg4AMsXYuk4 Implementing MAKE MOVE function (checking whether the king is in check)] » [[Check]] | ||
+ | # [https://youtu.be/bK_dg_gMW6s Writing a cross-platform function for GETTING TIME IN MILLISECONDS] | ||
+ | # [https://youtu.be/o0xCJDhbSUM Writing PERFT DRIVER function] » [[Perft]] | ||
+ | # [https://youtu.be/p2VuC0xTPoc Writing PERFT TEST function] | ||
+ | # [https://youtu.be/1gOYB9HelXk Connecting to the GUI (parse move string)] » [[GUI]], [[UCI]] | ||
+ | # [https://youtu.be/giSqiH6aa_o Connecting to the GUI (parse "position" command)] | ||
+ | # [https://youtu.be/lb46nX6gSBw Connecting to the GUI (parse "go" command)] | ||
+ | # [https://youtu.be/rW2jzTA4kW4 Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game)] » [[TSCP]] | ||
+ | # [https://youtu.be/CMshozGbBdw Implementing RUDIMENTARY EVALUATION (material score)] » [[Evaluation]], [[Material]] | ||
+ | # [https://youtu.be/E2JzRNI1ODI Implementing RUDIMENTARY EVALUATION (positional piece scores)] | ||
+ | # [https://youtu.be/b8OcJM3VeaU Writing NEGAMAX ALPHA BETA skeleton] » [[Negamax]], [[Alpha-Beta]] | ||
+ | # [https://youtu.be/lAAdjCkWd9s Detecting CHECKMATE and STALEMATE] » [[Checkmate]], [[Stalemate]] | ||
+ | # [https://youtu.be/WzEhVjdNByg Implementing QUIESCENCE SEARCH] » [[Quiescence Search]] | ||
+ | # [https://youtu.be/NMNBWxinpPY Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table] » [[MVV-LVA|MVV/LVA]] | ||
+ | # [https://youtu.be/VeJnLN7jFm4 Writing SCORE MOVE function] » [[Move Ordering]] | ||
+ | # [https://youtu.be/3-9tzzmtQQ0 Writing SORT MOVES function] | ||
+ | # [https://youtu.be/DVSp_31iTBU Applying MOVE ORDERING to sort captures] » [[Captures]] | ||
+ | # [https://youtu.be/MA6d1hZ1YBE Sorting KILLER & HISTORY moves] » [[Killer Heuristic]], [[History Heuristic]] | ||
+ | # [https://youtu.be/LOR-dkAkUyM Collecting PV (Principle Variation) from the search] » [[Principal Variation]] | ||
+ | # [https://youtu.be/yVyQSUYts0A Implementing ITERATIVE DEEPENING] » [[Iterative Deepening]] | ||
+ | # [https://youtu.be/heJUljl_zNE Sorting PV moves + some BONUS TALK at the end] | ||
+ | # [https://youtu.be/Gs4Zk6aihyQ Implementing PVS (Principle Variation Search)] » [[Principal Variation Search]] | ||
+ | # [https://youtu.be/OLT0bU0SIeg Applying LMR (Late Move Reduction)] » [[Late Move Reductions]] | ||
+ | # [https://youtu.be/n6xAzopULxU Applying NULL MOVE PRUNING] » [[Null Move Pruning]] | ||
+ | # [https://youtu.be/1LmdOHshYkI Adjusting ASPIRATION WINDOW during iterative deepening] » [[Aspiration Windows]] | ||
+ | # [https://youtu.be/azEmgbdiecc BUG ALERT!!! Fixing PVS duplication bug] | ||
+ | # [https://youtu.be/t48NYINOekw Handling TIME CONTROLS (forked from VICE by BluefeverSoftware)] » [[Vice]] | ||
+ | # [https://youtu.be/W7dah-dat8Q Zobrist HASHING (initialize random keys)] » [[Zobrist Hashing]] | ||
+ | # [https://youtu.be/sV2C7hx-gOE Zobrist HASHING (generate hash key)] | ||
+ | # [https://youtu.be/5EMLgIFv5Qg Zobrist HASHING (hash keys incremental updates)] » [[Incremental Updates]] | ||
+ | # [https://youtu.be/fEHjpzrcRxk Implementing HASH TABLE aka transposition table (define & initialize)] » [[Transposition Table]] <ref>[http://web.archive.org/web/20070809015843/www.seanet.com/%7Ebrucemo/topics/hashing.htm The Main Transposition Table] from [[Bruce Moreland|Bruce Moreland's]] [http://web.archive.org/web/20070607231311/www.brucemo.com/compchess/programming/index.htm Programming Topics]</ref> | ||
+ | # [https://youtu.be/NcboP08y_JQ Implementing HASH TABLE aka transposition table (read/write hash entry)] | ||
+ | # [https://youtu.be/HNtAt9RMJVs Implementing HASH TABLE aka transposition table (connecting to search)] | ||
+ | # [https://youtu.be/4SXKBTGUkjk BUG ALERT! Fixing lack of enpassant & side hashing on null move] | ||
+ | # [https://youtu.be/g1b_rT9VqAw More search BUG FIXES &CLEANUPS] | ||
+ | # [https://youtu.be/XfeuxubYlT0 Handling MATING SCORES in HASH TABLE aka transposition table] » [[Score#MateScores|Mate Scores]] | ||
+ | # [https://youtu.be/WcoOTg7Aq4E Sending MATING SCORES to GUI + some cleanups & adjustments] | ||
+ | # [https://youtu.be/QhFtquEeffA Detecting THREE FOLD REPETITIONS] » [[Repetitions]] | ||
+ | # [https://youtu.be/F8ueIueVsHI Final (hopefully!) SEARCH BUG FIXES] | ||
+ | # [https://youtu.be/Yqpm6Ad4scI Improving EVALUATION (setting file & rank masks)] » [[Evaluation]], [[Pawn Pattern and Properties]] | ||
+ | # [https://youtu.be/iwBkAEC4KSs Improving EVALUATION (initializing isolated & passed pawn masks)] » [[Isolated Pawns (Bitboards)]], [[Passed Pawns (Bitboards)]] | ||
+ | # [https://youtu.be/CgvZMsJImJg Improving EVALUATION (double & isolated penalties, passed pawns bonus)] | ||
+ | # [https://youtu.be/Bp4F_321j4I Improving EVALUATION (open & semi open file scoring)] » [[Pawns and Files (Bitboards)]], [[Open File]] | ||
+ | # [https://youtu.be/iq2lxyjWZvA Improving EVALUATION (mobility and king safety)] » [[Mobility]], [[King Safety]] | ||
+ | # [https://youtu.be/1SgnTKzWuss BBC 1.0 - RELEASE] | ||
=References= | =References= |
Revision as of 11:37, 26 September 2020
BBC, (Bit Board Chess)
a didactic bitboard chess engine by Maksim Korzh alias Code Monkey King, written in C. BBC is subject of a YouTube video tutorial started in summer 2020 [1], actually work in progress.
The open source engine is further published on GitHub [2], and will be compliant to the UCI protocol.
While the series offers a nice introduction in chess engine programming and bitboard techniques,
the advanced approach of Magic Bitboards to determine sliding piece attacks with all its lengthy initialization topics might be hard to understand and deterrent for the intended novice target group.
The linewise approaches of First Rank Attacks to introduce occupancy lookups, followed by Kindergarten Bitboards - as intermediate step towards magics bitboards - seem didactically more appropriate. Anyway, a valuable video series covering various aspects of computer chess programming. BBC 1.0 was finally released on September 24, 2020 [3].
See also
Forum Posts
- Comparing 4 move generators: 0x88 vs 10x12 vs 10x12 + bitboards HYBRID vs Pure MAGIC BITBOARDS by Maksim Korzh, CCC, August 28, 2020
- Bitboard CHESS ENGINE in C: YouTube series by Code Monkey King by Maksim Korzh, CCC, September 06, 2020
- Zobrist hashing tutorials on YouTube by Maksim Korzh, CCC, September 19, 2020
- BBC 1.0 release - UCI chess engine by CMK by Maksim Korzh, CCC, September 24, 2020
External Links
GitHub
YouTube
- Intro » Bitboards
- Creating comfortable conditions for development
- Generating pre-calculated PAWN ATTACK tables » Pawn Attacks (Bitboards)
- Generating pre-calculated KNIGHT ATTACK table » Knight Attacks
- Generating pre-calculated KING ATTACK tables » King Attacks
- Masking relevant bishop occupancy bits to form a key for MAGIC BITBOARDS » Magic Bitboards
- Masking relevant ROOK OCCUPANCY BITS to form a key for MAGIC BITBOARDS
- Generating SLIDER PIECES ATTACKS on the fly for MAGIC BITBOARD purposes » Sliding Piece Attacks
- Implementing BIT COUNT routine (Brian Kernighan's way) » Population Count - Brian Kernighan's way
- Getting least significant 1st BIT INDEX » Index of LS1B by Popcount
- Populating OCCUPANCY sets to multiply them later by MAGIC NUMBERS
- Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces
- Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm » Pseudorandom Number Generator
- Generating MAGIC NUMBER candidates » Looking for Magics
- Generating MAGIC NUMBERS via brute force trial and error method
- Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS»Plain Magic Bitboards
- Defining BITBOARDS, OCCUPANCIES and helper variables » Bitboard Board-Definition
- Printing CHESS BOARD position and game state variables » Chess Position
- Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state » Forsyth-Edwards Notation
- Getting QUEEN ATTACKS by looking up bishop & rook attack tables
- Implementing routine to find out whether SQUARE IS ATTACKED » Square Attacked By
- Writing GENERATE MOVES function skeleton » Move Generation
- Generating QUIET PAWN moves » Pawn Pushes (Bitboards)
- Generating PAWN CAPTURE moves » Pawn Captures
- Generating CASTLING MOVES » Castling
- Generating SLIDER & LEAPER piece MOVES by attack tables lookup
- Binary formatting of MOVE ITEMS » Encoding Moves
- Encoding & decoding MOVE ITEMS
- Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions » Move List
- Populating MOVE LIST with newly GENERATED MOVES
- Preserving & restoring BOARD STATE aka COPY/MAKE approach » Copy-Make
- Implementing MAKE MOVE function (moving pieces) » Make Move
- Implementing MAKE MOVE function (handling captures) » Captures
- Implementing MAKE MOVE function (handling pawn promotions) » Promotions
- Implementing MAKE MOVE function (handling enpassant moves) » En passant
- Implementing MAKE MOVE function (handling double pawn pushes) » Double Pawn Push
- Implementing MAKE MOVE function (handling castling moves) » Castling
- Implementing MAKE MOVE function (updating castling rights) » Castling Rights
- Implementing MAKE MOVE function (updating occupancy bitboards) » Occupancy
- Implementing MAKE MOVE function (checking whether the king is in check) » Check
- Writing a cross-platform function for GETTING TIME IN MILLISECONDS
- Writing PERFT DRIVER function » Perft
- Writing PERFT TEST function
- Connecting to the GUI (parse move string) » GUI, UCI
- Connecting to the GUI (parse "position" command)
- Connecting to the GUI (parse "go" command)
- Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game) » TSCP
- Implementing RUDIMENTARY EVALUATION (material score) » Evaluation, Material
- Implementing RUDIMENTARY EVALUATION (positional piece scores)
- Writing NEGAMAX ALPHA BETA skeleton » Negamax, Alpha-Beta
- Detecting CHECKMATE and STALEMATE » Checkmate, Stalemate
- Implementing QUIESCENCE SEARCH » Quiescence Search
- Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table » MVV/LVA
- Writing SCORE MOVE function » Move Ordering
- Writing SORT MOVES function
- Applying MOVE ORDERING to sort captures » Captures
- Sorting KILLER & HISTORY moves » Killer Heuristic, History Heuristic
- Collecting PV (Principle Variation) from the search » Principal Variation
- Implementing ITERATIVE DEEPENING » Iterative Deepening
- Sorting PV moves + some BONUS TALK at the end
- Implementing PVS (Principle Variation Search) » Principal Variation Search
- Applying LMR (Late Move Reduction) » Late Move Reductions
- Applying NULL MOVE PRUNING » Null Move Pruning
- Adjusting ASPIRATION WINDOW during iterative deepening » Aspiration Windows
- BUG ALERT!!! Fixing PVS duplication bug
- Handling TIME CONTROLS (forked from VICE by BluefeverSoftware) » Vice
- Zobrist HASHING (initialize random keys) » Zobrist Hashing
- Zobrist HASHING (generate hash key)
- Zobrist HASHING (hash keys incremental updates) » Incremental Updates
- Implementing HASH TABLE aka transposition table (define & initialize) » Transposition Table [4]
- Implementing HASH TABLE aka transposition table (read/write hash entry)
- Implementing HASH TABLE aka transposition table (connecting to search)
- BUG ALERT! Fixing lack of enpassant & side hashing on null move
- More search BUG FIXES &CLEANUPS
- Handling MATING SCORES in HASH TABLE aka transposition table » Mate Scores
- Sending MATING SCORES to GUI + some cleanups & adjustments
- Detecting THREE FOLD REPETITIONS » Repetitions
- Final (hopefully!) SEARCH BUG FIXES
- Improving EVALUATION (setting file & rank masks) » Evaluation, Pawn Pattern and Properties
- Improving EVALUATION (initializing isolated & passed pawn masks) » Isolated Pawns (Bitboards), Passed Pawns (Bitboards)
- Improving EVALUATION (double & isolated penalties, passed pawns bonus)
- Improving EVALUATION (open & semi open file scoring) » Pawns and Files (Bitboards), Open File
- Improving EVALUATION (mobility and king safety) » Mobility, King Safety
- BBC 1.0 - RELEASE
References
- ↑ Bitboard CHESS ENGINE in C: intro
- ↑ GitHub - maksimKorzh/bbc: Bit Board Chess (BBC) - The easiest to understand bitboard chess engine by Code Monkey King
- ↑ BBC 1.0 release - UCI chess engine by CMK by Maksim Korzh, CCC, September 24, 2020
- ↑ The Main Transposition Table from Bruce Moreland's Programming Topics