New game
This commit is contained in:
		
							parent
							
								
									c125ce3dfc
								
							
						
					
					
						commit
						44c0a23252
					
				
							
								
								
									
										20
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/lib.rs
									
									
									
									
									
								
							| @ -7,11 +7,15 @@ use log::{info, warn}; | ||||
| use std::io::*; | ||||
| use crate::uci_command::*; | ||||
| 
 | ||||
| use chess::{Game, Board, ChessMove}; | ||||
| 
 | ||||
| pub struct UciEngine<Fi: BufRead, Fo: Write> { | ||||
|     source: Fi, | ||||
|     destination: Fo, | ||||
|     uciok: bool, | ||||
|     id: Id, | ||||
|     initial: Board, | ||||
|     game: Game, | ||||
| } | ||||
| 
 | ||||
| impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> { | ||||
| @ -19,7 +23,10 @@ impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> { | ||||
|         UciEngine::<Fi, Fo>{ | ||||
|             source, destination, | ||||
|             id: Id::new(), | ||||
|             uciok: false} | ||||
|             uciok: false, | ||||
|             initial: Board::default(), | ||||
|             game: Game::new() | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn init(&mut self){ | ||||
| @ -32,7 +39,14 @@ impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> { | ||||
|     } | ||||
| 
 | ||||
|     pub fn new_game(&mut self) { | ||||
|         unimplemented!(); | ||||
|         self.initial = Board::default(); | ||||
|         self.game = Game::new_with_board(self.initial); | ||||
|         self.push(GuiCommand::UciNewGame); | ||||
|     } | ||||
| 
 | ||||
|     pub fn make_move(&mut self, chess_move: ChessMove) { | ||||
|         self.game.make_move(chess_move); | ||||
|         self.push(GuiCommand::Position { position: Some(self.initial), moves: self.game.actions().to_vec() }) | ||||
|     } | ||||
| 
 | ||||
|     pub fn terminate(&mut self, reason: &str) { | ||||
| @ -132,7 +146,7 @@ impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> { | ||||
|     pub fn push(&mut self, command: GuiCommand) { | ||||
|         let command_str = command.to_string(); | ||||
|         match self.destination.write(&command_str.as_bytes()){ | ||||
|             Ok(n) if n == command_str.len() => info!("☒ gui: {command_str} "), | ||||
|             Ok(n) if n == command_str.len() => info!("→ gui: {command_str} "), | ||||
|             Ok(n) => warn!("⚠ gui: {command_str} truncated at {n}"), | ||||
|             Err(reason) => warn!("Unable to send command {command_str}: {reason}"), | ||||
|         } | ||||
|  | ||||
| @ -2,7 +2,7 @@ use itertools::join; | ||||
| use std::time::Duration; | ||||
| use std::fmt; | ||||
| 
 | ||||
| use chess::ChessMove; | ||||
| use chess::{ChessMove, Board, Action}; | ||||
| 
 | ||||
| mod uci_command{} | ||||
| 
 | ||||
| @ -30,9 +30,10 @@ impl Id { | ||||
|         self.author.clone() | ||||
|     } | ||||
| } | ||||
| #[derive(Debug)] | ||||
| pub struct Info {} | ||||
| #[derive(Debug)] | ||||
| pub struct Opt{} | ||||
| pub struct Position{} | ||||
| 
 | ||||
| pub enum EngineCommand { | ||||
|     Id{id: Id}, | ||||
| @ -45,6 +46,8 @@ pub enum EngineCommand { | ||||
|     Opt{options: Vec<Opt>}, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub enum GuiCommand { | ||||
|     Uci, | ||||
|     Debug{mode: bool}, | ||||
| @ -52,7 +55,7 @@ pub enum GuiCommand { | ||||
|     SetOption{option: Opt}, | ||||
|     Register, // unimplemented
 | ||||
|     UciNewGame, | ||||
|     Position{position: Option<Position>, moves: Vec<ChessMove>}, | ||||
|     Position{position: Option<Board>, moves: Vec<Action>}, | ||||
|     Go, | ||||
|     SearchMoves{moves: Vec<ChessMove>}, | ||||
|     Ponder, | ||||
| @ -101,7 +104,8 @@ impl fmt::Display for GuiCommand { | ||||
|     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result{ | ||||
|         match self { | ||||
|             GuiCommand::Uci => write!(f, "uci\n"), | ||||
|             _ => unimplemented!(), | ||||
|             GuiCommand::UciNewGame => write!(f, "ucinewgame\n"), | ||||
|             a => unimplemented!("{:?}", a), | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Baptiste Fouques
						Baptiste Fouques