Bishop.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #include "Bishop.h"
  2. #include "Position.h"
  3. #include <utility>
  4. #include <stdexcept>
  5. Bishop::Bishop(Position pos) {
  6. position = pos;
  7. }
  8. std::pair<int, Position*> Bishop::get_moves()
  9. {
  10. // У ладьи всегда 14 ходов, если нет преград
  11. Position* moves = new Position[14];
  12. int moveNum = 0;
  13. for(int i = 1; i < 8; i++) {
  14. for(int j = -1; j < 2; j+=2) {
  15. for(int k = -1; k < 2; k+=2) {
  16. // Не добавляем невозможные ходы
  17. if (not (position.posSym + i*j <= 'H' and position.posNum + i*k <= '8' and position.posSym + i*j >= 'A' and position.posNum + i*k >= '1'))
  18. continue;
  19. // Position создаст ошибку, если создать невозможный ход
  20. Position p;
  21. try {
  22. p = Position((char)(position.posSym+i*j), (char)(position.posNum+i*k));
  23. }
  24. catch (const std::invalid_argument) {
  25. p = Position();
  26. }
  27. moves[moveNum] = p;
  28. moveNum++;
  29. }
  30. }
  31. }
  32. return std::pair<int, Position*>(14, moves);
  33. };