Разработка компьютерной игры "Змейка"

Использование для написания компьютерной игры "Змейка" языка программирования 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.