Horse.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "Horse.h"
  2. #include "Position.h"
  3. #include <utility>
  4. #include <stdexcept>
  5. #include <cmath>
  6. Horse::Horse(Position pos, char c) {
  7. if (c != 'B' and c != 'W')
  8. throw std::invalid_argument("Impossible color of figure!");
  9. position = pos;
  10. color = c;
  11. }
  12. std::pair<int, Position*> Horse::get_moves()
  13. {
  14. Position* moves = new Position[8];
  15. int moveNum = 0;
  16. for(int i = -2; i < 3; i++) {
  17. for(int j = -2; j < 3; j++) {
  18. if(std::abs(i) == std::abs(j) or i == 0 or j == 0) continue;
  19. Position p;
  20. // Position выдаст ошибку если указать невозможную позицию
  21. try {
  22. p = Position((char)(position.posSym+i), (char)(position.posNum+j));
  23. }
  24. catch (const std::invalid_argument) {
  25. continue;
  26. }
  27. moves[moveNum] = p;
  28. moveNum++;
  29. }
  30. }
  31. return std::pair<int, Position*>(8, moves);
  32. }
  33. const char* Horse::print()
  34. {
  35. const char* me;
  36. if (color == 'B')
  37. me = "♞";
  38. else
  39. me = "♘";
  40. return me;
  41. }