King.cpp 1.1 KB

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