Разработка компьютерной игры "Змейка"
Использование для написания компьютерной игры "Змейка" языка программирования Delphi. Требования пользователя к программному изделию. Определение требований к составу и параметрам технических средств. Тестовые наборы для отладки интерфейса пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.12.2016 |
Размер файла | 372,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Реферат
В курсовой работе 37 страниц 2 приложения, 6 рисунков.
Игра «Змейка» является объектом реализации данной курсовой работы.
Цель курсового проекта - разработка компьютерной игры, предназначенной для развлечения.
Данный программный продукт был написан на языке программирования Delphi. При разработке программы были изучены принципы работы Delphi, а также базовые функции и операторы
Программа предназначена для развлечения пользователей.
Summary
The course work 37 pages, 2 apps, 6 figures.
The game "Snake" is the object of the implementation of this coursework.
The purpose of the course project is the development of computer games designed for entertainment.
This software was written in the programming language Delphi. In developing the program were studied principles of Delphi, as well as basic functions and operators.
The program is designed for the entertainment of users.
Введение
С развитием компьютерной техники кроме «классического» программного обеспечения (ПО) стали появляться и развиваться целый класс игровых программ. Программы подобного плана развивают логическое и стратегическое мышление, а также дает возможность оператору сделать релаксационную паузу. Кроме того, разработка игровых программ является сама по себе достаточно интересным процессом, позволяющим получить дополнительный практикум программирования.
1. Техническое задание
1.1 Основание для разработки
Основанием для разработки программного продукта служит задание в курсовой работе по дисциплине «Языки программирования».
Игра рассчитана на одного игрока.
Цель игры - собрать «съесть» как можно больше яблок и тем самым набрать максимальное количество очков, при этом не разбиться об стену и не съесть саму себя.
1.2 Назначение разработки
Змейка, которая может двигаться в ограниченной плоскости.
Маневрами змейки должен управлять играющий. Змейка должна увеличиваться в размерах при столкновении с яблоком и погибать при столкновении со стеной, при пересечении самой себя и при выходе за границы плоскости заданной программистом.
Стена - объект при столкновении с которым змейка погибает.
В данной работе требуется ведение количество набранных в игре очков, настройка скорости движения змейки. Особым требованием является качественная прорисовка деталей тела змейки.
1.3 Рассмотренные альтернативы
При постановке задачи на разработку программы был произведен поиск альтернативных программных продуктов. Были рассмотрены два изученных языка программирования: С+ + и Delphi.
1.4 Стандарты
Разработка программной документации и программного изделия должна производиться согласно ГОСТ 19.701-90, ГОСТ 2.304-88. Единая система программной документации.
1.5 Требования пользователя к программному изделию
Пользовательский интерфейс - это средства общения пользователя с вашей программой. которые могут включать в себя изображения, звуки и текст. Ориентируясь на среднего пользователя интерфейс должен быть простым и удобным. Это снизит вероятность ошибок.
1.5.1 Входные и выходные данные
Входные данные в программе отсутствуют.
Выходными данными должна являться информация о количестве набранных очков либо о поражении над компьютером.
1.5.2 Программные ограничения, совместимость
Программное изделие должно работать в операционных системах семейства Windows. Для переноса программы не должны требоваться специальные программные или аппаратные средства.
1.5.3 Результирующие компоненты изделия
В программное изделие должны входить следующие компоненты:
- Командный файл для запуска приложения;
- Программная документация на изделие.
1.5.4 Носители информации
Программа находится на диске.
1.5.5 Требования к надежности
Программный продукт должен функционировать на всех разработанных тестах. Тесты требуется разработать на этапе рабочего проекта.
1.5.6 Рестарт
С помощью вкладки «Игра» -> «Новая игра», можно произвести рестарт.
Рестарт производится при любом выходе из программы, работа ведется в режиме реального времени. В случае сбоя необходимо перезапустить программу.
1.5.7 Требования к составу и параметрам технических средств
Для работы программного модуля необходимо:
- 474 Кб свободного места на жестком диске,
- 32 Мб свободной оперативной памяти,
- Операционная система семейства Windows.
2. Рабочий проект
2.1 Модули и объекты интерфейса пользователя
Пользовательский интерфейс включает в себя следующие объекты:
- Набор кнопок управления;
- Игровое поле.
2.2 Модуль
Проект состоит из 3 модулей:
1) core.pas: основной модуль игры, содержит основную форму и процедуру;
2) Snake.pas: центральный связующий модуль;
3) Help.pas: модуль с окном справки;
Так же в проекте имеется файл ресурсов (snake.res), в нем хранятся битовые образы (bmp), необходимые для анимации.
2.2.1 Описание функций модуля
Реализация движения змейки.
Для реализации данного принципа движения нам необходимо написать две процедуры: удаление элемента из хвоста списка (DelFromTail) и добавление элемента в голову списка (InsertToHead). Для того чтобы стирать звено змейки воспользуемся процедурой DrawSegment, но в качестве цвета отображения звена зададим цвет фона канвы, по умолчанию.
Для проверки цвета точки необходимо использовать свойство канвы - Pixels[x,y], которое возвращает и задает цвет точки канвы с координатами (x,y).
Компонент TTimer под именем ShakeTimer - этот таймер по истечению определенного времени будет перерисовывать змейку и заставлять её постоянно двигаться в определенном направлении, заданным пользователем. Для перерисовки змейки требуется некоторое время и иногда это время превышает интервал времени таймера (все зависит от скорости работы конкретного компьютера). С этой целью мы вводим глобальную логическую переменную BreakToReadKey, при которой если она истинна, то змейка перерисовывается. Перерисовку питона также выделим в отдельную процедуру. При этом на характер перерисовки питона будет влиять также направление его движения, т.е. код клавиши курсора, который нажал пользователь. В связи с этим назовем нашу процедуру ReadShakeKey, она имеет параметр Image:TImage, где рисовать змейку, также зависит от глобальной переменной WhatKeyPressed, хранящей код нажатой клавиши пользователем на форме во время движения змейки.
2.2.2 Описание реализации программы
Для реализации поставленной задачи необходимо разработать несколько функциональных частей задачи.
Во-первых, необходимо с помощью графического редактора создать изображение элементов змейки так, чтобы из фрагментов этого изображения в процессе работы программы составлялось общее изображение.
Во-вторых, необходимо выбрать визуальные компоненты, использование которых для игры будет наиболее оправданным.
После изучения линейки компонентов среды RAD Stydio Delphi (приложение для реализации программ) выбор был остановлен на компоненте tStringGrid (Этот компонент реализует возможности своего предка TDrawGrid применительно к таблице строк). Данный компонент представляет собой сетку строк настраиваемой ширины и высоты. И хотя он функционально предназначен для отображения строк, методы отображения информации можно переопределить по своему усмотрению.
В-третьих, необходимо разработать основную логику программы, отвечающую за управление игровыми элементами.
На рисунке 2.1 представлено изображение, составленное из различных элементов игрового поля. Здесь находятся изображения всех использованных элементов для тела, головы и хвоста змейки. Здесь же находятся изображения съедобных объектов.
Рис. 2.1 Изображение составляющих
Для отображения элементов в ячейках компонента tStringGrid переопределен метод OnDrawCell. Каждой ячейки сетки можно ассоциировать указатель на объект. Будем использовать данный указатель для хранения числа (integer 4 байта) в котором будем хранить индекс картинки, которую необходимо рисовать в данной ячейке. При прорисовке ячейки извлекается это число, выделяются индексы по вертикали и горизонтали, по ним рассчитывается координаты прямоугольника в общем изображении компонентов. После чего производится копирование этого прямоугольного фрагмента в содержимое ячейки.
В таблице 2.2.1 представлено описание основных процедур, использованных в программе.
Таблица 2.2.1
Описание процедур
Название процедуры |
Описание процедуры |
|
procedure PutStatus(S: string; Index: Integer) |
Вывод статуса на панель состояния |
|
procedure FormKeyDown(Sender: TObject); |
Обработчик нажатия клавиш управления |
|
procedure mnuNewClick(Sender: TObject); |
Новая игра |
|
procedure mnuFinishClick(Sender: TObject); |
Закончить игру |
|
procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState) |
Прорисовка ячеек |
|
procedure FirstPos(Sender: TObject); |
Первоначальные установки новой игры |
Алгоритм движения змейки основывается на основе описаний состояний заполнения ячеек, координат головы и хвоста змейки, направления движений.
Для описания правил в программе описаны ряд типов и массивов констант, на основе которых определяются все содержание каждой из ячеек в игре. При одном условном шаге рассчитывается заполнение текущей и будущей координаты положения для головы и хвоста.
В таблице 2.2.2 представлено описание массивов, на основе которых построена основная логика движения змейки.
Таблица 2.2.2
Описание массивов
Программное описание массивов |
Текстовое описание массивов |
|
BmpPos:array[tCellsItems] of byte |
Индексы картинок соответствующие содержимому ячеек |
|
HeadGals:array [TSnakeDirection,TSnakeDirection] of TCellsItems |
Содержимое ячеек после изменения направления движения |
|
HeadNapr:array [TSnakeDirection] of TCellsItems |
Содержимое ячеек для головы змейки при различных направления движения |
|
TailNapr:array [TSnakeDirection] of TcellsItems |
Содержимое ячеек для хвоста змейки при различных направления движения |
|
TailTo:array [ciUpTail..ciRightTail,ciTopLeft..ciHor] of tCellsItems |
Содержимое ячеек для хвоста после предыдущего состояния хвоста |
На рисунке 2.2 представлена алгоритм движения змейки.
.
Рис. 2.2 Алгоритм движения змейки
2.3 Тестовые наборы для отладки интерфейса пользователя
интерфейс игра программирование змейка
Было проведено полное тестирование программы. В результате тестирования не выявлено ошибок. Программа функционирует корректно. Можно утверждать, что программа соответствует требованиям, описанным выше.
Результаты тестирования приведены в приложении Б.
Тестирование программы проводилось в операционных системах семейства Windows.
Заключение
В ходе выполнения курсовой работы были изучены основы программирования в языке Delphi. Написание программы способствовало закреплению теоретического материала на практике.
В процессе выполнения курсовой работы были освоены и закреплены навыки объектно-ориентированного программирования. Игра разработана для широкого круга пользователей, не требует подготовки и дополнительных знаний, тренирует внимание, отрабатывает реакцию игрока на использование кнопок управления. Все это делает игру привлекательной для пользователей. Достоинство игры состоит в том, что она не занимает много места и не требует много оперативной памяти. Программный продукт довольно прост в использовании и не нуждается в установке дополнительных программ.
Игра «Змейка» является логически завершенной игрой. Также возможны изменения и добавления некоторых моментов в геймплей, такие как мультиплеер и добавление на игровом поле препятствий.
Список используемой литературы
1. А.Я. Архангельский Delphi 5. М., ЗАО «Издательство «Бином», 2001. С. 768.
2. С.Д. Бобровский Delphi 5. Учебный курс. СПб, Изд. «Питер», 2000. С. 640.
3. В.Н. Гофман, А.М. Хомоненко Delphi 5. Наиболее полное руководство. СПб, БХВ, 2000. С. 800.
4. В. В. Фаронов В.В.Delphi 5. Учебный курс. М., Нолидж, 2000. С. 576.
5. В. В. Фаронов Delphi 5. Руководство программиста. М., «Нолидж», 2001. С. 640.
6. В. В. Фаронов Turbo Pascal 7.0. Учебное пособие. М., Нолидж, 1998.
7. В. В. Фаронов В.В.Delphi 5. Учебный курс. М., Нолидж, 2000. С. 576.
Приложение А
Листинг программы
Модуль: Snake.dpr
Всего строк: 15
program Snake;
uses
Forms,
untGame in 'untGame.pas' {frmGame},
untSetting in 'untSetting.pas' {frmSetting};
{$R *.RES}
begin
Application.Initialize;
Application.Title:= 'Snake game';
Application.CreateForm(TfrmGame, frmGame);
Application.Run;
end.
Модуль: untGame.pas
Всего строк: 431
unit untGame;
interface
uses
Windows, SysUtils, Classes, Controls, Forms, Menus,
ExtCtrls, StdCtrls, Buttons, ComCtrls, Grids, Graphics;
type
//возможные направления движения змейки
TSnakeDirection = (sdUp, sdDown, sdLeft, sdRight);
//возможные содержания ячеек
TCellsItems = (ciTopLeft,ciBottomLeft,ciTopRight,ciBottomRight,ciVert,ciHor,
ciUpHead,ciDownHead,ciLeftHead,ciRightHead,
ciUpTail,ciDownTail,ciLeftTail,ciRightTail,
ciF1,ciF2,ciF3,ciF4,
ciEmpty);
//позиции картинок соответствующие содержаниям ячеек
const BmpPos:array[tCellsItems] of byte=
($00,$20,$02,$22,$10,$01,
$30,$31,$32,$33,
$40,$41,$42,$43,
$50,$51,$52,$53,
$11);
// содержания ячеек после различных поворотов
HeadGals:array [TSnakeDirection,TSnakeDirection] of TCellsItems=
(
(ciVert,ciEmpty,ciTopRight,ciTopLeft),
(ciEmpty,ciVert,ciBottomRight,ciBottomLeft),
(ciBottomLeft,ciTopLeft,ciHor,ciEmpty),
(ciBottomRight,ciTopRight,ciEmpty,ciHor)
);
// расположения головы при направлениях
HeadNapr:array [TSnakeDirection] of TCellsItems=
(ciUpHead,ciDownHead,ciLeftHead,ciRightHead);
//расположение хвоста
TailNapr:array [TSnakeDirection] of TCellsItems=
(ciUpTail,ciDownTail,ciLeftTail,ciRightTail);
//куда движется хвост
TailTo:array [ciUpTail..ciRightTail,ciTopLeft..ciHor] of tCellsItems=
(
(ciRightTail,ciEmpty,ciLeftTail,ciEmpty,ciUpTail,ciEmpty),
(ciEmpty,ciRightTail,ciEmpty,ciLeftTail,ciDownTail,ciEmpty),
(ciDownTail,ciUpTail,ciEmpty,ciEmpty,ciEmpty,ciLeftTail),
(ciEmpty,ciEmpty,ciDownTail,ciUpTail,ciEmpty,ciRightTail)
);
//координаты смещения в зависимости от напраления
TailDx:array [ciUpTail..ciRightTail] of integer = (0,0,-1,1);
TailDy:array [ciUpTail..ciRightTail] of integer = (-1,1,0,0);
type
TfrmGame = class(TForm)
MenuGame: TMainMenu;
mnuGame: TMenuItem;
mnuNew: TMenuItem;
mnuPause: TMenuItem;
mnuContinue: TMenuItem;
N1: TMenuItem;
mnuExit: TMenuItem;
mnuHelp: TMenuItem;
mnuAbout: TMenuItem;
TmrSnake: TTimer;
mnuOptions: TMenuItem;
mnuAlways: TMenuItem;
N2: TMenuItem;
mnuSettings: TMenuItem;
mnuFinish: TMenuItem;
N3: TMenuItem;
StatusGame: TStatusBar;
Panel1: TPanel;
Grid: TStringGrid;
Image: TImage;
procedure mnuExitClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure TmrSnakeTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure mnuSettingsClick(Sender: TObject);
procedure mnuAlwaysClick(Sender: TObject);
procedure mnuAboutClick(Sender: TObject);
procedure mnuPauseClick(Sender: TObject);
procedure mnuContinueClick(Sender: TObject);
procedure mnuGameClick(Sender: TObject);
procedure mnuNewClick(Sender: TObject);
procedure mnuFinishClick(Sender: TObject);
function NewPointIsValid(X, Y: Integer;var longer:boolean):Boolean;
procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure FirstPos(Sender: TObject);
private
HeadPos,TailPos:tPoint;
Max:Integer;
Playing, Exec:Boolean;
Idx:Integer;
oDir,cDir:TSnakeDirection;
public
procedure PutStatus(S: string; Index: Integer);
published
procedure OneStep;
procedure NewFigure;
{ Public declarations }
end;
var
frmGame: TfrmGame;
const
W: Integer = 16;
H: Integer = 16;
MAX_X: Integer = 30;
MAX_Y: Integer = 20;
implementation
uses untSetting;
{$R *.DFM}
//Преобразование позиции в тип содержания
function PosToCellItems(I:integer):TCellsItems;
var t:TCellsItems;
begin
for result:=ciTopLeft to ciEmpty do
begin
if bmppos[result]=i then exit;
end;
end;
//вывод сообщения
procedure tfrmGame.PutStatus(S: string; Index: Integer);
begin
StatusGame.Panels[Index].Text:=S;
end;
// выход из программы
procedure TfrmGame.mnuExitClick(Sender: TObject);
begin
Close;
end;
//нажатие кнопки (стрелки)
procedure TfrmGame.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of //в зависимомти от кнопки
VK_LEFT:
cDir:=sdLeft; //установка напраления
VK_RIGHT:
cDir:=sdRight;
VK_UP:
cDir:=sdUp;
VK_DOWN:
cDir:=sdDown;
end;
end;
//срабатывание таймера
procedure TfrmGame.TmrSnakeTimer(Sender: TObject);
begin
if Exec then Exit; //выход если уже ходим
Exec:=True; //признак что ходим
OneStep; //один шаг игры
Exec:=False; //теперь не ходим
end;
//создание формы
procedure TfrmGame.FormCreate(Sender: TObject);
begin
Randomize; //включение генератора случайных чисел
Max:=0;
Idx:=1; //скорость игры
PutStatus('Счет: 0',0);
PutStatus(Caption,1);
mnuNewClick(nil);
end;
//настройки
procedure TfrmGame.mnuSettingsClick(Sender: TObject);
var
bOld:Boolean;
begin
bOld:=TmrSnake.Enabled;
TmrSnake.Enabled:=False;
try
if frmSetting = nil then
frmSetting:=TfrmSetting.Create(Application); //создание формы
frmSetting.LstLevel.ItemIndex:=Idx - 1; //установка скорости
if frmSetting.ShowModal = mrOK then //если ок
begin
Idx:=frmSetting.LstLevel.ItemIndex + 1; //берем скорость
TmrSnake.Interval:=Trunc(500 / Idx); //устанавливаем величину таймера
TmrSnake.tag:=frmSetting.LstLevel.ItemIndex + 1;
end;
finally
FreeAndNil(frmSetting); //освобождаем память
TmrSnake.Enabled:=bOld;
end;
end;
//поверх всех окон
procedure TfrmGame.mnuAlwaysClick(Sender: TObject);
var
Flgs:HWND;
begin
mnuAlways.Checked:=not mnuAlways.Checked;
if mnuAlways.Checked then
Flgs:=HWND_TOPMOST //флаг поверх окон
else
Flgs:=HWND_NOTOPMOST; //не поверх
//установка флага
SetWindowPos(Handle,Flgs,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE);
end;
//о программе
procedure TfrmGame.mnuAboutClick(Sender: TObject);
var
Old:Boolean;
begin
Old:=TmrSnake.Enabled;
TmrSnake.Enabled:=False;
MessageBox(Handle,'Игра "Змейка", она же "Питон"'. Используйте стрелки клавиатуры для управление вашей змейкой, ваша задача съесть как можно больше фруктов и стать больше, проиграете в том случае если врежитесь в себя или в стену.,'О программе',
MB_ICONINFORMATION);
TmrSnake.Enabled:=Old;
end;
//пауза
procedure TfrmGame.mnuPauseClick(Sender: TObject);
begin
TmrSnake.Enabled:=False; //запретить таймер
end;
//пуск
procedure TfrmGame.mnuContinueClick(Sender: TObject);
begin
TmrSnake.Enabled:=True; //разрешить таймер
end;
// выбор пункта "игра"
procedure TfrmGame.mnuGameClick(Sender: TObject);
begin
//установка разрешенных и запрещенных пунктов меню
mnuPause.Enabled:=TmrSnake.Enabled and Playing;
mnuContinue.Enabled:=not mnuPause.Enabled and Playing;
mnuFinish.Enabled:=Playing;
end;
//новая игра
procedure TfrmGame.mnuNewClick(Sender: TObject);
var i,j:integer;
begin
for i:=0 to MAX_X-1 do
for j:=0 to MAX_Y-1 do
grid.Objects[i,j]:=pointer(BmpPos[ciEmpty]); //очистить все поле
cDir:=sdRight; //направление - направо
if sender=nil then exit;
FirstPos(nil);
TmrSnake.Enabled:=False;
if Playing then
mnuFinishClick(Self); //закончить предыдущую игру
Exec:=False;
TmrSnake.Enabled:=True; //запуск таймера
PutStatus('Счет: 0',0); //первоначальный счет
Playing:=True;
end;
//закончить игру
procedure TfrmGame.mnuFinishClick(Sender: TObject);
var
i:Integer;
begin
PutStatus('Счет: 0',0);
Playing:=False;
TmrSnake.Enabled:=False;
Exec:=False;
mnuNewClick(nil);
end;
//проверка допустимой позиции
function TfrmGame.NewPointIsValid(X, Y: Integer;var longer:boolean):Boolean;
var
R,R1:Boolean;
begin
Result:=True;
longer:=false;
R:=(X >= 0) and (X < MAX_X) and //пределы игрового поля
(Y >= 0) and (Y < MAX_Y);
if R then
begin
if integer(Grid.Objects[x,y]) in [BmpPos[ciF1]..BmpPos[ciF4]] then //содержание ячейки - фрукт
begin
longer:=true; //надо удлиниться
NewFigure; //новый фрукт
exit;
end;
R1:=integer(Grid.Objects[x,y])=BmpPos[ciEmpty]; //пусто?
end;
if not (R and R1) then //если врезался
begin
TmrSnake.Enabled:=False;
MessageBox(Handle,'Вы проиграли:(','Змейка',MB_ICONWARNING);
mnuFinishClick(Self); //game over
Result:=False;
end
end;
//прорисовка ячеек грида
procedure TfrmGame.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var i,j:integer;
begin
i:=integer(grid.objects[ACOl,ARow]); //что в ячейке
j:=i mod $10; //индексы картинок
i:=i div $10;
j:=j*16; //координаты картинок
i:=i*16;
//копирование картинки
grid.Canvas.CopyRect(Rect,image.Canvas,classes.Rect(j,i,j+16,i+16));
end;
//один шаг игры
procedure TfrmGame.OneStep;
var i:integer;
j,t: TCellsItems;
NewLeft,NewTop:Integer;
longer:boolean;
// это голова?
function IsHead(i:integer):boolean;
begin
result:= (i in [$30..$33]);
end;
//Это хвост?
function IsTail(i:integer):boolean;
begin
result:= (i in [$40..$43]);
end;
begin
i:=integer(grid.Objects[HeadPos.X,HeadPos.Y]); //что у нас в координатах головы
case cDir of //текущее напралении
sdLeft: //изменение позиции головы
begin
NewLeft:=HeadPos.X - 1;
NewTop:=HeadPos.Y;
end;
sdRight:
begin
NewLeft:=HeadPos.X + 1;
NewTop:=HeadPos.Y;
end;
sdUp:
begin
NewLeft:=HeadPos.X;
NewTop:=HeadPos.Y-1;
end;
sdDown:
begin
NewLeft:=HeadPos.X;
NewTop:=HeadPos.Y+1;
end;
end;
if not NewPointIsValid(NewLeft,NewTop,longer) then Exit; //новая точка разрешена?
if integer(grid.Objects[NewLeft,NewTop]) in [$50..$53] then //это фрукт
begin
Max:=Max + 1; //очки
PutStatus('Score: ' + IntToStr((Max-3) * (8 + TmrSnake.tag*2)),0);
if Max=grid.RowCount*grid.ColCount - 10 then //макимальное количество очков
begin
MessageBox(Handle,'Вы победили !!!','Змейка',MB_ICONWARNING);
mnuFinishClick(Self);
exit;
end;
end;
grid.Objects[HeadPos.X,HeadPos.Y]:= //новое содержимое ячейки
pointer(BmpPos[HeadGals[oDir,cDir]]) ;
HeadPos:=point(NewLeft,NewTop); //установка головы
grid.Objects[HeadPos.X,HeadPos.Y]:= pointer(BmpPos[HeadNapr[cDir]]); //голова теперь здесь
i:=integer(grid.Objects[TailPos.X,TailPos.Y]);
NewLeft:= TailPos.X + Taildx[PosToCellItems(i)]; //новое положение хвоста
NewTop:= TailPos.Y + Taildy[PosToCellItems(i)];
if not longer then //если не надо удлиняться
begin
j:=PosToCellItems(i); //позицию в тип содержимого
t:=PosToCellItems(integer(grid.Objects[NewLeft,NewTop]));
grid.Objects[NewLeft,NewTop]:= pointer( //новое содержание
BmpPos[TailTo[j,t]]);
grid.Objects[TailPos.X,TailPos.Y]:= pointer(bmpPos[ciEmpty]); //там где был хвост теперь пусто
TailPos:=point(NewLeft,NewTop); //новое положение хвоста
end;
{
А если что-то было съедено, то хвост остается на старом месте
}
oDir:=cDir; //старое напраление
end;
//первоначальное положение змейки
procedure TfrmGame.FirstPos(Sender: TObject);
begin
grid.Objects[0,0]:=pointer(BmpPos[ciRightTail]); //хвост направо
grid.Objects[1,0]:=pointer(BmpPos[ciHor]); //горизонтальное туловище
grid.Objects[2,0]:=pointer(BmpPos[ciRightHead]); //голова направо
oDir:= sdRight; //старое направление
cDir:= sdRight; //новое напраление
HeadPos:=Point(2,0); //положение горловы
TailPos:=Point(0,0); //положение хвоста
grid.Refresh;
Max:=3;
NewFigure; //новый фрукт
end;
//новая фигура
procedure TfrmGame.NewFigure;
var i,j,t:integer;
begin
repeat
i:=random(grid.ColCount); //случайные координаты
j:=random(grid.RowCount);
until integer(grid.Objects[i,j])=BmpPos[ciEmpty]; //пока там не пусто
t:=random(4); //случайная фигура
grid.Objects[i,j]:=pointer($50+t); //установим в грид
end;
end.
Модуль: untSetting.pas
Всего строк: 26
unit untSetting;
interface
uses
Windows, Classes, Controls, Forms, ComCtrls, StdCtrls, ExtCtrls;
type
TfrmSetting = class(TForm)
BtnOK: TButton;
BtnCancel: TButton;
LstLevel: TRadioGroup;
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmSetting: TfrmSetting;
implementation
{$R *.DFM}
end.
Приложение Б
Тестирование программы.
При тестировании программы был произведен подробный анализ.
При запуске программы появилось главное меню с вкладками «Игра», «Настройка», «Помощь».
Рис. Б.1 Главное меню
Рис. Б.2 Вкладка «Игра»
Рис. Б.3 Вкладка «Настройки»
В процессе игры проблем не обнаружено, игра работает нормально.
Рис. Б.4 Процесс игры
При проверке игры на проигрыш, проблем не обнаружено.
Рис. Б.5 Проигрыш 1
Рис. Б.6 Проигрыш 2
Размещено на Allbest.ru
...Подобные документы
Разработка и реализация компьютерной игры "Змейка" с помощью языка программирования Pascal и модуля CRT. Составление общего алгоритма программы, выделение ее функциональных частей. Разработка тестовых примеров. Использование типизированных файлов.
курсовая работа [2,1 M], добавлен 23.02.2011Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.
контрольная работа [286,3 K], добавлен 10.04.2011Функциональное и эксплуатационное назначение изделия. Перечень требований пользователя к программному изделию. Программные ограничения, совместимость. Требования к параметрам технических средств. Безопасность и секретность, требования к надежности.
курсовая работа [574,6 K], добавлен 27.04.2011Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.
дипломная работа [3,3 M], добавлен 18.02.2017Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013Разработка компьютерной игры "Эволюция" с помощью игрового движка Unit. Сравнение критериев игры-аналога и разрабатываемой игры. Разработка графического интерфейса пользователя. Настройки камеры в редакторе Unity. Структура файла сохранения игры.
дипломная работа [3,6 M], добавлен 11.02.2017Основные понятия абстракции, инкапсуляции, наследования и полиморфизма. Основы проектирования игр. Работа с графическими библиотеками. Создание дружественного пользовательского интерфейса. Разработка игры "Змейка", краткое описание классов, алгоритмы.
курсовая работа [757,2 K], добавлен 19.06.2012Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.
курсовая работа [1,5 M], добавлен 17.01.2011Особенности ассемблера - машинно-ориентированного языка низкого уровня, применяемого для создания простых приложений. Связывание программ на разных языках. Типичный формат записи команд, инструкции и директивы языка ассемблера. Разработка игры "Змейка".
курсовая работа [215,0 K], добавлен 20.07.2014Разработка программного приложения в среде Delphi. Создание таблиц и их заполнение. Форма редактирования записи. Реализация SQL запросов и поиска. Создание отчётов по БД. Руководство пользователя. Требования к составу и параметрам технических средств.
курсовая работа [1,3 M], добавлен 03.11.2014Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.
курсовая работа [160,3 K], добавлен 03.12.2014Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Обоснование языка программирования Object Pascal и среды разработки Delphi. Создание интерфейса пользователя. Проектирование структуры и описание компонентов, использованных при разработке программного продукта. Составление инструкции пользователя.
курсовая работа [888,7 K], добавлен 20.05.2015Понятие и эволюция игр, анализ их различных жанров и существующих аналогов. Выбор программных средств для реализации игры, написание сюжета и выбор среды разработки игры. Алгоритмы для придания гибкости обучающей игре. Описание программных модулей.
дипломная работа [2,7 M], добавлен 27.10.2017Требования к программному изделию и параметрам технических средств. Описание пользовательского интерфейса для автоматизированной системы учёта товаров на оптовом складе. Обоснование выбора языков программирования, организации входных и выходных данных.
дипломная работа [3,4 M], добавлен 02.04.2013Системный анализ предметной области. Требования к программе и программному изделию, к функциональным характеристикам, к надежности, составу и параметрам технических средств. Обоснование выбора средств выбора для хранения и обработки базы данных.
реферат [403,8 K], добавлен 02.02.2014Разработка базы данных книжного магазина в среде программирования Delphi. Создание таблиц и их заполнение. Требования к составу и параметрам технических средств. База данных как набор файлов, содержащих информацию. Этапы создания приложения в Delphi.
курсовая работа [803,6 K], добавлен 04.11.2012Требования к программному изделию, составу и параметрам технических средств (аппаратные ограничения). Технико-экономическое обоснование целесообразности разработки. Функция, реализующая метод "Северо-западного угла". Модуль Sz, Nst, Venger-m, М1.
дипломная работа [1,6 M], добавлен 30.09.2013Требования к техническим, программным средствам разработки и функционированию программы. Обоснование выбранного языка программирования. Описание алгоритма решения задачи, тестирование ее основных функций. Понятие дружелюбного пользовательского интерфейса.
курсовая работа [85,9 K], добавлен 31.10.2014