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 std::io::*;
 | 
				
			||||||
use crate::uci_command::*;
 | 
					use crate::uci_command::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use chess::{Game, Board, ChessMove};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct UciEngine<Fi: BufRead, Fo: Write> {
 | 
					pub struct UciEngine<Fi: BufRead, Fo: Write> {
 | 
				
			||||||
    source: Fi,
 | 
					    source: Fi,
 | 
				
			||||||
    destination: Fo,
 | 
					    destination: Fo,
 | 
				
			||||||
    uciok: bool,
 | 
					    uciok: bool,
 | 
				
			||||||
    id: Id,
 | 
					    id: Id,
 | 
				
			||||||
 | 
					    initial: Board,
 | 
				
			||||||
 | 
					    game: Game,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> {
 | 
					impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> {
 | 
				
			||||||
@ -19,7 +23,10 @@ impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> {
 | 
				
			|||||||
        UciEngine::<Fi, Fo>{
 | 
					        UciEngine::<Fi, Fo>{
 | 
				
			||||||
            source, destination,
 | 
					            source, destination,
 | 
				
			||||||
            id: Id::new(),
 | 
					            id: Id::new(),
 | 
				
			||||||
            uciok: false}
 | 
					            uciok: false,
 | 
				
			||||||
 | 
					            initial: Board::default(),
 | 
				
			||||||
 | 
					            game: Game::new()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn init(&mut self){
 | 
					    pub fn init(&mut self){
 | 
				
			||||||
@ -32,7 +39,14 @@ impl<Fi: BufRead, Fo:  Write> UciEngine<Fi, Fo> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn new_game(&mut self) {
 | 
					    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) {
 | 
					    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) {
 | 
					    pub fn push(&mut self, command: GuiCommand) {
 | 
				
			||||||
        let command_str = command.to_string();
 | 
					        let command_str = command.to_string();
 | 
				
			||||||
        match self.destination.write(&command_str.as_bytes()){
 | 
					        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}"),
 | 
					            Ok(n) => warn!("⚠ gui: {command_str} truncated at {n}"),
 | 
				
			||||||
            Err(reason) => warn!("Unable to send command {command_str}: {reason}"),
 | 
					            Err(reason) => warn!("Unable to send command {command_str}: {reason}"),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@ use itertools::join;
 | 
				
			|||||||
use std::time::Duration;
 | 
					use std::time::Duration;
 | 
				
			||||||
use std::fmt;
 | 
					use std::fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use chess::ChessMove;
 | 
					use chess::{ChessMove, Board, Action};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod uci_command{}
 | 
					mod uci_command{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -30,9 +30,10 @@ impl Id {
 | 
				
			|||||||
        self.author.clone()
 | 
					        self.author.clone()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct Info {}
 | 
					pub struct Info {}
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct Opt{}
 | 
					pub struct Opt{}
 | 
				
			||||||
pub struct Position{}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub enum EngineCommand {
 | 
					pub enum EngineCommand {
 | 
				
			||||||
    Id{id: Id},
 | 
					    Id{id: Id},
 | 
				
			||||||
@ -45,6 +46,8 @@ pub enum EngineCommand {
 | 
				
			|||||||
    Opt{options: Vec<Opt>},
 | 
					    Opt{options: Vec<Opt>},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub enum GuiCommand {
 | 
					pub enum GuiCommand {
 | 
				
			||||||
    Uci,
 | 
					    Uci,
 | 
				
			||||||
    Debug{mode: bool},
 | 
					    Debug{mode: bool},
 | 
				
			||||||
@ -52,7 +55,7 @@ pub enum GuiCommand {
 | 
				
			|||||||
    SetOption{option: Opt},
 | 
					    SetOption{option: Opt},
 | 
				
			||||||
    Register, // unimplemented
 | 
					    Register, // unimplemented
 | 
				
			||||||
    UciNewGame,
 | 
					    UciNewGame,
 | 
				
			||||||
    Position{position: Option<Position>, moves: Vec<ChessMove>},
 | 
					    Position{position: Option<Board>, moves: Vec<Action>},
 | 
				
			||||||
    Go,
 | 
					    Go,
 | 
				
			||||||
    SearchMoves{moves: Vec<ChessMove>},
 | 
					    SearchMoves{moves: Vec<ChessMove>},
 | 
				
			||||||
    Ponder,
 | 
					    Ponder,
 | 
				
			||||||
@ -101,7 +104,8 @@ impl fmt::Display for GuiCommand {
 | 
				
			|||||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result{
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result{
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            GuiCommand::Uci => write!(f, "uci\n"),
 | 
					            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