Проект "Сапер" - етап 2
Використаємо функції для проекту Сапер
В основній програмі потрібно створити масив логічного типу, котрий позначатиме відкритість клітинок на кожен момент часу.
bool open[10][10];
for (int i = 0; i <10; ++i)
{
for (int j=0; j<10; j++)
{
open[i][j]=false;
}
}
1 функція - перевірка навколишніх клітинок та підрахунок мін у них. Функція приймає аргументи: масив (гральне поле), координати клітинки, яку потрібно перевірити. Результатом функції є ціле число: кількість мін у сусідніх клітинках по горизонталі, вертикалі та діагоналях.
int check (int a[10][10], int x, int y)
{
//перевірка мін у сусідніх клітинках
int k=0;
if (a[x][y+1]==-1) k++;
if (a[x+1][y]==-1) k++;
if (a[x][y-1]==-1) k++;
if (a[x-1][y]==-1) k++;
//перевірка мін у діагональних клітинках
if (a[x+1][y+1]==-1) k++;
if (a[x+1][y-1]==-1) k++;
if (a[x-1][y-1]==-1) k++;
if (a[x-1][y+1]==-1) k++;
if (a[x][y]==-1) k=-1;
return k;
}
2 функція - друк на екран масиву відкритих клітинок. Функція приймає два аргументи: масив ігрового поля та масив, котрий позначає відкритість клітинок. Якщо клітинка відкрита, друкуємо її вміст (або "міну", або кількість мін в околі, котру обчислимо функцією check). Якщо клітинка ще не відкрита, друкуємо на її місці - Функція не повертає значень, вона лише друкує масив
void pole (int a[10][10], bool b[10][10])
{
for (int i = 0; i <10; ++i)
{
for (int j=0; j<10; j++)
{
if (b[i][j]==true)
{
if (a[i][j]==-1) cout << "*" ;
else cout<< check (a,i,j);
}
else cout << "-" ;
}
cout << endl;
}
}
В основному проекті необхідно реалізувати такий алгоритм:
Поки з клавіатури не буде введено певне ключове значення, наприклад 100, виконувати дії:
- зчитати з клавіатури число - координати клітинки
- встановити для цієї клітинки відкрите поле (в масиві open)
- надрукувати масив відкритих клітинок
- якщо потрапили на міну (в масиві arr), припинити гру - команда break
Результат проекту можна переглянути на наступних скріншотах: