Browse Source

replace arrays to vectors

jezv 11 months ago
parent
commit
268c8220c9
15 changed files with 57 additions and 61 deletions
  1. 4 6
      Bishop.cpp
  2. 2 1
      Bishop.h
  3. 8 0
      Chessboard.h
  4. 2 1
      Figure.h
  5. 4 6
      Horse.cpp
  6. 1 1
      Horse.h
  7. 4 6
      King.cpp
  8. 1 1
      King.h
  9. 5 7
      Pawn.cpp
  10. 1 1
      Pawn.h
  11. 6 11
      Queen.cpp
  12. 1 1
      Queen.h
  13. 5 7
      Rook.cpp
  14. 1 1
      Rook.h
  15. 12 11
      test_figures.cpp

+ 4 - 6
Bishop.cpp

@@ -12,11 +12,10 @@ Bishop::Bishop(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> Bishop::get_moves()
+vector<Position> Bishop::get_moves()
 {
     // У ладьи всегда 14 ходов, если нет преград
-    Position* moves = new Position[14];
-    int moveNum = 0;
+    vector<Position> moves;
     for(int i = 1; i < 8; i++) {
         for(int j = -1; j < 2; j+=2) {
             for(int k = -1; k < 2; k+=2) {
@@ -31,12 +30,11 @@ std::pair<int, Position*> Bishop::get_moves()
                 catch (const std::invalid_argument) {
                     continue;
                 }
-                moves[moveNum] = p;
-                moveNum++;
+                moves.push_back(p);
             }
         }
     }
-    return std::pair<int, Position*>(14, moves);
+    return moves;
 }
 
 const char* Bishop::print()

+ 2 - 1
Bishop.h

@@ -3,6 +3,7 @@
 
 #include "Figure.h"
 #include "Position.h"
+#include <vector>
 
 
 class Bishop: public Figure
@@ -10,7 +11,7 @@ class Bishop: public Figure
     public:
     Bishop(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 8 - 0
Chessboard.h

@@ -0,0 +1,8 @@
+
+
+
+class Chessboard
+{
+    public:
+    Chessboard();
+};

+ 2 - 1
Figure.h

@@ -3,6 +3,7 @@
 
 #include "Position.h"
 #include <utility>
+#include <vector>
 
 using namespace std;
 
@@ -17,7 +18,7 @@ class Figure
     // Получить возможные движения фигуры на доске
     // вернёт moves_count - количество возможных ходов
     // и список из char[2] - сами ходы (вида A5, B3 и т.п.)
-    virtual std::pair<int, Position*> get_moves() = 0;
+    virtual vector<Position> get_moves() = 0;
 
     virtual const char* print() = 0;
 };

+ 4 - 6
Horse.cpp

@@ -12,10 +12,9 @@ Horse::Horse(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> Horse::get_moves()
+vector<Position> Horse::get_moves()
 {
-    Position* moves = new Position[8];
-    int moveNum = 0;
+    vector<Position> moves;
     for(int i = -2; i < 3; i++) {
         for(int j = -2; j < 3; j++) {
             if(std::abs(i) == std::abs(j) or i == 0 or j == 0) continue;
@@ -27,11 +26,10 @@ std::pair<int, Position*> Horse::get_moves()
             catch (const std::invalid_argument) {
                 continue;
             }
-            moves[moveNum] = p;
-            moveNum++;
+            moves.push_back(p);
         }
     }
-    return std::pair<int, Position*>(8, moves);
+    return moves;
 }
 
 const char* Horse::print()

+ 1 - 1
Horse.h

@@ -10,7 +10,7 @@ class Horse: public Figure
     public:
     Horse(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 4 - 6
King.cpp

@@ -10,10 +10,9 @@ King::King(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> King::get_moves()
+vector<Position> King::get_moves()
 {
-    Position* moves = new Position[8];
-    int moveCounts = 0;
+    vector<Position> moves;
     for(int i = -1; i < 2; i++) {
         for(int j = -1; j < 2; j++) {
             Position p;
@@ -26,11 +25,10 @@ std::pair<int, Position*> King::get_moves()
             catch (const std::invalid_argument) {
                 continue;
             }
-            moves[moveCounts] = p;
-            moveCounts++;
+            moves.push_back(p);
         }
     }
-    return std::pair<int, Position*>(8, moves);
+    return moves;
 }
 
 const char* King::print()

+ 1 - 1
King.h

@@ -10,7 +10,7 @@ class King: public Figure
     public:
     King(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 5 - 7
Pawn.cpp

@@ -12,18 +12,16 @@ Pawn::Pawn(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> Pawn::get_moves()
+vector<Position> Pawn::get_moves()
 {
-    Position* moves = new Position[1];
+    vector<Position> moves;
     Position p;
     try {
         p = Position(position.posSym, (char)(position.posNum+1));
     }
-    catch (const std::invalid_argument) {
-        p = Position();
-    }
-    moves[0] = p;
-    return std::pair<int, Position*>(1, moves);
+    catch (const std::invalid_argument) {}
+    moves.push_back(p);
+    return moves;
 }
 
 const char* Pawn::print()

+ 1 - 1
Pawn.h

@@ -10,7 +10,7 @@ class Pawn: public Figure
     public:
     Pawn(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 6 - 11
Queen.cpp

@@ -12,11 +12,9 @@ Queen::Queen(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> Queen::get_moves()
+vector<Position> Queen::get_moves()
 {
-    Position* moves = new Position[28];
-
-    int moveNum = 0;
+    vector<Position> moves;
 
     // Сначала ходы по диагоналям
     for(int i = 1; i < 8; i++) {
@@ -33,8 +31,7 @@ std::pair<int, Position*> Queen::get_moves()
                 catch (const std::invalid_argument) {
                     p = Position();
                 }
-                moves[moveNum] = p;
-                moveNum++;
+                moves.push_back(p);
             }
         }
     }
@@ -52,16 +49,14 @@ std::pair<int, Position*> Queen::get_moves()
             continue;
         }
         if ('0'+i+16 != position.posSym) {
-            moves[moveNum] = p;
-            moveNum++;
+            moves.push_back(p);
         }
         if ('0'+i != position.posNum) {
-            moves[moveNum] = p2;
-            moveNum++;
+            moves.push_back(p2);
         }
     }
 
-    return std::pair<int, Position*>(28, moves);
+    return moves;
 }
 
 const char* Queen::print()

+ 1 - 1
Queen.h

@@ -10,7 +10,7 @@ class Queen: public Figure
     public:
     Queen(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 5 - 7
Rook.cpp

@@ -12,9 +12,9 @@ Rook::Rook(Position pos, char c) {
     color = c;
 }
 
-std::pair<int, Position*> Rook::get_moves()
+vector<Position> Rook::get_moves()
 {
-    Position* moves = new Position[14];
+    vector<Position> moves;
     int moveNum = 0;
     for (int i = 1; i < 9; i++) {
         Position p;
@@ -27,15 +27,13 @@ std::pair<int, Position*> Rook::get_moves()
             continue;
         }
         if ('0'+i+16 != position.posSym) {
-            moves[moveNum] = p;
-            moveNum++;
+            moves.push_back(p);
         }
         if ('0'+i != position.posNum) {
-            moves[moveNum] = p2;
-            moveNum++;
+            moves.push_back(p2);
         }
     }
-    return std::pair<int, Position*>(14, moves);
+    return moves;
 }
 
 const char* Rook::print()

+ 1 - 1
Rook.h

@@ -10,7 +10,7 @@ class Rook: public Figure
     public:
     Rook(Position pos, char color);
 
-    virtual std::pair<int, Position*> get_moves();
+    virtual vector<Position> get_moves();
 
     virtual const char* print();
 };

+ 12 - 11
test_figures.cpp

@@ -12,24 +12,25 @@
 using namespace std;
 
 int main() {
-    Figure** figures = new Figure*[6];
+    vector<Figure*> figures;
     Pawn p(Position('A', '1'), 'W');
-    figures[0] = &p;
+    figures.push_back(&p);
     Horse h(Position('B', '1'), 'B');
-    figures[1] = &h;
+    figures.push_back(&h);
     Bishop b(Position('C', '1'), 'W');
-    figures[2] = &b;
+    figures.push_back(&b);
     Rook r(Position('D', '1'), 'W');
-    figures[3] = &r;
+    figures.push_back(&r);
     Queen q(Position('E', '1'), 'W');
-    figures[4] = &q;
+    figures.push_back(&q);
     King k(Position('F', '1'), 'B');
-    figures[5] = &k;
+    figures.push_back(&k);
+
+    vector<Position> moves;
     for (int i = 0; i < 6; i++) {
-        int movesCount = (figures[i])->get_moves().first;
-        Position* moves = (figures[i])->get_moves().second;
-        cout << figures[i]->print() << ' ' << movesCount << ' ';
-        for(int j = 0; j < movesCount; j++) {
+        moves = figures[i]->get_moves();
+        cout << figures[i]->print() << ' ' << moves.size() << ' ';
+        for(int j = 0; j < moves.size(); j++) {
             cout << moves[j] << ';';
         }
         cout << endl;