King.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. Figure* King::copy() {
  11. static King k(position, color);
  12. Figure* f = &k;
  13. return f;
  14. }
  15. vector<Position> King::get_moves()
  16. {
  17. vector<Position> moves;
  18. for(int i = -1; i < 2; i++) {
  19. for(int j = -1; j < 2; j++) {
  20. Position p;
  21. if (position.posSym+i == position.posSym and position.posNum+j == position.posNum)
  22. continue;
  23. // Position выдаст ошибку если указать невозможную позицию
  24. try {
  25. p = Position((char)(position.posSym+i), (char)(position.posNum+j));
  26. }
  27. catch (const std::invalid_argument) {
  28. continue;
  29. }
  30. moves.push_back(p);
  31. }
  32. }
  33. return moves;
  34. }
  35. const char* King::print()
  36. {
  37. const char* me;
  38. if (color == 'B')
  39. me = "♚";
  40. else
  41. me = "♔";
  42. return me;
  43. }