суббота, 12 сентября 2009 г.

Консольный сапер

Чтобы практиковаться мне был нужен компилятор и среда разработки. Microsoft Visual Studio не устраивал платностью. Есть бесплатный Visual C++ Express Edition, но без MFC. Остановился на распространенном варианте Code::Blocks + MinGW.

Для тренировки сделал сапера. Пишем столбец и строку, а в ответ получаем количество мин вокруг.

#include
#include
#include

int main() {
 const int SIZE = 3;
 const int ALL_MINES = 3;
 bool m[SIZE+2][SIZE+2];
 bool u[SIZE+2][SIZE+2];

 for(int i=0; i<=SIZE+1; i++){
  for(int j=0; j<=SIZE+1; j++){
   m[i][j] = false;
   u[i][j] = false;
  }
 }

 srand(time(0));
 int x, y;
 for(int i=1; i<=ALL_MINES; i++){
  do{
   x = rand() % SIZE + 1;
   y = rand() % SIZE + 1;
  }while(m[x][y]);
  m[x][y] = true;
 }

 int xCount = SIZE * SIZE - ALL_MINES;
 while(xCount != 0){
  std::cin >> x >> y;
  int xMines = 0;

  if(m[y][x]){
   std::cout << "fail" << std::endl;
   break;
  }

  for(int i=y-1; i<=y+1; i++){
   for(int j=x-1; j<=x+1; j++){
    if(m[i][j]){xMines++;}
   }
  }
  std::cout << xMines << std::endl;
  if (!u[y][x]){
   xCount--;
   u[y][x] = true;
  }
 }

 if (xCount = 0){std::cout << "win" << std::endl;}

 for(int i=1; i<=SIZE; i++){
  for(int j=1; j<=SIZE; j++){
   std::cout << m[i][j];
  }
  std::cout << std::endl;
 }
 return 0;

}


* This source code was highlighted with Source Code Highlighter.


Над кодом долго не думал :)

1 комментарий:

Можно использовать теги <b>, <i>