Add a README
This commit is contained in:
		
							parent
							
								
									182bf81126
								
							
						
					
					
						commit
						dae5179947
					
				
					 1 changed files with 113 additions and 0 deletions
				
			
		
							
								
								
									
										113
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,113 @@
 | 
				
			||||||
 | 
					ChessFriend
 | 
				
			||||||
 | 
					===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A chess engine written in Rust.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The project is divided into crates for major components of the engine. These
 | 
				
			||||||
 | 
					crates are collected in a Cargo workspace. All crates have the `chessfriend_`
 | 
				
			||||||
 | 
					naming prefix. The directory structure omits this prefix, and I also frequently
 | 
				
			||||||
 | 
					do when referring to them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Engine Crates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The engine is divided into several crates, each providing vital types and
 | 
				
			||||||
 | 
					functionality.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `core`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A collection of types for representing core concepts in a chess game and the
 | 
				
			||||||
 | 
					engine. Types like `Color` (player or piece color), `Shape` (the shape of a
 | 
				
			||||||
 | 
					piece: knight, etc), `Piece` (a piece of a particular color and shape), and
 | 
				
			||||||
 | 
					`Score` (for scoring a board position) live here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `bitboard`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Implements an efficient BitBoard type. Bitboards use a 64-bit bit field to mark a
 | 
				
			||||||
 | 
					square on a board as occupied or free.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `board`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Implements a `Board` type that represents a moment-in-time board position. FEN
 | 
				
			||||||
 | 
					parsing and production lives here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `moves`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `Move` type lives here, along with routines for encoding moves in efficient
 | 
				
			||||||
 | 
					forms, parsing moves from algebraic notation, and recording moves in a game
 | 
				
			||||||
 | 
					context. Additionally, the move generators for each shape of piece are here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `position`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Exports the `Position` type, representing a board position within the context of
 | 
				
			||||||
 | 
					a game. As such, it also provides a move list, and methods to make and unmake
 | 
				
			||||||
 | 
					moves.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Support Crates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These crates are for debugging and testing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `explorer`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This crate implements a small command-line application for "exploring" board
 | 
				
			||||||
 | 
					positions. I meant for this program to be a debugging utility so that I could
 | 
				
			||||||
 | 
					examine bitboards and other board structures live. It has grown over time to
 | 
				
			||||||
 | 
					also support more aspects of interacting with the engine. So you can also use it
 | 
				
			||||||
 | 
					to play a game!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### `perft`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A small Perft utility that executes perft to a given depth from some starting
 | 
				
			||||||
 | 
					position.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Building
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Build the engine in the usual Rusty way.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					$ cargo build
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Testing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test in the usual Rusty way.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					$ cargo test
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The engine has a fairly comprehensive unit test suite, as well as a decent pile
 | 
				
			||||||
 | 
					of integration tests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Authors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This engine is built entirely by me, Eryn Wells.
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue