engine.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. use search::apply_move;
  2. use bitboard::Bitboard;
  3. use game::Game;
  4. use search::*;
  5. use std::io::Write;
  6. use movegen::*;
  7. use log::{info};
  8. use std::sync::mpsc::{Receiver, Sender};
  9. pub enum EngineMsg {
  10. SetBoard(Game),
  11. SetPiece(Bitboard),
  12. Search(i32),
  13. Ping,
  14. Stop,
  15. NewGame,
  16. GetState,
  17. GetInfo,
  18. }
  19. pub enum EngineState {
  20. Idle,
  21. Searching
  22. }
  23. pub enum InterfaceMsg {
  24. BestMove(Move),
  25. State(EngineState)
  26. }
  27. pub fn run_engine(r: Receiver<EngineMsg>, s: Sender<InterfaceMsg>) {
  28. let mut game = Game::default();
  29. for msg in r {
  30. //game.pieces[0] = 0x00ff_0000_0000_0100;
  31. //game.pieces[QUEEN as usize] = 0x0000_0000_0000_0080;
  32. //game.pieces[10] = 0x4000_0000_0000_0000;
  33. match msg {
  34. EngineMsg::SetBoard(g) => {
  35. //println!("SetBoard");
  36. game = g;
  37. },
  38. EngineMsg::SetPiece(_) => { println!("SetPiece") },
  39. EngineMsg::Search(depth) => {
  40. //info!("searching in pos\n {}", game.beautiful_print());
  41. //println!("Search {}", depth);
  42. let best_move = search(&game, depth);
  43. println!("bestmove {}", best_move.to_string());
  44. info!("bestmove {}", best_move.to_string());
  45. },
  46. EngineMsg::Ping => { println!("Ping") },
  47. EngineMsg::Stop => { println!("Stop") },
  48. EngineMsg::NewGame => {
  49. //println!("NewGame")
  50. },
  51. EngineMsg::GetState => { println!("GetState") },
  52. EngineMsg::GetInfo => { println!("GetInfo") },
  53. }
  54. //println!("{}", game.beautiful_print());
  55. //let moves = generate_moves(&game, WHITE);
  56. }
  57. }