Разработка игры "Палатки"

Возможности интегрированной среды разработки приложений Delphi. Основные алгоритмические конструкции языка программирования Pascal. Описание программы, ее листинг и блок-схема. Демонстрация работы приложения-игры "Палатки", работающего под ОС Windows.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 13.06.2012
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Задание

Таблица 10х10 представляет собой план леса, в котором указано положение 20 деревьев. К каждому дереву нужно привязать свою палатку (в клетку, касающуюся клетки дерева стороной), всего ровно 20 палаток. Клетки с палатками не должны касаться друг друга (даже углом!). Числа слева и вверху обозначают количество клеток, занятых палатками, в соответствующей строке или столбце.

Требования к программе:

-программа должна быть выполнена на языке Pascal;

-в программе предусмотреть раздел с правилами игры;

-игрок (пользователь) должен перемещать фишки с помощью манипулятора «мышь»;

-в игре предусмотреть счетчик ходов и отмену последнего сделанного хода.

программа игра приложение

Содержание

Введение

1 Среда разработки приложений Delphi

1.1 Основы языка Pascal

1.2 Элементы управления в Microsoft Delphi

1.3 Обработка событий в Microsoft RAD Studio

2. Описание программы

Заключение

Список использованных источников

Введение

Целью курсовой работы является получение опыта самостоятельной разработки в соответствии с заданием пользовательского приложения, работающего под управлением ОС Microsoft Windows, в среде разработки приложений Delphi, а также получение навыка составления пояснительной записки и оформления в соответствии с требованиями, принятыми на факультете «Информационные системы в управлении».

Задачами курсовой работы являются: 1) разработка программы в соответствии с заданием; 2) составление пояснительной записки в соответствии с требованиями.

В первой главе пояснительной записки к курсовой работе приводится краткое описание возможностей интегрированной среды разработки приложений Delphi, основных алгоритмических конструкций языка программирования Pascal и базовых элементов управления.

Во второй главе приводится краткое описание программы, блок-схема программы и демонстрация работы программы.

В заключении приводится перечень изученных вопросов и основных результатов курсовой работы.

В приложение вынесен программный код с подробными комментариями.

1. Среда разработки приложений Delphi

1.1 Основы языка Pascal

В таблице 1.1 описаны типы данных Pascal и диапазоны значений

Таблица 1.1 - Типы данных Pascal

Тип

Visual Basic

Диапазон значений

Boolean

True или False

Byte

От 0 до 255 (беззнаковый).

Char

От 0 до 65535 (беззнаковый).

Real

Значения вещественного типа занимают 8 байт, содержат 15-16 значащих цифр и по модулю не могут превосходить величины 1.7•10308.(вещественный)

String

Не более, чем 255 символов (строковый)

Array

Массив представляет собой набор элементов одного типа, каждый из которых имеет свой номер, называемый индексом.

Integer

От -2 147 483 648 до 2 147 483 647 (целый)

Record

Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи

Указатели

Тип указателя на тип T имеет форму ^T. Бестиповой указатель описывается с помощью слова pointer.

Single

Число одиночной точности с плавающей запятой,

от -3,4028235E+38 до -1,401298E-45 для отрицательных значений;

от 1,401298E-45 до 3,4028235E+38 для положительных значений

procedure

Переменные, предназначенные для хранения процедур и функций, называются процедурными

В таблице 1.2 кратко описаны основные циклические структуры в Pascal (позволяют выполнить одну или несколько строк кода несколько раз).

Таблица 1.2 - Циклические структуры Pascal

Циклическая конструкция

Краткое описание

While...do

Перед каждой итерацией цикла условие вычисляется, и если оно истинно, то выполняется тело цикла, в противном случае происходит выход из цикла.

For ...to...do (downto)

Для первой формы цикла с ключевым словом to параметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы ключевым словом downto - уменьшаясь на единицу.

repeat ...until

условие вычисляется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла.

1.2 Элементы управления в Microsoft Delphi

Таблица 1.3 - Элементы управления

Имя

Тип

Назначение

MainMenu1

MainMenu1

Содержит разделы меню программы

1.3 Обработка событий в Microsoft RAD Studio

Большинство программ управляются событиями, то есть ход работы программы определяется внешними воздействиями, называемыми событиями.

Под событием в данном случае подразумевается сигнал, сообщающий приложению о внешнем воздействии, в частности, о действии пользователя. Например, когда пользователь щелкает элемент управления на форме, форма может инициировать событие Click и вызывать процедуру, обрабатывающую событие. События также допускают взаимодействие отдельных задач. Например, приложение выполняет задачу по сортировке. Если пользователь отменяет сортировку, то приложение может послать событие отмены, которое остановит процесс сортировки.

Любой объект, способный вызывать события, является отправителем событий, также называемым источником событий. Формы и элементы управления являются примерами отправителей событий.

Обработчики событий - это процедуры, вызываемые при возникновении соответствующего события. Можно использовать любые допустимые процедуры в качестве обработчика событий. В RAD Studio используется стандартное положение об именовании обработчиков событий. Имя должно состоять из имени отправителя события, знака присваивания и имени события. Например, событие Click кнопки с именем button1 будет иметь имя button1:=Click [1]. В теле процедуры необходимо описать действия, которые программа должна выполнить при получении сигнала о том, что данное событие произошло.

Пользователь оказывает управляющее воздействие на программу посредством внешних периферийных устройств. Наиболее распространенными среди них являются клавиатура и манипулятор «мышь».

2. Описание программы

Приложение представляет собой стандартное окно Windows фиксированных размеров, которое можно свернуть или закрыть. В окне имеется стандартное меню, включающее разделы «Игра» и «Справка». Раздел «Игра» включает подразделы «Отменить ход» (доступна только для последнего сделанного хода) и «Выход».. Программа поддерживает способ управления: с помощью мыши . В заголовке окна отображается информация о количестве сделанных ходов.

В таблице 2.1 перечислены используемые в программе глобальные константы и переменные, в таблице 2.2 - элементы управления, в таблице 2.3 - процедуры и функции.

Таблица 2.1 - Глобальные константы и переменные

Имя

Тип

Назначение

CountInRows

array [1..10] of integer

количество палаток в строках

connection

array [1..20] of TPoint

привязки деревьев к палатке

selecttrees

array [1..4] of Tpoint

координаты выделенных деревьев

selectmod

boolean

индикатор режима выделения

selectcount

integer

количество выделенных деревьев

curenttent

TPoint

текущая палатка, для которой выбирается дерево

moves

intege

количество ходов

tentscount

integer

количество поставленных палаток

CountInCols

array [1..10] of integer

кол во палаток в столбцах

Таблица 2.2 - Элементы управления

Имя

Тип

Назначение

label1_Click

label1

Содержит к клетки «Пятнашки»

MainMenu

MainMenu

Содержит разделы меню программы

Таблица 2.3 - Процедуры и функции

Имя

Тип

Назначение

procedure tform2.save

Пользовательская процедура

сохраняем поле и его состояния

procedure tform2.load

Пользовательская функция

загрузка соответственно

function tform2.canpastetentbycount

Пользовательская процедура

проверка на допустимое кол во палаток в строке/столбце

function tform2.canpastetent

Пользовательская процедура

проверка правил на свободные деревья и соседние палатки

procedure TForm2.DrawGrid1Click

Обработчик события

Проверка режима

2.1 Блок-схема программы

Рисунок 2.1

Рисунок 2.2

Рисунок 2.3

Рисунок 2.4

Рисунок 2.5

Рисунок 2.6

Рисунок 2.7

Рисунок 2.8

Листинг программы.

unit forest;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, ImgList, ExtCtrls;

type

TForm2 = class(TForm)

DrawGrid1: TDrawGrid;

Button1: TButton;

ImageList1: TImageList;

Label1: TLabel;

Panel1: TPanel;

Button2: TButton;

Button3: TButton;

procedure FormCreate(Sender: TObject);

procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure DrawGrid1Click(Sender: TObject);

function canpastetent(x, y : integer) : integer;

function canpastetentbycount(x, y : integer) : boolean;

procedure Button1Click(Sender: TObject);

procedure save();

procedure load();

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

{

каждое дерево имеет прявязку к палатке, привязка может быть нулевая, что означает отсутствие палатки

кждая палатка имеет ссылку на ту привязку, которой дерево привязано к данной палатке

объекты поля field[i, j].x

0 - дерево

1 - палатка

2 - выделенное дерево

-1 - пустая ячейка

}

var field : array [1..10, 1..10] of TPoint; //поле, x - тип объекта, y - указывает на привязку дерева к палатке

CountInRows : array [1..10] of integer;//кол во палаток в строках

CountInCols : array [1..10] of integer;//кол во палаток в столбцах

connection : array [1..20] of TPoint;//привязки деревьев к палатке(содержит координаты палатки)

selecttrees : array [1..4] of Tpoint;//координаты выделенных деревьев

selectmod : boolean;//индикатор режима выделения

selectcount : integer;//количество выделенных деревьев

curenttent : TPoint;//текущая полатка, для которой выбирается дерево

moves : integer;//кол во ходов

tentscount : integer;//кол во поставленных палаток

//данные для бэкапа

oldfield : array [1..10, 1..10] of TPoint;

oldconnection : array [1..20] of TPoint;

oldtentscount : integer;

procedure tform2.save;

var i, j :integer;

begin//сохраняем поле и его состояния

for i := 1 to 10 do begin

for j := 1 to 10 do begin

oldfield[i, j] := field[i, j];

if oldfield[i, j].X = 2 then begin

oldfield[i, j].X := 0;

end;

end;

end;

for i := 1 to 20 do begin

oldconnection[i] := connection[i];

end;

oldtentscount := tentscount;

button1.Enabled := true;

end;

procedure tform2.load;

var i, j :integer;

begin//загрузка

for i := 1 to 10 do begin

for j := 1 to 10 do begin

field[i, j] := oldfield[i, j];

end;

end;

for i := 1 to 20 do begin

connection[i] := oldconnection[i];

end;

tentscount := oldtentscount;

selectmod := false;

button1.Enabled := false;

drawgrid1.Repaint;;

end;

function tform2.canpastetentbycount(x: Integer; y: Integer) : boolean;

var i, cc, cr : integer;

begin//проверка на допустимое кол во палаток в строке/столбце(циферки сверху и сбоку)

result := true;

cc := 0;

cr := 0;

for i := 1 to 10 do begin

if field[i, y].X = 1 then begin

cc := cc +1;

end;

if field[x, i].X = 1 then begin

cr := cr +1;

end;

end;

result := result and (cc < CountInRows[y]) and (cr < CountInCols[x]);

if not result then begin

showmessage('Неверный ход: в строке или столбце максимальное количество палаток');

end;

end;

procedure TForm2.Button1Click(Sender: TObject);//бэкап

begin

load;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

form2.Close;

end;

procedure TForm2.Button3Click(Sender: TObject);

var s : string;

begin

s := 'К кждому дереву нужно привязать свою палатку' + #13#10+

'(в клетку касающуюся клетки дерева стороной)' + #13#10+

'всего ровно 20 палаток, клетки с палатками не должны касаться'+ #13#10+

'друг друга (даже углом!). Числа слева и сверху обозначают' + #13#10+

'количество клеток занятых палатками в соответствующей строке или столбце';

messagebox(form2.Handle, pchar(s), 'Справка', 32);

end;

function tform2.canpastetent(x: Integer; y: Integer) : integer;

var isfreetree, istent : boolean;

i : integer;

begin//проверка правил на свободные деревья и соседние палатки

result := 0;

istent := true;

isfreetree := false;

//4 схожих блока, каждый из них проверяет 2 своих ячейки вокруг выбранной клетки

if y > 1 then begin//и смотрит есть ли свободное дерево

istent := istent and (field[x, y - 1].X <> 1);

if field[x, y - 1].X = 0 then begin

if connection[field[x, y - 1].y].X = 0 then begin

isfreetree := true;

result := result + 1;

field[x, y - 1].x := 2;

selecttrees[result].X := x ;

selecttrees[result].y := y - 1;

end;

end;

if x > 1 then begin

istent := istent and (field[x - 1, y - 1].X <> 1);

end;

end;

if y < 10 then begin

istent := istent and (field[x, y + 1].X <> 1);

if field[x, y + 1].X = 0 then begin

if connection[field[x, y + 1].y].X = 0 then begin

isfreetree := true;

result := result + 1;

field[x, y + 1].x := 2;

selecttrees[result].X := x;

selecttrees[result].y := y + 1;

end;

end;

if x < 10 then begin

istent := istent and (field[x + 1, y + 1].X <> 1);

end;

end;

if x > 1 then begin

istent := istent and (field[x - 1, y].X <> 1);

if field[x - 1, y].X = 0 then begin

if connection[field[x - 1, y].y].X = 0 then begin

isfreetree := true;

result := result + 1;

field[x - 1, y].x := 2;

selecttrees[result].X := x - 1;

selecttrees[result].y := y;

end;

end;

if y < 10 then begin

istent := istent and (field[x - 1, y + 1].X <> 1);

end;

end;

if x < 10 then begin

istent := istent and (field[x + 1, y].X <> 1);

if field[x + 1, y].X = 0 then begin

if connection[field[x + 1, y].y].X = 0 then begin

isfreetree := true;

result := result + 1;

field[x + 1, y].x := 2;

selecttrees[result].X := x + 1;

selecttrees[result].y := y;

end;

end;

if y > 1 then begin

istent := istent and (field[x + 1, y - 1].X <> 1);

end;

end;

istent := istent and isfreetree;

if istent = false then begin//если нет свободных деревьев или есть рядом палатка выводи мессагу о неверном ходе

for i := 1 to result do begin

field[selecttrees[i].x, selecttrees[i].y].X := 0;

end;

showmessage('Неверный ход: отсутствие свободного дерева или наличие рядом палатки');

result := 0;

end else begin

selectmod := true;

selectcount := result;

end;

end;

procedure TForm2.DrawGrid1Click(Sender: TObject);

var i : integer;

begin

if not selectmod then//проверка режима

begin

if field[drawgrid1.Col, drawgrid1.Row].X = -1 then

begin

if canpastetentbycount(drawgrid1.Col, drawgrid1.Row) then begin

i := canpastetent(drawgrid1.Col, drawgrid1.Row);

curenttent.X := drawgrid1.Col;

curenttent.y := drawgrid1.row;

if i <> 0 then begin

save;

moves := moves + 1;

tentscount := tentscount + 1;

field[drawgrid1.Col, drawgrid1.Row].X := 1;

if i = 1 then begin //если нашлось только одно дерево свободное обходимся без режима выделения

field[drawgrid1.Col, drawgrid1.Row].y := field[selecttrees[i].x, selecttrees[i].y].y;

connection[field[drawgrid1.Col, drawgrid1.Row].y].X := drawgrid1.Col;

connection[field[drawgrid1.Col, drawgrid1.Row].y].y := drawgrid1.Row;

field[selecttrees[i].x, selecttrees[i].y].x := 0;

selectmod := false;

end;

end;

end;

end else begin

if field[drawgrid1.Col, drawgrid1.Row].X = 1 then begin

save;

moves := moves + 1;

tentscount := tentscount - 1;

field[drawgrid1.Col, drawgrid1.Row].X := -1;

connection[field[drawgrid1.Col, drawgrid1.Row].y].X := 0;

connection[field[drawgrid1.Col, drawgrid1.Row].y].y := 0;

end;

end;

end else begin//в режиме выделения тыкаем на нужное дерево, тем самым привязывая его к палатке

if field[drawgrid1.Col, drawgrid1.Row].X = 2 then begin

field[curenttent.x, curenttent.y].y := field[drawgrid1.Col, drawgrid1.Row].y;

connection[field[drawgrid1.Col, drawgrid1.Row].y].X := curenttent.x;

connection[field[drawgrid1.Col, drawgrid1.Row].y].y := curenttent.y;

for i := 1 to selectcount do begin

field[selecttrees[i].x, selecttrees[i].y].x := 0;

end;

selectmod := false;

end;

end;

drawgrid1.Repaint;

label1.Caption := 'Ходов ' + inttostr(moves);

if tentscount = 20 then begin//условие победы

showmessage('Вы выйграли');

drawgrid1.Enabled := false;

end;

end;

procedure TForm2.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin//отрисовочка ячеек

if (acol > 0) and (arow > 0) then begin

imagelist1.Draw(drawgrid1.Canvas, rect.Left, rect.Top, field[acol, arow].X, true);

end else begin

if (acol > 0) or (arow > 0) then begin

if acol = 0 then begin

drawgrid1.Canvas.TextOut(drawgrid1.CellRect(acol, arow).Left, drawgrid1.CellRect(acol, arow).top, inttostr(countinrows[arow]));

end else begin

drawgrid1.Canvas.TextOut(drawgrid1.CellRect(acol, arow).Left, drawgrid1.CellRect(acol, arow).top, inttostr(countincols[acol]));

end;

end;

end;

end;

procedure TForm2.FormCreate(Sender: TObject);

var i, j : integer;

begin

selectmod := false;

moves := 0;

tentscount := 0;

for i := 1 to 10 do

begin

for j := 1 to 10 do

begin

field[i, j].Y := 0;

field[i, j].x := -1;

end;

end;

//расстановка деревьев

field[2,1].X :=0;

field[4,1].X :=0;

field[6,2].X :=0;

field[8,2].X :=0;

field[3,3].X :=0;

field[8,3].X :=0;

field[7,4].X :=0;

field[2,5].X :=0;

field[7,5].X :=0;

field[1,6].X :=0;

field[5,6].X :=0;

field[10,6].X :=0;

field[8,7].X :=0;

field[1,8].X :=0;

field[4,8].X :=0;

field[3,9].X :=0;

field[7,9].X :=0;

field[9,9].X :=0;

field[4,10].X :=0;

field[8,10].X :=0;

//задаем деревьям связи

field[2,1].y :=1;

field[4,1].y :=2;

field[6,2].y :=3;

field[8,2].y :=4;

field[3,3].y :=5;

field[8,3].y :=6;

field[7,4].y :=7;

field[2,5].y :=8;

field[7,5].y :=9;

field[1,6].y :=10;

field[5,6].y :=11;

field[10,6].y :=12;

field[8,7].y :=13;

field[1,8].y :=14;

field[4,8].y :=15;

field[3,9].y :=16;

field[7,9].y :=17;

field[9,9].y :=18;

field[4,10].y :=19;

field[8,10].y :=20;

//количество палаток в строках

CountInRows[1] := 3;

CountInRows[2] := 1;

CountInRows[3] := 2;

CountInRows[4] := 1;

CountInRows[5] := 3;

CountInRows[6] := 1;

CountInRows[7] := 3;

CountInRows[8] := 1;

CountInRows[9] := 2;

CountInRows[10] := 3;

//и в столбцах

CountInCols[1] := 3;

CountInCols[2] := 1;

CountInCols[3] := 3;

CountInCols[4] := 1;

CountInCols[5] := 2;

CountInCols[6] := 2;

CountInCols[7] := 2;

CountInCols[8] := 2;

CountInCols[9] := 2;

CountInCols[10] := 2;

end;

end.

Демонстрация работы программы

Для начала работы с программой нужно запустить файл Gaime .

Появится окно программы в которой мы должны поставить нашу первую палатку.

Мы ставим нашу первую палатку.

Нужно выбрать к какому дереву мы ее привяжим по одной палатке на дерево.

Посмотрим справку.

Можно ознакомиться с правилами игры и что нам нужно сделать.

Неверный ход

Если мы поставим больше палаток чем доступно в строке или столбце увидим сообщение о неверном ходе.

Палатка не привязана к дереву.

Если мы пытаемся поставить палатку не привязаную к дереву мы увидим эту надпись.

Заключение

В ходе выполнения курсовой работы были более подробно изучены и изложены в пояснительной записке следующие вопросы:

базовые элементы управления, их свойства и методы;

управление программой с помощью событий, связанных с мышью;

Полученные знания использованы на практике. Результатом работы является приложение-игра «Палатки», работающее под ОС Windows.

Список использованных источников

Библиотека MSDN (по-русски) [Электронный ресурс] -
Электрон. дан. - Microsoft Corporation, 2010 - Режим доступа: http://msdn.microsoft.com/ru-ru/library/ms123401.aspx, свободный. - Загл. с экрана. - Яз. рус.

FAQ по RAD Studio .- http://www.embarcadero.com/rad-in-action/rad-studio-2010 .

1. Размещено на www.allbest.ru


Подобные документы

  • Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.

    контрольная работа [286,3 K], добавлен 10.04.2011

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.

    курсовая работа [164,5 K], добавлен 18.05.2014

  • Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.

    курсовая работа [12,4 K], добавлен 18.06.2008

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

  • Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.

    курсовая работа [160,3 K], добавлен 03.12.2014

  • Исследование базовых концепций программирования приложений под операционную систему Windows. Изучение истории создания универсального языка программирования Си. Разработка графического пользовательского интерфейса. Обзор правил игры и алгоритма работы.

    курсовая работа [58,2 K], добавлен 09.11.2012

  • Разработка программы "Сапер", удовлетворяющей необходимым требованиям эффективности в интегрированной среде программирования Microsoft Visual C++. Специфика создания Windows-приложений. Применение логической игры для развития интереса к обучению у детей.

    курсовая работа [511,1 K], добавлен 01.06.2013

  • Создание компьютерной игры посредством среды программирования Delphi. Инструменты разработки, компоненты и методы для разработки программы. Логическая и физическая структуры, основные функции и элементы управления программы, ее тестирование и отладка.

    курсовая работа [27,9 K], добавлен 26.07.2014

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