Автор работы: Пользователь скрыл имя, 02 Апреля 2012 в 14:21, курсовая работа
В данной курсовой работе речь пойдет о создании несложной игровой программы «Сапер», которая и будет являться объектом исследования.
В первой главе данной курсовой работы рассматриваются аспекты программирования игр с использованием визуальных компонентов, и приводится описание компонентов, используемых при реализации практической части курсовой работы. Во второй главе приведены этапы разработки программы, такие как постановка задачи, алгоритм реализации и описание пользовательского интерфейса.
Введение
Глава 1. Компоненты Delphi используемые в программе
1.1.Компонент TMainMenu
1.2. Компонент TLabel
1.3. Компонент TCanvas
Глава 2. Алгоритм и способы решения задачи
2.1. Постановка задачи
2.2. Алгоритм реализации игровой программы
Глава 3. Разработка программы
3.1. Описание пользовательского интерфейса
3.2. Описание функций используемых в программе
Заключение
Список использованной литературы:
Приложение
Игра затягивает пользователя, прежде всего популярностью близкой игры «Пятнашки», которая не так давно была очень популярна.
Данная программа должна работать автономно под управлением операционных систем Windows 95, Windows 98, Windows ME, NT 4.0, Windows 2000, Windows XP.
Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл Sapper.exe. На этом файле следует выполнить двойной щелчок левой клавишей манипулятора мышь.
Проект программы состоит из файла проекта, содержащего необходимые конструкции для исполнения, и модуля Sapper.
Модуль Sapper является основным модулем проекта, содержащим все необходимые для работы программы процедуры.
После запуска программы на экран выводится основная форма Form1 (рис.2), на которой расположены следующие объекты:
1. Главное меню
Рис.2 Вид программы после запуска
Игра, т. е. работа программы начинается сразу после того, как выбираешь из меню «Игра» подменю «Старт» (рис.3). Автоматически устанавливается размер формы равный размеру поля. Отображается поле (ShowPole). Процедура ShowPole выводит изображение поля последовательно, клетка за клеткой. Вывод изображения отдельной клетки выполняет процедура Kletka. Процедура Kletka используется для вывода изображения поля в начале игры, во время игры и в ее конце. В начале игры (значение параметра status = 0) процедура выводит только контур клетки, во время игры — количество мин в соседних клетках или флажок, а в конце отображает исходное состояние клетки и действия пользователя. Информацию о фазе игры процедура Kletka получает через параметр status.
Рис.3 Вид программы после нажатия меню «Игра»
Во время игры программа воспринимает нажатия кнопок мыши. Основную работу выполняет процедура обработки события onMouseDown. Сначала процедура преобразует координаты точки, в которой игрок нажал кнопку мыши, в координаты клетки игрового поля. Затем делает необходимые изменения в массиве Pole и, если нажата правая кнопка, рисует в клетке флажок. Если нажата левая кнопка в клетке, в которой нет мины, то эта клетка открывается, на экран выводится ее содержимое. Если нажата левая кнопка в клетке, в которой есть мина, то вызывается процедура showPole, которая показывает все мины, в том числе и те, которые игрок не успел найти (см. рис.4).
Когда заканчивается игра на панели выводится информация о количестве оставшихся мин, ненайденных мин и времени(см. рис.4).
Рис. 4 Окончание игры
Меню в приложении создано с помощью компонента TMainMenu описанного в первой главе. Оно состоит из:
Игра – Старт – начать новую игру не зависимо собрана ли картинка.
Игра – Выход – выход из программы.
Помощь – О программе – Выводится короткая информация о программе (Рис.5).
Рис. 5. «О программе»
Функция Random:
Функция Random генерирует случайные числа. Это могут быть числа с плавающей запятой числами в диапазоне:
0 <= Number <1.0
или целые числа в диапазоне:
0 <= Number
Delphi использует генератор псевдослучайных чисел, который, каждый раз, при выполнении программы возвращает одну и ту же последовательность значений (232).
Чтобы избегать этой предсказуемости, используйте процедуру Randomize. Она в качестве начального псевдослучайного значения устанавливает текущее время.
Процедура ShowPole:
Процедура showPole выводит изображение поля последовательно, клетка за клеткой.
Функция MessageDlg:
Функция MessageDlg используется для отображения сообщений пользователю. Эти сообщения могут быть информационными, предупреждающими или что бы то ни было. Даётся полный свободный выбор кнопок, которые пользователь может нажать, чтобы подтвердить диалог.
Например, пользователю можно показать сообщение об ошибках, и дан выбор прерывания, повтора или отмены ошибочного процесса.
Значение DialogType может иметь одно из следующих перечисленных значений:
mtWarning - Отображает символ восклицания
mtError - Отображает красный "Х"
mtInformation - Отображает "i" в круге
mtConfirmation - Отображает знак вопроса
mtCustom - Отображает только сообщение
Значение Buttons может быть одним из следующих перечисленных значений:
mbYes - Отображает кнопку "Yes"
mbNo - Отображает кнопку "No"
mbOK - Отображает кнопку "OK"
mbCancel - Отображает кнопку "Cancel"
mbAbort - Отображает кнопку "Abort"
mbRetry - Отображает кнопку "Retry"
mbIgnore - Отображает кнопку "Ignore"
mbAll - Отображает кнопку "All"
mbNoToAll - Отображает кнопку "No to all"
mbYesToAll - Отображает кнопку "Yes to all"
mbHelp - Отображает кнопку "Help"
Эти значения задаются в квадратных скобках разделённых запятой.
Delphi обеспечивает множество предопределенных комбинаций кнопок:
mbYesNoCancel = [mbYes, mbNO, mbCancel]
mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel]
mbOKCancel = [mbOK, mbCancel]
mbAbortRetryCancel = [mbAbort, mbRetry, mbCancel]
mbAbortIgnore = [mbAbort, mbIgnore]
Теперь, кажется, что в Delphi сделали конструкторскую недоработку при установке возвращаемого значения диалогового окна. Вместо того, чтобы определить перечисляемое значение нажатой кнопки, используется полностью различный набор перечисляемых имён:
mrYes = 6
mrNo = 7
mrOK = 1
mrCancel = 2
mrAbort = 3
mrRetry = 4
mrIgnore = 5
mrAll = 8
mrNoToAll = 9
mrYesToAll = 10
Значения получают числовые значения этих перечислений, данных в числовом порядке, которые определены как эквивалентные mb. Эти значения определены в модуле Controls, а не в модуле Dialogs.
Процедура ShowMessage:
Процедура ShowMessage выводит простое диалоговое окно на экране с кнопкой ОК, содержащее строку Text.
Она используется, чтобы сообщить пользователю какую-либо информацию - без необходимости пользователю принимать решение.
Символы возврата каретки и переноса строки (#13#10) в переменную Text служат для показа многострочного сообщения (Приложение 1).
Разработка собственных приложений в настоящее время вызывает интерес у многих людей, чьи умения в сфере разработки позволяют осуществить поставленную задачу. Главная задача игрового приложения заставить пользователя отвлечься от проблем повседневных, т.е. развлечься, что, собственно, является задачей всех игр.
В результате выполнения курсовой работы в среде программирования Delphi была смоделирована игра под названием «Сапер». Игра содержит меню, используя которое можно начать новую игру, либо закончить текущую.
Во время разработки приложения были изучены компонент интегрированной среде программирования Delphi.
Также в данной курсовой работе рассматриваются аспекты программирования игр с использованием визуальных компонентов, и приводится описание компонентов, используемых при реализации практической части курсовой работы. Во второй главе приведены этапы разработки программы, такие как постановка задачи, алгоритм реализации и описание пользовательского интерфейса.
Данный проект может с большим успехом использоваться на уроках информатики в школе, в качестве примера программы, разработанной средствами Delphi, а также в качестве одной из игр, развивающих логическое мышление.
1. Архангельский А. Я. Приемы программирования в Delphi. Бином-Пресс, 2007. 344 с.
2. Глушаков С. В., Клевцов А. Л. Delphi 2007. АСТ, АСТ Москва, Хранитель, 2008. 325 с.
3. Культин Н.М. Программирование в Turbo Pascal 7.0 и Delphi. БХВ-Петербург, 2007. 167 с.
4. Любавин С. А. Turbo Delphi для новичков и не только. НТ Пресс, 2008. 98 с.
5. Молочков В.П., Карпинский В.Б. От Delphi 7 к Delphi 2006 для начинающих. 2007. 324 с.
6. Осипов Д.В. Графика в проектах Delphi. Символ-Плюс, 2008. 459 с.
7. Фленов М.Е. Библия Delphi (2-е издание). БХВ-Петербург, 2008. 453 с.
8. Чеснокова О.В. Delphi 2007. Алгоритмы и программы. НТ Пресс, 2008. 178 с.
9. Чиртик А., Борисок В, Корвель Ю. Delphi. Трюки и эффекты Питер,2007. 196 с.
10. http://www.sdteam.com/?tid=331
11. http://www.delphisources.ru/
12. http://www.delphibasics.ru/
13. http://www.delphisources.ru/
14. http://program.rin.ru/
15. http://www.delphilab.ru/
Листинг программы
unit Sapper;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, Menus, StdCtrls, ComCtrls, MPlayer,MMsystem, ExtCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N9: TMenuItem;
StatusBar1: TStatusBar;
Timer1: TTimer;
StaticText1: TStaticText;
StaticText2: TStaticText;
Timer2: TTimer;
Timer3: TTimer;
procedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Form1Paint(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Timer3Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Option = record
kletka_x:integer;{количество клеток по вертикали и горизонтали}
kletka_y:integer;
{количество клеток по вертикали и горизонтали}
mina:integer;{количество мин}
sound:boolean;{наличие звука}
end;
var
Form1: TForm1;
Canvas:TCanvas;
TX,TY,jx,jy,kx,ky,w,w77,w44:
Z_X,Z_Y,Z_M:Integer; {Z_X - количество строк, Z_Y - количество столбцов}
sec, min: integer; {время игры}
h_time:string[7];
Z_S:Boolean;
Z_M_Na: integer;{количество найденных мин}
Flags: integer; {количество установленных флагов}
status: integer; {статус игры - 0 - начало; 1 - игра; 2- результат}
Pole: array [0..12, 0..9] of Integer;{массив представляет игровое поле}
{значение: 0-8 => кол-во мин в соседних клетках, 9 => мина,
100-109=> клетка открыта, 200-209 => поставлен флаг}
procedure NewGame();
procedure ShowPole(Canvas: TCanvas; status: integer);
procedure Kletka(Canvas: TCanvas; R,C,Status: integer);
Procedure Mina(Canvas : TCanvas; x, y : integer);
Procedure Flag( Canvas : TCanvas; x, y : integer);
Procedure Open( R, C : integer);
procedure Gen_Graphy();