Курсовая работа: Сапер
Сапер представляет собой логическую игру, основной целью которой является нахождения всех спрятанных бомб на минном поле. Ваша задача открыть все ячейки поля, не содержащие бомб, заблокировав(пометив) при этом ячейки, в которых расположены бомбы.
Поле игры задано в виде двухмерного массива. В этом массиве расположены ячейки. Изначально они все закрыты. Ячейки могут быть пустые, с цифрами и с бомбами. Для каждой такой ячейки мы задаем класс. При нажатии левой клавиши мыши открывается ячейка, при нажатии правой кнопки, выставляется флажок, при этом левой кнопкой мыши вы уже не можете нажать на заблокированную ячейку, но правой кнопкой можно снять пометку флажка. Ячейка с цифрой обозначает то, сколько мин находится в округе этой ячейки. При первом нажатии кнопки мыши на ячейку не может открыться ячейка с бомбой.
Игра считается проигранной, если вы открыли ячейку с бомбой.
Игра считается выигранной, если на игровом поле все ячейки с бомбами отмечены и все остальные ячейки – открыты.
2. ПОСТАНОВКА ЗАДАЧИ
Алгоритм программы включает в себя:
случайную расстановку бомб по полю (функция Rand())
inttmp = GetBombsCount();
inttmp_cs = 0;
inttmp_rs = 0;
while(tmp! = 0)
{
tmp_cs = rand()% GetCols();
tmp_rs = rand()% GetRows();
if (field [tmp_cs] [tmp_rs]. GetPointer() == NULL)
{
tmp--;
field [tmp_cs] [tmp_rs]. SetPointer(new CMyCellBomb(tmp_cs, tmp_rs, CLOSED));
}
else
continue;
}
подсчет для каждой ячейки количества бомб вокруг нее
int value = 0;
if (CheckCell(i, j - 1))
if (GetCellByIndex(i, j - 1) ! = NULL && GetCellByIndex(i, j - 1) - >isBomb())
value++;
if (CheckCell(i - 1, j - 1))
if (GetCellByIndex(i - 1, j - 1) ! = NULL && GetCellByIndex(i - 1, j - 1) - >isBomb())
value++;