Advertisement
Amonin

mine sweeper

Dec 15th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using std::vector;
  5.  
  6. class Minesweeper {
  7. private:
  8.     size_t M, N;
  9.     vector<vector<int>> Table;
  10.  
  11. public:
  12.     Minesweeper(size_t m, size_t n): M(m), N(n) {
  13.         for (size_t i = 0; i != M; ++i) {
  14.             Table.push_back({});
  15.             for (size_t j = 0; j != N; ++j)
  16.                 Table[i].push_back(0);
  17.         }
  18.     }
  19.  
  20.     size_t Rows() const {
  21.         return M;
  22.     }
  23.  
  24.     size_t Columns() const {
  25.         return N;
  26.     }
  27.  
  28.     void SetMine(size_t i, size_t j) {
  29.         Table[i][j] = -1;
  30.     }
  31.  
  32.     int operator () (size_t i, size_t j) const {
  33.         return Table[i][j];
  34.     }
  35.  
  36.     void CheckForMinesAround() {
  37.         for (size_t i = 0; i != M; ++i)
  38.             for (size_t j = 0; j != N; ++j)
  39.                 CheckForMinesAround(i, j);
  40.     }
  41.  
  42. private:
  43.     void CheckForMinesAround(size_t i, size_t j) {
  44.         if (Table[i][j] != -1) {
  45.             Table[i][j] = 0;
  46.             for (int dx = -1; dx <= 1; ++dx) {
  47.                 for (int dy = -1; dy <= 1; ++dy) {
  48.                     if (0 <= i + dx && i + dx < M &&
  49.                             0 <= j + dy && j + dy < N &&
  50.                             Table[i + dx][j + dy] == -1)
  51.                         ++Table[i][j];
  52.                 }
  53.             }
  54.         }
  55.     }
  56. };
  57.  
  58. std::ostream& operator << (std::ostream& out, const Minesweeper& ms) {
  59.     for (size_t i = 0; i != ms.Rows(); ++i) {
  60.         for (size_t j = 0; j != ms.Columns(); ++j) {
  61.             if (ms(i, j) == -1)
  62.                 out << '*';
  63.             else
  64.                 out << ms(i, j);
  65.         }
  66.         out << '\n';
  67.     }
  68.     return out;
  69. }
  70. CANCELFORWARD 3 DELETE 3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement