King.cpp 979 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "King.h"
  2. #include "Position.h"
  3. #include <utility>
  4. #include <stdexcept>
  5. #include <iostream>
  6. King::King(Position pos, char c) {
  7. position = pos;
  8. color = c;
  9. }
  10. vector<Position> King::get_moves()
  11. {
  12. vector<Position> moves;
  13. for(int i = -1; i < 2; i++) {
  14. for(int j = -1; j < 2; j++) {
  15. Position p;
  16. if (position.posSym+i == position.posSym and position.posNum+j == position.posNum)
  17. continue;
  18. // Position выдаст ошибку если указать невозможную позицию
  19. try {
  20. p = Position((char)(position.posSym+i), (char)(position.posNum+j));
  21. }
  22. catch (const std::invalid_argument) {
  23. continue;
  24. }
  25. moves.push_back(p);
  26. }
  27. }
  28. return moves;
  29. }
  30. const char* King::print()
  31. {
  32. const char* me;
  33. if (color == 'B')
  34. me = "♚";
  35. else
  36. me = "♔";
  37. return me;
  38. }