Chessengine.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "Chessengine.h"
  2. #include "Player.h"
  3. #include "Chessboard.h"
  4. #include "King.h"
  5. #include "Queen.h"
  6. #include "Pawn.h"
  7. #include "Position.h"
  8. #include "Rook.h"
  9. #include "Bishop.h"
  10. #include "Horse.h"
  11. #include <utility>
  12. #include <iostream>
  13. #include <stdexcept>
  14. Chessengine::Chessengine(Player* p1, Player* p2)
  15. {
  16. turn = 'W';
  17. player1 = p1;
  18. player2 = p2;
  19. player = player1;
  20. }
  21. bool Chessengine::king_on_board(char color)
  22. {
  23. const char* need_find = King(Position(), color).print();
  24. Figure* fig;
  25. for(int i = 0; i < 8; i++) {
  26. for(int j = 0; j < 8; j++) {
  27. fig = board.get_icell(i, j).get_figure();
  28. if (fig != nullptr and fig->print() == need_find) return true;
  29. }
  30. }
  31. return false;
  32. }
  33. void Chessengine::start()
  34. {
  35. while (king_on_board('W') == true and king_on_board('B') == true)
  36. {
  37. while (true) {
  38. try {
  39. std::cout << board << "How turn is " << turn << '\n';
  40. std::pair<Position, Position> move = player->get_move(board, turn);
  41. board.create_move(move.first, move.second);
  42. turn = turn == 'W' ? 'B' : 'W';
  43. player = player == player1 ? player2 : player1;
  44. break;
  45. }
  46. catch (std::invalid_argument) {
  47. continue;
  48. }
  49. }
  50. }
  51. }
  52. void Chessengine::load(vector<Figure*> figures, char turn)
  53. {
  54. board = Chessboard(figures);
  55. turn = turn;
  56. player = turn == 'W' ? player1 : player2;
  57. }
  58. void Chessengine::load_base()
  59. {
  60. // Деструктор уничтожает все переменные при выходе из функции
  61. vector<Figure*> figures;
  62. // Создание чёрных
  63. static Pawn bp1(Position('A', '7'), 'B');
  64. static Pawn bp2(Position('B', '7'), 'B');
  65. static Pawn bp3(Position('C', '7'), 'B');
  66. static Pawn bp4(Position('D', '7'), 'B');
  67. static Pawn bp5(Position('E', '7'), 'B');
  68. static Pawn bp6(Position('F', '7'), 'B');
  69. static Pawn bp7(Position('G', '7'), 'B');
  70. static Pawn bp8(Position('H', '7'), 'B');
  71. static Rook br1(Position('A', '8'), 'B');
  72. static Rook br2(Position('H', '8'), 'B');
  73. static Horse bh1(Position('B', '8'), 'B');
  74. static Horse bh2(Position('G', '8'), 'B');
  75. static Bishop bb1(Position('C', '8'), 'B');
  76. static Bishop bb2(Position('F', '8'), 'B');
  77. static King bk1(Position('E', '8'), 'B');
  78. static Queen bq1(Position('D', '8'), 'B');
  79. figures.push_back(&bp1);
  80. figures.push_back(&bp2);
  81. figures.push_back(&bp3);
  82. figures.push_back(&bp4);
  83. figures.push_back(&bp5);
  84. figures.push_back(&bp6);
  85. figures.push_back(&bp7);
  86. figures.push_back(&bp8);
  87. figures.push_back(&br1);
  88. figures.push_back(&br2);
  89. figures.push_back(&bh1);
  90. figures.push_back(&bh2);
  91. figures.push_back(&bb1);
  92. figures.push_back(&bb2);
  93. figures.push_back(&bk1);
  94. figures.push_back(&bq1);
  95. // Создание белых
  96. static Pawn wp1(Position('A', '2'), 'W');
  97. static Pawn wp2(Position('B', '2'), 'W');
  98. static Pawn wp3(Position('C', '2'), 'W');
  99. static Pawn wp4(Position('D', '2'), 'W');
  100. static Pawn wp5(Position('E', '2'), 'W');
  101. static Pawn wp6(Position('F', '2'), 'W');
  102. static Pawn wp7(Position('G', '2'), 'W');
  103. static Pawn wp8(Position('H', '2'), 'W');
  104. static Rook wr1(Position('A', '1'), 'W');
  105. static Rook wr2(Position('H', '1'), 'W');
  106. static Horse wh1(Position('B', '1'), 'W');
  107. static Horse wh2(Position('G', '1'), 'W');
  108. static Bishop wb1(Position('C', '1'), 'W');
  109. static Bishop wb2(Position('F', '1'), 'W');
  110. static King wk1(Position('E', '1'), 'W');
  111. static Queen wq1(Position('D', '1'), 'W');
  112. figures.push_back(&wp1);
  113. figures.push_back(&wp2);
  114. figures.push_back(&wp3);
  115. figures.push_back(&wp4);
  116. figures.push_back(&wp5);
  117. figures.push_back(&wp6);
  118. figures.push_back(&wp7);
  119. figures.push_back(&wp8);
  120. figures.push_back(&wr1);
  121. figures.push_back(&wr2);
  122. figures.push_back(&wh1);
  123. figures.push_back(&wh2);
  124. figures.push_back(&wb1);
  125. figures.push_back(&wb2);
  126. figures.push_back(&wk1);
  127. figures.push_back(&wq1);
  128. load(figures, 'W');
  129. }