Rook.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "Rook.h"
  2. #include "Position.h"
  3. #include <utility>
  4. #include <stdexcept>
  5. #include <iostream>
  6. Rook::Rook(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*> Rook::get_moves()
  13. {
  14. Position* moves = new Position[14];
  15. int moveNum = 0;
  16. for (int i = 1; i < 9; i++) {
  17. Position p;
  18. Position p2;
  19. try {
  20. if ('0'+i != position.posNum) p2 = Position(position.posSym, (char)('0'+i));
  21. if ('0'+i+16 != position.posSym) p = Position((char)('0'+i+16), position.posNum);
  22. }
  23. catch (const std::invalid_argument) {
  24. continue;
  25. }
  26. if ('0'+i+16 != position.posSym) {
  27. moves[moveNum] = p;
  28. moveNum++;
  29. }
  30. if ('0'+i != position.posNum) {
  31. moves[moveNum] = p2;
  32. moveNum++;
  33. }
  34. }
  35. return std::pair<int, Position*>(14, moves);
  36. }
  37. const char* Rook::print()
  38. {
  39. const char* me;
  40. if (color == 'B')
  41. me = "♜";
  42. else
  43. me = "♖";
  44. return me;
  45. }