search.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. use bitboard::Bitboard;
  2. use movegen::*;
  3. pub struct Game
  4. {
  5. pub pieces: [Bitboard; 12],
  6. en_passant: u8,
  7. }
  8. impl Default for Game {
  9. fn default () -> Game {
  10. Game {
  11. pieces: [0; 12],
  12. en_passant: 0,
  13. }
  14. }
  15. }
  16. impl Game {
  17. pub fn bitboard(&self, pt: PieceType, side: Side) -> Bitboard {
  18. if side == BLACK {
  19. self.pieces[(pt + 6) as usize]
  20. } else {
  21. self.pieces[pt as usize]
  22. }
  23. }
  24. pub fn pawns(&self, side: Side) -> Bitboard {
  25. match side {
  26. WHITE => self.pieces[0],
  27. BLACK => self.pieces[6],
  28. }
  29. }
  30. pub fn knights(&self, side: Side) -> Bitboard {
  31. match side {
  32. WHITE => self.pieces[1],
  33. BLACK => self.pieces[7],
  34. }
  35. }
  36. pub fn bishops(&self, side: Side) -> Bitboard {
  37. match side {
  38. WHITE => self.pieces[2],
  39. BLACK => self.pieces[8],
  40. }
  41. }
  42. pub fn rooks(&self, side: Side) -> Bitboard {
  43. match side {
  44. WHITE => self.pieces[3],
  45. BLACK => self.pieces[9],
  46. }
  47. }
  48. pub fn queens(&self, side: Side) -> Bitboard {
  49. match side {
  50. WHITE => self.pieces[4],
  51. BLACK => self.pieces[10],
  52. }
  53. }
  54. pub fn kings(&self, side: Side) -> Bitboard {
  55. match side {
  56. WHITE => self.pieces[5],
  57. BLACK => self.pieces[11],
  58. }
  59. }
  60. pub fn get_all_side(&self, side: Side) -> Bitboard {
  61. match side {
  62. WHITE => self.pieces[0] | self.pieces[1] | self.pieces[2] | self.pieces[3] |
  63. self.pieces[4] | self.pieces[5],
  64. BLACK => self.pieces[6] | self.pieces[7] | self.pieces[8] | self.pieces[9] |
  65. self.pieces[10] | self.pieces[11]
  66. }
  67. }
  68. }
  69. pub fn search() {
  70. }