Постановка задачи
Для демонстрации применения списков, требуется написать игру. Программа написана на языке С++. Тип списка – двунаправленный, кольцевой, с головным элементом. Тип игры выбирается произвольно, в случае данной работы - сапер.
При заполнении поля игры случайными элементами каждый из них заносится в список. Каждый элемент содержит следующие поля:
i, j – номер строки и столбца ячейки, в которой находится элемент
k – порядковый номер элемента
true/false – boolean переменная, которая говорит является ли элемент бомбой
Когда бомба на поле отмечена флагом верно, соответствующий элемент списка переносится в другой список, состоящий только из отмеченных бомб. В конце игры оба списка выводятся на экран, а потом очищаются.
Описание работы
Меню игры многоуровневое и циклическое, главное меню состоит из четырех пунктов, во втором пункте есть 4 подпункта:
- New game (Новая игра)
- Options (Опции)
- Bomb number (Количество бомб)
- Color (Выбор цвета)
- Red (Красный)
- Green (Зеленый)
-Blue (Синий)
- Difficulty (Сложность)
- 5х5
- 9х9
-Back (Возврат на уровень выше)
-Developers (Разработчики)
-Exit (Выход)
Управление меню производится с помощью стрелочек, выбор пункта клавиша Enter. Выход и возврат на уровень выше с помощью клавиши Esk. Курсор меню цветовой (цвет выделенный строки отличается от общего цвета меню). Выход из меню выполняется с подтверждением.
Начало игры происходит при выборе соответствующего пункта меню. Игра представляет собой поле размером 5 на 5 или 9 на 9, на котором случайным образом расположены бомбы. Цель игры – открывать ячейки поля и с помощью цифр вычислять расположение бомб на поле. Далее необходимо отметить их с помощью флагов, ни разу не ошибившись (не открыв ячейку с бомбой). Игра заканчивается, когда все бомбы отмечены флагами (победа) или открыта ячейка с бомбой (проигрыш).
Тестирование
Ячейка с бомбой открыта, следовательно зафиксирован проигрыш и выведены на экран списки. Все элементы остались в первом списке, так как не выполнено условие (не отмечена флагом ни одна бомба). Второй список пуст.
На игровом поле отмечены флагами две бомбы, одна ячейка с бомбой открыта. Результат: в первом списке осталось 23 элемента (20 элементов-цифр и три бомбы), во втором списке оказались две найденные бомбы.
Флагами отмечены 20 ячеек игрового поля, во второй список перенесены только элементы-бомбы.
Все бомбы отмечены флагами, условие победы выполнено.
Список материалов
Литература: Т.О. Сундукова, Г.В. Ваныкина Структуры и алгоритмы компьютерной обработки данных
Бьерн Страуструп. Язык программирования С++
Джесс Либерти: Освой самостоятельно C++
http://www.vr-online.ru/content/s-dvusvjaznye-spiski-3085 - с++ , Двусвязные списки.
http://www.rsdn.ru/forum/src/2261478.1.aspx – с++, списки
http://comp-science.narod.ru/Progr/Dynamic.htm - динамические структуры данных, списки
Исходный проект находится по адресу