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