Rook.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. Figure* Rook::copy() {
  13. static Rook r(position, color);
  14. Figure* f = &r;
  15. return f;
  16. }
  17. vector<Position> Rook::get_moves()
  18. {
  19. vector<Position> moves;
  20. int moveNum = 0;
  21. for (int i = 1; i < 9; i++) {
  22. Position p;
  23. Position p2;
  24. try {
  25. if ('0'+i != position.posNum) p2 = Position(position.posSym, (char)('0'+i));
  26. if ('0'+i+16 != position.posSym) p = Position((char)('0'+i+16), position.posNum);
  27. }
  28. catch (const std::invalid_argument) {
  29. continue;
  30. }
  31. if ('0'+i+16 != position.posSym) {
  32. moves.push_back(p);
  33. }
  34. if ('0'+i != position.posNum) {
  35. moves.push_back(p2);
  36. }
  37. }
  38. return moves;
  39. }
  40. const char* Rook::print()
  41. {
  42. const char* me;
  43. if (color == 'B')
  44. me = "♜";
  45. else
  46. me = "♖";
  47. return me;
  48. }