Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 16:34, курсовая работа
Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.
А также содержит следующие функции:
void __fastcall ExitClick(TObject *Sender);
Выход из приложения.
void __fastcall GridField1DragOver(TObject *Sender, TObject *Source, int X,
int Y, TDragState State, bool &Accept);
Перетаскивание объекта над полем.
void __fastcall ShipsDragOver(TObject *Sender, TObject *Source, int X,
int Y, TDragState State, bool &Accept);
Функция для обеспечения возможности перетаскивания корабля.
void __fastcall ShipsMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
Необходима для поворота корабля на 90 градусов.
void __fastcall AboutClick(TObject *Sender);
Вызов окна «о программе».
void __fastcall CompClick(TObject *Sender);
Переход в режим игры с компьютером.
void __fastcall HumanClick(TObject *Sender);
С человеком.
void __fastcall FightClick(TObject *Sender);
Начать бой.
void __fastcall NewGameClick(TObject *Sender);
Новая игра.
void __fastcall Ready1Click(TObject *Sender);
Готовность 1-го игрока.
void __fastcall Ready2Click(TObject *Sender);
Готовность 2-го игрока.
void __fastcall GridField1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);
Выстрел.
void __fastcall Timer1Timer(TObject *Sender);
Работа таймера 1, необходим для прорисовки линий и стрельбы компьютера.
void __fastcall Timer2Timer(TObject *Sender);
Работа таймера 1, необходим для замедления выстрелов компьютера.
void __fastcall Timer3Timer(TObject *Sender);
Работа таймера 1, необходим для показа победы игрока.
void __fastcall FormDestroy(TObject *Sender);
При уничтожении формы, очистка памяти.
void __fastcall FormPaint(TObject *Sender);
Прорисовка формы, в случае перекрывания другими окнами.
void __fastcall ResultsClick(TObject *Sender);
Показать результаты.
void __fastcall FormDragOver(TObject *Sender, TObject *Source, int X, int Y,
TDragState State, bool &Accept);
Для
запрета перемещения кораблей вне
поля.
void SaveRes (int);
Сохранение результатов игры в файл, параметр определяет победителя.
void SaveBM (int);
Сохранение изображения поля, на которое был произведен выстрел. Параметр определяет это поле и соответствующий ему указатель на изображение.
void DelBM (int);
Удаление изображения, параметр вводится для соответствия указателю на изображение, необходимого для удаления.
void SetWindow (bool);
Установки свойств окна. При ложном значении параметра установить изначальные свойства окна, в обратном случае свойства, предотвращающие перекрывание изображений на форме.
void SeaDraw (int, int, int, bool);
Рисование на канве, номер которой указан первым параметром. Ее координаты указываются следующими двумя параметрами типа int, ложное значение последнего параметра указывает на промах игрока, правдивое – на попадание.
void NullCpu ();
Обнуление Cpu.
void NewShips (int);
Создание объектов – кораблей, задание им необходимых свойств. Объекты располагаются на панели под номером, указанным параметром.
void Newfield (int);
Создание динамического массива для поля боя игрока под номером, указанным параметром.
void DelShips (int);
Удаление кораблей на панели под номером параметра типа int.
void Delfield (int);
Удаление массивов.
bool CheckShips (int);
Проверка правильной расстановки кораблей, проверяются корабли указанные параметром.
void CheckDestr ();
Проверка на непригодные клетки для стрельбы, функция предназначена для стрельбы компьютера, она отмечает неподходящие клетки специальной меткой, стрельба по ним производиться не будет.
void CreateShips ();
Случайная расстановка кораблей компьютером.
void CompShot ();
Выстрел компьютера. Выполняется алгоритм случайного выбора клетки на поле, при попадании по кораблю, случайным образом выбирается возможное направление пораженного корабля, стрельба производится до тех пор, пока корабль не будет убит. Запоминание информации о стрельбе производится с помощью переменной Cpu.
void ChangeCur (char *, int);
Смена курсоров производится в соответствии с указанным файлом в первом параметре. Курсор запоминается с помощью константы, имя которой указано во втором параметре.
В процессе создания программы возникали различные проблемы, как со сложностью реализации некоторых участков программы, так и с ошибками в программном коде.
Первые
сложности возникли при создании
функции автоматического
Также возникла проблема при создании функции отслеживания клеток, в которые уже не нужно производить выстрелы компьютеру. На начальном этапе эта функция была рекурсивной, но многочисленные тесты показали, что компьютер продолжает производить выстрелы в эти клетки, а иногда даже программа зависала в результате зацикливания. В дальнейшем был придуман новый алгоритм, который стал более объемным, но зато он качественно и точно работает, что подтверждают тесты. Он проверяет поля не рекурсивно, а сразу для всех неубитых кораблей. Тестирование проводилось с помощью слежения за значениями переменных и их изменения в ходе работы программы.
Огромной проблемой стала отладка точной работы программы и ее интерфейса, так как при вызове одной из функций необходимо активировать и деактивировать, сделать видимыми и убрать из видимости другие компоненты и функции. Для примера, если во время выполнения выстрела, производилась попытка свернуть приложение или перекрыть его другим окном, то нарушалось изображение на полях боя. Для устранения пришлось изменять свойства окна, была создана специальная функция.
Для тестирования функций, вызываемых в концовке боя, использовалось изменение значений некоторых параметров для ускорения процесса.
В любом программном продукте есть свои достоинства и недостатки. Рассмотрим достоинства и недостатки «Логической игры «Морской бой»».
Достоинства:
Недостатки:
Для развития логической игры «Морской бой» необходимо изучить пожелания пользователя данного программного продукта и в связи с этим внести необходимые изменения в данный продукт. На данном этапе необходимо улучшить дизайн, разработать более интересные варианты логики компьютера. Также можно добавить уровни сложности игры, возможность выбора размеров игрового поля и даже игру по сети.
Итогами
данной работы являются углубление познаний
в объектно-ориентированном
ResultsFrm.cpp
//Загрузка результатов
void TResultsForm::LoadRes ()
{
ifstream infile ("SeaButResults.txt");
if (!infile)
return;
//Обнуление всех меток
Name1->Caption = '\0';
Name2->Caption = '\0';
Name3->Caption = '\0';
Name4->Caption = '\0';
Name5->Caption = '\0';
Name6->Caption = '\0';
Name7->Caption = '\0';
Name8->Caption = '\0';
Name9->Caption = '\0';
Name10->Caption = '\0';