Логическая игра «Морской бой»
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Н А
Ц И О Н А Л Ь Н Ы Й И С С Л Е Д О В А
Т Е Л Ь С К И Й Т О М С К И Й
П О Л И Т Е Х Н И Ч Е С К И Й У Н И В Е Р С
И Т Е Т»
Факультет Автоматики и вычислительной техники
Кафедра Автоматики и компьютерных систем
Специальность
«Информационные системы и
Пояснительная записка к курсовой работе по дисциплине
«Технология программирования»
на тему
«Логическая
игра «Морской бой»»
Выполнил
студент
группы 8880
_________________ Погребной В.Ю.
Проверил
преподаватель
кафедры АиКС
_________________ Лунева Е.Е.
Томск 2010
Содержание
Техническое задание
1. Общие сведения
- Программный продукт «Логическая игра «Морской бой»», используемый пользователем персонального компьютера.
- Разработчиком программы является студент Томского Политехнического Университета группы 8880 специальности «Информационные системы и технологии в бизнесе» Погребной Вадим Юрьевич.
- Программный продукт создается на основании выданного задания от преподавателя кафедры АИКС Луневой Е.Е.
- Первым этапом разработки программного продукта будет составление функциональной спецификации, в которой будет описана программа с точки зрения пользователя, её основные функции. Вторым этапом будет разработка основных модулей программы и их функциональных возможностей, кодирование программы, отладка и тестирование программы.
- Назначение и цели создания системы
Основное назначение логической игры «Морской бой» - развитие логического мышления и параллельное развлечение; в связи с потенциальной возможностью сохранения результатов игр, возможен также соревновательный игровой процесс; построение стратегий. Целью данной работы является ознакомление и углубление в технологию объектно-ориентированного программирования, изучение среды визуального программирования Borland C++ Builder 2006.
- Характеристики объекта автоматизации
Объектом автоматизации служит Windows приложение в виде нескольких окон (основного и вспомогательных), на которых располагаются клеточные поля, поверх которых необходимо поместить изображения кораблей. Положение каждого объекта-корабля подлежит изменению, а при готовности игроков, эти положения сохраняются в памяти. Необходимо предусмотреть выполнение всех правил игры, сохранение результатов в файл, реализацию удобного и понятного интерфейса. Данное приложение будет работать на персональном компьютере, и создано в среде разработки Borland C++ Builder 2006.
- Требования к системе
- Требования к функциональным характеристикам.
Приложение должно обеспечивать следующие функции:
- начало новой игры на поле, соответствующем выбранному режиму игры;
- перетаскивание кораблей и проверка на правильность их расположения;
- переход в режим боя при готовности всех участников игры;
- осуществление самого процесса боя с фиксацией окончания боя и победы одного из игроков;
- фиксация имен противников и числа побед, также сохранение результатов в файл;
- Требования к составу и параметрам технических средств:
Программное обеспечение должно функционировать на IBM-совместимых персональных компьютерах.
- Требования к информационной и программной совместимости:
Программное обеспечение должно работать под управлением операционных систем семейства Windows. Среда разработки Borland C++ Builder 2006. Требований к защите информации не предъявляются.
- Состав и содержание работ по созданию системы
- Разработка должна быть проведена в три стадии:
- разработка технического задания;
- создание рабочего проекта;
- внедрение.
- На стадии разработки технического задания должен быть выполнен этап разработки, согласования и утверждения настоящего технического задания, а также:
- постановка задачи;
- определение и уточнение требований к техническим средствам;
- определение требований к программе;
- определение стадий, этапов и сроков разработки программы и документации на неё;
- согласование и утверждение технического задания.
- На стадии рабочего проектирования должны быть выполнены перечисленные ниже этапы работ:
- разработка программы;
- разработка программной документации;
- испытания программы.
- На стадии внедрения должен быть выполнен этап разработки «подготовка и передача программы».
- На этапе разработки программной документации должна быть выполнена разработка программных документов в соответствии с требованиями к составу документации.
- На этапе испытаний программы должны быть выполнены перечисленные ниже виды работ:
- разработка, согласование и утверждение и методики испытаний;
- проведение приемо-сдаточных испытаний;
- корректировка программы и программной документации по результатам испытаний.
- На этапе подготовки и передачи программы должна быть выполнена работа по подготовке и передаче программы и программной документации в эксплуатацию на объектах Заказчика.
- Порядок контроля и приемки системы
Контроль выполнения осуществляется руководителем согласно срокам выполнения работ. Срок сдачи определяется в соответствии с учебным планом кафедры «Автоматики и компьютерных систем» ТПУ. Также будет осуществляться отдельная приемка исходного кода и скомпилированной программы.
- Требования к документированию
- Разрабатываемое программное обеспечение должно включать справочную систему.
- В состав сопровождающей документации должны входить:
- техническое задание;
- руководство пользователя;
- программа и методики испытаний.
Введение
В настоящее время остается актуальным вопрос создания программных продуктов для упрощения и автоматизации промышленных процессов, а также для развлечения и других областей жизни человека. Развивается само программирование, внедряются в повседневную жизнь все более и более сложные информационные и коммуникационные системы и технологии. Под разработкой программного продукта понимается род деятельности (профессия) и процесс, направленный на создание и поддержание работоспособности, качества и надежности программного обеспечения, используя технологии, методологию и практики из информатики, управления проектами, математики, инженерии и других областей знания. После разработки, кодирования и тестирования программный продукт вводится в эксплуатацию. Но для того, чтобы уметь качественно проектировать и создавать ПО, необходимо знать основные способы и алгоритмы, быстро ориентироваться в постоянно меняющемся информационном мире. Для приобретения таких навыков и предназначены подобные курсовые работы по анализу, проектированию и созданию простого ПО.
Созданное
приложение представляет все этапы по
созданию программного продукта и программную
реализацию «Логическая игра «Морской
бой»». Оно носит развлекательный характер,
тренирует логическое мышление, способность
выстраивать стратегии в определенных
условиях. Многие в детстве играли в данную
игру с помощью листочка и тратили время
и бумагу на прорисовку кораблей, теперь
есть возможность вспомнить про эту интересную
игру, но уже используя компьютер с его
искусственным интеллектом.
- Анализ предметной области
- Функциональная спецификация
1.1.1 Общие сведения
Компьютерная версия логической игры «Морской бой» предоставляет все ее возможности, а также содержит опции игры с компьютером, удобнsq интерфейс, позволяющbq автоматизировать параллельные процессы, связанные с данной игрой. Приложение носит развлекательный характер, тренирует логическое мышление, способность выстраивать стратегии в определенных условиях.
Логика искусственного интеллекта довольно сложна, но в то же время полностью не охватывает тактику ведения боя. Несмотря на это, играть с компьютером довольно интересно. Графика и структура экранов полностью соответствуют функциям игры и интуитивно понятны игроку. Возможна оптимизация как дизайна программы, так и логики компьютера.
1.1.2 Блок-схема программы «Логическая игра «Морской бой»»
Чтобы представить, как работает данная программа, взглянем на блок-схему программы (рис.1). Данная блок-схема не полная, но правильно показывает, как мы собираемся использовать данное приложение.
1.1.3 Спецификации для каждого экрана
«Логическая игра «Морской бой»» содержит несколько окон: основное окно, которое содержит игровые поля и корабли, главное меню, также место для отображения результатов игры. Меню содержит все основные функции программы, ссылка на функцию начала боя, а также его возобновления вынесена в окно основной формы. Игровое поле состоит из 100 клеток 10x10, на котором необходимо для начала боя разместить 10 кораблей в соответствии с правилами игры, т.е. так, чтобы корабли не соприкасались, хотя система не позволит этого сделать как бы этого не хотел игрок. При изменении режима боя меняется и интерфейс программы. При возникновении накладок от старых кораблей необходимо обратиться к функции новой игры, которая находится в главном меню. Непосредственно во время боя управление осуществляется кликом мыши по выбранной клетке поля, что подтверждается графически.
Также в программе присутствует окно с данными о программе и ее создателе. Результаты игр просматриваются в самой программе посредством вызова специального окна в оригинальном стиле.
1.1.4 Главная форма игры
Форма игрового поля появляется при запуске приложения. Исходная форма является основной, на которой выполняется режим боя.
Начальный
вид окна изображен на рисунке 2.
Рис.
2. Главное окно приложения
«Морской бой», режим
игры с компьютером
Обратившись
к главному меню (Файл или Помощь), происходит
управление программой. Меню игры должно
обеспечивать выбор варианта игры (против
компьютера, или игра между двумя игроками),
выход, новая игра, просмотр результатов,
переход в режим боя. Корабли в виде желтых
клеток необходимо установить в нужное
положение. В поле ввода текстовой информации
возможен ввод имени игрока. Мерцание
надписи «FIGHT» говорит о том, что необходимо
расставить корабли и начать бой.
Рис.
3. Главное окно приложения
«Морской бой», режим
игры с человеком
Форма в режиме игры с человеком изображена на рисунке 3. В данном случае есть возможность изменять имя обоих игроков, также появляется изображение кораблей второго игрока. При нажатии надписи «ГОТОВ» игрок подтверждает свою готовность.
1.1.5 Форма данных о программе
Содержит данные о создателе, версию и название программы.
Форма имеет вид, изображенный на рисунке 4.
Рис.
4. Данные о программе
1.1.6 Форма результатов игр
Содержит результаты прошлых игр, где указываются имена лучшей десятки игроков и количество выстрелов, которые им понадобились до выигрыша.
Форма имеет вид, изображенный на рисунке 5.
Рис.
5. Результаты игр
Форма
находится всегда поверх основной формы,
поэтому обращение к главному
окну невозможно при активном окне
результатов.
- Диаграмма вариантов использования
- Диаграмма классов
- Диаграмма состояния
- Диаграмма последовательности
- Диаграмма компонентов
- Руководство пользователя
Для запуска необходимо открыть файл программы с расширением .exe. При запуске программы появится окно с двумя игровыми полями, первоначальный режим игры - “Игра против компьютера”. Для того, чтобы переключиться на режим “Игра против человека”, необходимо зайти в главное меню программы и выбрать соответствующий пункт. В том же меню находятся все основные функции игры:
- Новая игра – функция необходима для аннулирования текущей игры и начало новой. Функция реализует начальную установку кораблей в том же режиме, в котором проходила игра. Этот пункт меню будет активен в любой момент времени.
- Выбор противника – человек или компьютер. Пункт недоступен в режиме боя.
- Начать бой – функция сработает, если корабли расставлены правильно. При вызове данной функции происходит переход в режим боя, положение кораблей сохраняется в памяти. Если выбран режим боя с компьютером, то система автоматически в произвольном порядке расставляет корабли. Об этой функции будет сказано дальше.
- Результаты – происходит загрузка результатов прошлых игр из файла и игроку показываются результаты в специальном окне (рис. 5). Пункт доступен в любой момент времени.
- Выход – функция завершения работы приложения.
- Помощь – предоставляются данные о программе и о создателе приложения.
Меню будет доступно в любой момент времени приложения, за исключением секунд, когда вы будете производить выстрел, но об этом далее.
Также на форме приложения сразу можно заметить поля для ввода имен игроков, в режиме игры с компьютером можно изменять только первое поле ввода, при игре с человеком изменяются оба поля. В той же области окна находятся поля, предназначенные для ведения статистики боя, они будут изменяться в течение боя. Заметим, что изменение имен станет невозможным при переключении в режим боя. Мерцающая надпись указывает на то, игра находится в режиме расстановки кораблей, сама надпись является ссылкой на пункт меню – начать бой. Если игра находится в режиме игры с человеком, то метка начнет мерцать только после готовности обоих игроков начать бой. Для подтверждения готовности необходимо кликнуть на соответствующую надпись. Но для начала нужно будет расставить корабли, сначала расставляет первый игрок (второй должен будет отвернуться), затем он нажимает на «Готово» и аналогичным образом второй игрок проводит те же операции. Только после этого можно будет начать бой, на что укажет мерцающий текст. При игре с компьютером все намного проще, нужно просто расставить корабли и можно приступить к бою.
Важной частью программы является расстановка кораблей. Для ее реализации нужно просто зажать левую кнопку мыши на корабле и перетащить в задуманное положение. Для поворота корабля на 90 градусов нужно нажать на нем правой кнопкой мыши. При наведении курсора на каждый объект возможность его перетаскивания показывается графически в виде специального курсора. Если корабли будут соприкасаться между собой, то начать бой будет невозможным, система вам не позволит этого сделать, поэтому расставляйте корабли правильно. Также хотелось бы отметить, что расставлять корабли необходимо внимательно и с умом, так как от этого зависит весь ход боя. Компьютер расставляет корабли автоматически, если вы кликнули пункт начать бой или «FIGHT» на самом окне, что намного удобнее.
Изначальный вид окон вы можете посмотреть на рисунках 2 и 3. Окна результатов и данных о программе показаны на рисунках 4 и 5. Все функции приложения до начала боя изображены на следующем рисунке (рис.6).
Рис.
6. Функции приложения
до начала боя
После того, как вы перейдете в режим боя, изображение кораблей исчезнет, их положение запомнит система. Теперь вы можете вести бой нажатием левой кнопки мыши по выбранной клетке поля боя. Выстрелы проводятся по очереди до момента, пока не будут убиты корабли одного из противников. При попадании по кораблю факт попадания будет показан крестом и характерным звуком, при убийстве корабля также прозвучит звук и в тоже время все поля вокруг корабля, по которым еще не проводились выстрелы, будут отмечены специальным кругом. Этот же круг будет изображен и в случае промаха одного из игроков, в этом случае ход перейдет другому игроку. Чтобы понять, кто сейчас должен стрелять, нужно посмотреть на поле, в котором написано имя игрока, оно должно гореть красным цветом. Компьютер производит выстрелы сразу же после того, как вы промахнулись, его выстрелы производятся с некоторой паузой для того, чтобы вы успели оценить свои потери и насладиться звуками взрывов кораблей. Для визуального ознакомления посмотрите на рисунок 7. Также стоит отметить, что во время выстрелов, как игроков, так и компьютера, окно приложения будет находиться поверх всех окон, а меню программы будет недоступно. Это неудобство необходимо для правильной работы приложения. Чтобы не нарушать ход игры и не способствовать возникновению проблем с графическим изображением, старайтесь не перекрывать приложение другими окнами во время выстрелов.
Рис. 7. Режим боя
Цель игры – убить все корабли противника быстрее, чем это сделает сам противник. Также есть возможность соревноваться с результатами прошлых игроков, их можно увидеть, по-прежнему кликнув на пункт результаты в меню программы.
Поэтому
главный результат будет
Рис.
8. Победа одного из игроков
Заметим, что в этом случае корабли невозможно перетащить, они показаны только для визуализации. Надпись начинает вновь мерцать, но в данном случае она ссылается на функцию меню «Новая игра».
- Руководство программиста
Программа состоит из четырех модулей:
- «TFlashingLabel.cpp», в котором содержится класс «TFlashingLabel», потомок класса «TLabel», носит вспомогательную роль для мерцания текста.
Содержит следующие переменные:
bool FFlashEnabled; //Включение мерцания
int FFlashRate; //Скорость мерцания
TTimer *Timer; //Таймер
А также следующие функции:
void SetFlashEnabled (bool AFlashEnabled);
Включение мерцания, параметр регулирует его включение
void SetFlashRate (int AFlashRate);
Установление скорости; параметр содержит число, соответствующее скорости мерцания
void OnTimer (TObject *Sender);
Событие
таймера.
- «AboutProgFrm.cpp», в нем содержится следующий класс «TAboutProg», а также форма, на которой расположена информация о программе.
Содержит функцию:
void OKClick(TObject *Sender);
Предназначена
для исключения из области видимости
формы данного модуля.
- «ResultsFrm.cpp» состоит из класса «TResultsForm» и формы для размещения текстовой информации в метках Label, загружаемой из файла.
Содержит следующие функции:
void __fastcall OKClick(TObject *Sender);
Предназначена для исключения из области видимости формы данного модуля.
void LoadRes ();
Функция
загружает данные из файла «SeaButResults.txt»
и размещает их на форме.
- «SeaButFrm.cpp» - главный модуль приложения, посредством которого осуществляются все основные функции игры. В том числе визуализация на форме данного модуля.
Содержит следующие переменные (все переменные в разделе private):
TDrawGrid **Ships1; //Корабли на 1-ом поле
TDrawGrid **Ships2; //Корабли на 2-ом поле
int **field1;
int **field2; //Массив 2-го поля
int linex; //Координата x графической линии
int liney; //Координата y графической линии
Shoot Cpu; //Переменная для хранения информации стрельбы компьютера, является переменной типа Shoot, определенного следующей структурой:
struct Shoot //Структура для хранения данных выстрелов компьютера
{
int Choice; //Выбор
bool Target; //Попадание
bool TarDir; //Правильно ли выбрана горизонталь
bool TarDirect; //Правильно ли выбрано направление
bool TarDestr; //Корабль убит
int Direction; //Направление
int RowNum[100]; //Неопознанные точки поля
int RowDir[4]; //Неопознанные направления
};
int Choice; //Выбор при попадании компьютера
int Ships1Destr[10]; //Подбитые корабли 1-го поля
int Ships2Destr[10]; //Подбитые корабли 2-го поля
int Count1Destr; //Кол-во подбитых кораблей 1-го поля
int Count2Destr; //Кол-во подбитых кораблей 2-го поля
Graphics::TBitmap *Bitmap1; //Для хранения изображения канвы
Graphics::TBitmap *Bitmap2;
TFlashingLabel *FIGHT;
//Динамическая мерцающая метка

- Логическая структура нормы права
- Логическая структура языка школьной математики
- Логические задачи
- Логические и линейные датчики Холла
- Логические основы компьютера
- Логические основы системного анализа
- Логические основы системного подхода
- Логистическое управление складами
- Логистическое управление складами
- Логистическое управление современной организации
- Логистическое управление товарными запасами в аптеке
- Логистической подход при хранении и реализации товаров торговой базы
- Логистческие концепции управления: содержание и возможности реализации
- Логическая игра "Маджонг"