Автор работы: Пользователь скрыл имя, 28 Января 2011 в 12:02, курсовая работа
Задачей курсового проектирования ставится разработка игровой программы «Нарды», которая является виртуальным аналогом настольной игры. Перенос реальной игры на виртуальную основу имеет ряд преимуществ:
– позволяет немедленно приступить к игре без каких либо действий по ее подготовке;
– исключает возможность жульничества во время игры;
– исключает возможность случайных нарушений правил игры в связи с их незнанием;
– позволяет сохранять текущие результаты игры и продолжать партию в другое время.
Введение 2
1 Общая часть 4
1.1 Постановка задачи 4
1.2 Технико-математическое описание 6
1.3 Программное обеспечение 9
1.4 Состав и параметры технических и программных средств 12
2 Специальная часть 14
2.1 Описание алгоритмов 14
2.2 Описание работы программы 16
2.3 Инструкция по выполнению программы 18
2.4 Тестирование и отладка 22
2.5 Контрольный пример 24
Заключение 28
Список литературы 30
Приложение А. Текст программы 31
Выйти из программы можно в любое время нажатием на кнопку «ВЫХОД».
При
нажатии на кнопку «СПРАВКА» активируется
форма с расположенным на ней
вэб-браузером, в котором отображаются
правила игры (рисунок 6).
Рисунок 6 – Форма «СПРАВКА».
При
нажатии на кнопку «О ПРОГРАММЕ» активируется
форма, на которой отображается информация
о разработчиках и о программе (рисунок
7).
Рисунок 7 – Форма «О ПРОГРОАММЕ»
Существует три основных типа ошибок, которые могут явиться причиной прекращения выполнения программы или неверного результата:
Синтаксические ошибки обнаруживаются при компиляции или запуске программы.
Большинство синтаксических ошибок легко обнаруживается и устраняется.
Ошибки
выполнения являются наиболее распространенным
типом ошибок. Однако данный тип
ошибок достаточно легко обнаруживается
и устраняется с помощью
Таблица 2.2 – Ошибки при разработке программы.
Ошибка | Тип ошибки | Метод устранения | |
Out of range |
логическая |
Добавлены дополнительные условия, сокращен диапазон выполнения цикла. | |
Некорректоне определение присутствия игрока в «доме» | Логическая | Добавлено новое условие | |
Ошибка |
Тип ошибки |
Метод устранения | |
Cant find file |
выполнения |
Прописан новый путь к файлам | |
Access violation filed |
логическая |
Добавлено новое исключение в алгоритм | |
Возможность
совершить бесконечное |
логическая |
Введена автоматическая смена игрока перед генерацией нового хода | |
Невозможность победы |
логическая |
Отключение процедуры проверки возможности хода при условии, что игрок «пришел в «дом» | |
Некорректные результаты процедуры проверки возможных, ходов при первом ходе |
логическая |
Добавлено дополнительное условие, изменен алгоритм проверки | |
Неккоректные результаты процедуры отображения игрового процесса |
логическая |
Добавлена конструкция begin…end; | |
Совпадение имен массива и процедуры |
логическая |
Исправлено имя процедуры | |
Обнуление основных переменных при отмене хода сразу после загрузки ранее сохраненной игры |
логическая |
Добавлено заполнение резервных переменных | |
Некорректное действие при нажатии кнопки «НОВАЯ ИГРА» |
логическая |
Добавлено занесение начальных данных в основные переменные |
В качестве контрольного примера рассмотрим игру между двумя игроками: «Игрок 1» и «Игрок 2».
При
нажатии на кнопку «НАЧАТЬ ИГРУ»
выводится сообщение «
Рисунок 8 – Сообщение о начале игры.
Один
из игроков нажимает на кубики, выводится
сообщение: «Ходят белые». Превый игрок
начинает свой ход. Доступные ходы – три
и два. «Игрок 1» перемещает фишку на три,
а затем на две клетки вперед (рисунок
9).
Рисунок
9 – Первый ход «Игрока 1».
«Игрок
2» нажимает на кубики, вывдится сообщение:
«Ходят черные». «Игрок 2» совершает свой
ход, «Игрок 1» нажимает на кубики. Спустя
несколько ходов Игроку 1 доступно четыре
хода по пять ячеек, он совершает три хода
и нажимает на кубики. Программа выдает
сообщение об ошибке: «Ход не завершен!»
(Рисунок 10).
Рисунок
10 – Ход не завершен.
Спустя еще несколько ходов
«Игроку 2» «выпадает» на кубиках шесть
и три, но ход «три» недоступен, «Игрок
2» совершает ход «шесть» и передает ход
«Игроку 1». Игрок один нажимает на кубики,
«выпадает» один и четыре, но ни один из
этих ходов не доступен. Выводится сообщение:
«Вы не можете походиться» (рисунок
11). Ход переходит к «Игроку 2».
Рисунок
11 – Невозможность совершить ход.
Игроки
совершили по 15 ходов, вид игрового
поля перед сохранением изображен на рисунке
12.
Рисунок
12 – Игровой процесс перед сохранением.
Сохраняем
игру под имеем «Игра1», выходим из
игры. После этого загружаем «Игра1» и
проверяем правильность загруженных данных.
Вид игрового поля после загрузки изображен
на рисунке 13. Все данные загружены верно,
игроки продолжают партию.
Рисунок
13 – Игровой процесс после загрузки.
«Игрок
2» побеждает в партии, выводится сообщение:
«Игра окончена, победили черные» (Рисунок
14).
Рисунок
14 – Сообщение о победе.
В ходе курсового проектирования была разработана игровая программа «Нарды».
Данная программа является аналогом популярной настольной игры, содержит подробную справку о правилах игры, а также автоматический механизм слежения за их соблюдением, поэтому даже неопытный пользователь может без проблем играть в нарды.
Решение задачи получено с помощью методов нелинейного программирования.
Программным решением была выбрана: среда программирования Borland Delphi 7. Используемые средства разработки позволили создать качественный программный продукт, который можно использовать в развлекательных и развивающих целях.
В процессе создания программы использовались приложения:
Возможна модернизация интерфейса программы в виде дополнительных цветовых схем, а также создание технологии клиент-сервер для игры в локальных сетях и искусственного интеллекта различных уровней сложности для возможности однопользовательской игры.
Разработанная программа обладает следующими свойствами:
Так же в свою очередь программа обладает некоторым недостатком. Механизм проверки возможных ходов в исключительных ситауциях выдает неверные данные по невыясненным причинам.
1 http://www.fpclub.ru/games/
2 Боровский А Н Программирование в Delphi 2005
3 Банкел Джулиан М. Фундаментальные алгоритмы и структуры данных в Delphi
4 Дерахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7
5 Кенту М. Delphi7 для профессионалов
6 Фленов М. Е. Библия Delphi
7 Культин Н. Б. Основы программирования в Delphi 8 для Microsoft.NET Framework
(обязательное)
Текст программы
Модуль
MAIN содержит главную форму и вызов основных
процедур программы
uses draw,
game, save, load, exit, help, about;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
getdir(0,path);
status:=0;
for i:=1 to 4 do bones[i]:=0;
for i:=1 to 4 do bones2[i]:=0;
varbones(sender);
for i:=1 to 26 do mas[i,1]:=0;
for i:=1 to 26 do mas[i,2]:=0;
for i:=1 to 26 do mas2[i,1]:=0;
for i:=1 to 26 do mas2[i,2]:=0;
mas[1,1]:=1;
mas[1,2]:=15;
mas[13,1]:=2;
mas[13,2]:=15;
mas[25,1]:=1;
mas[26,1]:=2;
mas2[1,1]:=1;
mas2[1,2]:=15;
mas2[13,1]:=2;
mas2[13,2]:=15;
mas2[25,1]:=1;
mas2[26,1]:=2;
draw.visible(sender);
draw.redraw(sender);
end;
procedure TForm1.niClick(Sender: TObject); // i – от 1 до 24
begin
game.variants(sender,1);
end;
procedure TForm1.miClick(Sender: TObject); // i - от 1 до 24
begin
game.move(sender,1);
end;
procedure TForm1.bldomclickClick(Sender: TObject);
begin
game.movehouse(Sender,26,zar);
end;
procedure TForm1.bones_clickClick(
begin
game.bonesclick(sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
var z1,z2:integer;
begin
If messagedlg('Вы
действительно хотите начать новую игру?',mtinformation,[mbOk,
formcreate(sender);
z1:=random(6)+1;
z2:=random(6)+1;
if z1=z2 then form1.Button1Click(sender)
else begin
if z1>z2 then player:=2;
if z2>z1 then player:=1;
if z1<>z2 then status:=2;
wf:=0;
blf:=0;
messagedlg('Начинающий
игрок определен случайным
bones_click.Enabled:=true;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
for i:= 1 to 26 do
for j:= 1 to 2 do mas[i,j]:=mas2[i,j];
for i:=1 to 4 do bones[i]:=bones2[i];
golova:=0;
draw.visible(sender);
draw.redraw(sender);
varbones(sender);
end;
procedure TForm1.SpeedButton1Click(
begin
form2.ShowModal;
end;
procedure TForm1.SpeedButton2Click(
begin
form3.ShowModal;
end;
procedure TForm1.SpeedButton3Click(
begin
form4.ShowModal;
end;
procedure TForm1.SpeedButton4Click(
begin
form5.showmodal;
end;
procedure TForm1.SpeedButton5Click(
begin
form4.ShowModal;