Nicolas Winkler 6 سال پیش
والد
کامیت
d7f78dd9de
5فایلهای تغییر یافته به همراه67 افزوده شده و 27 حذف شده
  1. 0 18
      src/bitboard.rs
  2. 18 5
      src/engine.rs
  3. 4 4
      src/interface.rs
  4. 4 0
      src/main.rs
  5. 41 0
      src/movegen.rs

+ 0 - 18
src/bitboard.rs

@@ -9,24 +9,6 @@
 pub type Bitboard = u64;
 
 
-pub struct BitboardIterator { pub board: Bitboard }
-
-impl Iterator for BitboardIterator {
-    type Item = Bitboard;
-
-    fn next(&mut self) -> Option<Bitboard> {
-        if self.board != 0 {
-            let lsb = self.board & (0_u64.wrapping_sub(self.board));
-            self.board &= !lsb;
-            //Some(lsb.trailing_zeros())
-            Some(lsb)
-        }
-            else {
-                None
-            }
-    }
-}
-
 
 pub const A_FILE: Bitboard = 0x_8080_8080_8080_8080;
 pub const H_FILE: Bitboard = 0x_0101_0101_0101_0101;

+ 18 - 5
src/engine.rs

@@ -1,19 +1,32 @@
+use movegen::Move;
 
-
-
-
-pub enum Message {
+pub enum EngineMsg {
     SetBoard,
     SetPiece(Bitboard),
     Search(i32),
     Ping,
     Stop,
+    GetState,
     GetInfo,
 }
 
 
+pub enum EngineState {
+    Idle,
+    Searching
+}
+
+
+pub enum InterfaceMsg {
+    BestMove(Move),
+    State(EngineState)
+}
+
+
 
-pub fn run_engine(r: Receiver<Message>) {
+pub fn run_engine(r: Receiver<EngineMsg>) {
+    for msg in r {
 
+    }
 }
 

+ 4 - 4
src/interface.rs

@@ -1,5 +1,5 @@
 use std::io::{self, BufRead};
-use std::collections::HashMap;
+
 
 pub fn run() {
     let stdin = io::stdin();
@@ -25,15 +25,15 @@ fn run_command(mut cmd: Vec<&str>) {
     }
 }
 
-fn cmd_uci(args: Vec<&str>) {
+fn cmd_uci(_args: Vec<&str>) {
     println!("uciok");
 }
 
-fn cmd_isready(args: Vec<&str>) {
+fn cmd_isready(_args: Vec<&str>) {
     println!("readyok");
 }
 
-fn cmd_register(args: Vec<&str>) {
+fn cmd_register(_args: Vec<&str>) {
 }
 
 

+ 4 - 0
src/main.rs

@@ -1,4 +1,8 @@
 mod interface;
+mod bitboard;
+mod movegen;
+mod engine;
+mod search;
 
 
 fn main() {

+ 41 - 0
src/movegen.rs

@@ -0,0 +1,41 @@
+use bitboard::Bitboard;
+
+type Square = u8;
+type Side = bool;
+
+const WHITE: Side = false;
+const BLACK: Side = true;
+
+pub enum Move {
+    Default     { from: Square, to: Square },
+    Castling    { side: Side, left: bool },
+    EnPassant   { side: Side, column: u8}
+}
+
+
+pub struct BitboardIterator { pub board: Bitboard }
+
+impl Iterator for BitboardIterator {
+    type Item = Bitboard;
+
+    fn next(&mut self) -> Option<Bitboard> {
+        if self.board != 0 {
+            let lsb = self.board & (0_u64.wrapping_sub(self.board));
+            self.board &= !lsb;
+            //Some(lsb.trailing_zeros())
+            Some(lsb)
+        }
+            else {
+                None
+            }
+    }
+}
+
+
+fn generate_pawn_moves()
+{
+}
+
+
+
+