Разработка игровой системы "Тетрис"

 













разработка игровой программы «Парные картинки»

Содержание

игровая программа интерфейс

Введение

. Разработка программы

.1 Постановка задачи

.2 Блок-схема

.3 Алгоритм реализации игровой программы

. Компоненты Delphi в программе

. Описание пользовательского интерфейса

Заключение

Список используемой литературы

Приложение А-Листинг программы

Введение


В ходе выполняемой курсовой работы будет разрабатываться игровая программа «Парные картинки», которая и будет являться объектом исследования. Потребуется создать полноценную правильно-функционирующую программу и самостоятельно изучим некоторые процедуры и функции.

Delphi - это комбинация нескольких важнейших технологий:

Высокопроизводительный компилятор в машинный код;

Объектно-ориентированная модель компонент;

Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов;

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

Компилятор, встроенный в Delphi, обеспечивает высокую производительность, необходимую для построения приложений в архитектуре клиент-сервер. Этот компилятор в настоящее время является самым быстрым в мире, его скорость компиляции составляет свыше 120 тысяч строк в минуту на компьютере 486DX33. Он предлагает легкость разработки и быстрое время проверки готового программного блока, характерного для языков четвертого поколения (4GL) и в то же время обеспечивает качество кода, характерного для компилятора 3GL. Кроме того, Delphi обеспечивает быструю разработку без необходимости писать вставки на C++ или ручного написания кода (хотя это возможно).

1. Разработка программы


.1 Постановка задачи


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


.2 Блок-схема


1.3 Алгоритм реализации игровой программы


Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл DBLPIC.

После запуска программы на экран выводится основная форма Form1 (рисунок 1), на которой расположены: главное меню и игровое поле.

Игра, т.е. работа программы, начинается сразу же после запуска.


Рисунок 1 Вид программы после запуска


Пример нажатой панели изображён на рисунке 2.

Pole: array [1..MAX_H,1..MAX_W] of integer;

{ Pole[i,j] < 100 - код картинки, клетка закрыта;[i,j] > 100 и < 200 - клетка открыта, т.е. игрок видит картинку;

Рисунок 2 Вид нажатой панели в программе


Следующим шагом написания программы является процедура проверки на выигрыш. В качестве данной процедуры используем компонент TTimer.

Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end, образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except...end пропускается.

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

Проверяем стиль панелей по горизонтали, вертикали и диагонали. Если хоть один ряд имеет не начальный стиль панелей, то сравниваем заголовки панелей данного ряда. Если после проверки выясняется, что заголовки данного ряда не равны - игра продолжается, а если же выясняется, что равны, то открываем модальное окно (Рисунке 3)

Рисунок 3 Модальное окно


begin

Form1.Canvas.Font.Name := 'Times New Roman';

Form1.Canvas.Font.Size := 36;

Form1.Canvas.Font.Color := clBlack;

Form1.Canvas.TextOut(70,160,'Конец игры!');

Form1.Canvas.Font.Size := 10;

Form1.Canvas.TextOut(120,210,'Ахметов И.Р., 2012'); end


Программирование кнопки Новая игра в меню программы делается в одну строку. Кнопка программируется в событии OnClick:


procedure TForm1.N1Click(Sender: TObject);

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] + 100;

Pole[open2.col,open2.row] := Pole[open2.col,open2.row] + 100;

count := 0;

// отрисовать клетки

Kletka(open2.col,open2.row);

Kletka(open1.col,open1.row);

// остановка таймера

Form1.Timer1.Enabled := False;

Canvas.Rectangle(0,0,ClientWidth,ClientHeight);

NewGame;

clock:=0;

end;


Рисунок 4 Модальное окно


Программирование кнопки ? также производится в событии OnClick и открывается модальное окно О программе (Рисунок 5), в котором описаны краткие сведения о программе и её создателе:


procedure TForm1. N3Click (Sender: TObject);

begin

Form3.Show;;

Рисунок 5 Модальное окно ?


Модуль Unit3 предназначен для вывода окна, содержащего сведения об окончании игры, с который происходил игровой процесс (Рисунок 3). Программирование осуществляется следующим образом:


Form1.Canvas.Font.Name := 'Times New Roman';

Form1.Canvas.Font.Size := 36;

Form1.Canvas.Font.Color := clBlack;

Form1.Canvas.TextOut(70,160,'Конец игры!');

Form1.Canvas.Font.Size := 10;

Form1.Canvas.TextOut(120,210,'Ахметов И.Р., 2012');

form1.timer2.Enabled:=False;

clock:=0;

Form1.Caption:='Парные картинки';

end;

2 Компоненты Delphi


2.1 Компонент TMainMenu



TMainMenu - позволяет поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка (Рисунок 1). Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они невидимы во время выполнения программы.


Рисунок 6 Иконки компонентов на форме, созданное меню


Создание меню включает три шага:

1)помещение TMainMenu на форму;

2)вызов Menu Designer (Рисунок 7);

)определение пунктов меню в Menu Designer.

Рисунок 7 Menu Designer


Этот компонент доступен из модуля MENUS, и находится на странице Палитры компонентов Standard.

Этот компонент представляет главное меню формы и наследует все методы и свойства TMenu. Особенность его в том, что в нем реализован сложный механизм объединения меню. Это необходимо по следующим причинам:

1.Если в приложении имеется несколько форм со своими меню, то для упрощения работы целесообразно соединить их в одно и управлять меню из главной формы.

2.Объединение меню нужно при работе с интерфейсом MDI и его подокнами.

.Механизм объединения меню используется серверами OLE, запускаемыми по месту нахождения объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого приложения.

Для того чтобы реализовать объединение меню, у тех форм, меню которых будут присоединены к главному, необходимо установить в True свойство:


(Pb) property AutoMerge: Boolean;


При этом у главного меню оно должно оставаться равным False, иначе главное меню будет вообще невидимым. Объединение будет происходить автоматически при активизации новых форм или серверов OLE. Кроме автоматического режима, объединение меню можно выполнить при вызове метода:


procedure Merge(Menu: TMainMenu);


1.2 Компонент TLabel



TLabel - служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Видно, что это легко сделать и во время выполнения программы, написав всего одну строчку кода.

Этот компонент доступен из модуля STDCTRLS, и находится на странице Палитры компонентов Standard.

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


.3 Компонент TPanel



TPanel - управляющий, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания панели инструментов и окна статуса.

Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Standard.

Этот компонент - является несущей конструкцией для размещения других элементов управления. В отличие от простой рамки (TBevel) панель сама является оконным элементом управления и родителем для всех размещенных на ней компонентов. Часто ее используют для создания панелей инструментов, строк состояния и т. п.

На границах панели размещаются две специальные окаймляющие рамки (bevels): BevelInner и BevelOuter. При помощи комбинации белого и серого цветов они имитируют трёхмерность - приподнятость (bvRaised) или утопленность (bvLowered). Также рамки могут быть невидимыми (bvNone).

Выравнивание текста заголовка панели определяется при помощи свойства:


(Pb) property Alignment: TAlignment;


.4 Компонент TImage



TImage - отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу.

Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Additional.

Этот компонент служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL. Он предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon).


.5 Компонент TImageList



TImageList представляет собой контейнер для хранения множества рисунков одинакового размера. Он может быть полезен при программном создании набора инструментальных кнопок, секций управляющего заголовка, при разработке программ, использующих анимационные эффекты, и вообще там, где требуется индексированный доступ к изображениям. Воспринимает форматы BMP, ICO.

При помещении TImageList на форму это выглядит, как просто иконка. Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они невидимы во время выполнения программы. Этот компонент находится на странице Палитры компонентов Win 32.


.6 Компонент TTimer



TTimer (таймер) служит для отсчета интервалов реального времени. Его свойство interval определяет интервал времени в миллисекундах, который должен пройти от включения таймера до наступления события onTimer. Таймер включается при установке значения True в его свойство Enabled. Раз включенный таймер все время будет возбуждать события onTimer до тех пор, пока его свойство Enabled не примет значения False.

При помещении TTimer на форму это выглядит, как просто иконка (Рисунок 6). Иконки данного типа называют невидимым (невизуальным) компонентом, поскольку они не видимы во время выполнения программы. Этот компонент находится на странице Палитры компонентов System.

3Описание пользовательского интерфейса

1)Файл ? Новая игра - начало новой игры. (Рисунок 8)


Рисунок 8 Пользовательский интерфейс


)Сложность ? … - Выбор уровня сложности (Рисунок 9)


Рисунок 9 Пользовательский интерфейс

2)Справка ? О программе - Вывод дополнительной информации о программе и о её создателе. (Рисунок 10)


Рисунок 10 Пользовательский интерфейс


Заключение


В результате выполнения данной курсовой работы, была разработана игровая программа под названием Парные картинки. Было проведено исследование компонентов программной среды Borland Delphi 6.0, использовалось множество процедур и функций.

При создании программы использовались следующие компоненты: TMainMenu, TTimer.

Также использовались и другие программы:

Adobe Photoshop CS v8.0 - использовался для создания фото автора для формы О программе;

Restorator 2005 v3.50 build 1442 - использовался для изменения иконки EXE файла игры;

Microsoft Paint v5.1 - использовался для создания рисунков к данному курсовому проекту

Список используемой литературы


1.Михаил Фленов «Библия Delphi» БХВ-Петербург, 2004г. 880с.

.Программирование в Delphi 6 Архангельский, А.Я. 2003г.

.Основы программирования в Delphi 7 Культин, Никита 2003г.

. Delphi 7 для профессионалов - М. Кэнту Санкт - Петербург, 2004г.

. Delphi на примерах - Пестриков В.М. БХВ-Петербург, 2005г.

Приложение А


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

{ Игра "Парные картинки"

выполнил: Ахметов И.Р.}

unit dblpic_;


interface


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

Dialogs, StdCtrls, jpeg, ExtCtrls, Menus;


TForm1 = class(TForm)

Timer1: TTimer;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Timer2: TTimer;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Timer1Timer(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure FormClick(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


// объявление нового типа col_row

col_row = record

col: integer;

row: integer;

end;




MAX_SIZE = 32; // максимальное кол-во парных картинок

MAX_H = 8; // максимальный размер поля - 8х8

MAX_W = 8;


Form1: TForm1;

clock:Integer;

level:Integer;


Pole: array [1..MAX_H,1..MAX_W] of integer;

{ Pole[i,j] < 100 - код картинки, клетка закрыта;

Pole[i,j] > 100 и < 200 - клетка открыта, т.е. игрок видит картинку;

Pole[i,j] > 200 - игрок нашел пару для этой картинки }


Pictures: TBitmap; // картинки, загруженные из файла


n : integer; // колво открытых пар картинок

count: integer; // количества открытых в данный момент клеток

open1: col_row; // координаты 1-й открытой клетки

open2: col_row; // координаты 2-й открытой клетки


W: integer; // кол-во клеток по горизонтали

H: integer; // кол-во клеток по вертикали

// произведение W и H должно быть кратно 2-м

WK: integer; // ширина клетки

HK: integer; // высота клетки



implementation

Unit2, Unit3;


{$R *.dfm}

// рисует клетку поля

Kletka(col,row: integer);

var

x,y: integer; // левый верхний угол клетки (координаты)

src, dst : Trect; // источник и получатель битового образа


// преобразуем координаты клетки

// в координаты на поверхности формы

x := (col-1)*WK;

y := (row-1)*HK;



if Pole[col,row] > 200 then

// для этой клетки найдена пара

// клетку надо убрать с поля

begin

// установить цвет границы, закраски и текста

Form1.Canvas.Brush.Color := clBtnFace;

Form1.Canvas.Pen.Color := clBtnFace;

Form1.Canvas.Font.Color := clBtnFace;

end;



if (Pole[col,row] > 100) and (Pole[col,row] < 200)

then

// клетка открыта - вывести картинку

begin


// Pole[col,row] = номер картинки + 100,

// где 100 - признак того, что клетка открыта

// определим положение картинки в Pictures

src := Bounds((Pole[col,row]-100 -1 )*WK,0,WK,HK);


// координаты картинки (клетки) на форме

dst := Bounds(x,y,HK-2,WK-2);


// вывести картинку в клетку

Form1.Canvas.CopyRect(dst,Pictures.Canvas,src);


// установить цвет границы и цифры

Form1.Canvas.Pen.Color := clBlack;

Form1.Canvas.Font.Color := clBlack;

Form1.Canvas.Brush.Style := bsClear;

end;



if (Pole[col,row] > 0) and (Pole[col,row] < 100) then

// клетка закрыта, рисуем только контур

begin

Form1.Canvas.Brush.Color := clBtnFace;

Form1.Canvas.Pen.Color := clBlack;

Form1.Canvas.Font.Color := clBtnFace;

end;


// отрисовать клетку

Form1.Canvas.Rectangle(x,y,x+WK-2,y+HK-2);

//Form1.Canvas.TextOut(x+15,y+15, IntToStr(Pole[col,row]));

Form1.Canvas.Brush.Color := clBtnFace;

;


// отрисовывает полеShowPole;

row,col: integer;

for row:=1 to H do

for col:=1 to W do

Kletka(row,col);;


// новая играNewGame;

var


k: integer; // кол-во парных картинок

r: integer; // случайное число

buf: array[1..MAX_SIZE] of integer;

// в buf[i] записываем, сколько чисел i

// записали в массив Pole

i,j: integer; // индексы массивов

begin


Randomize;

k := Trunc(H*W/2);


for i:=1 to k do

buf[i] := 0;



// запишем в массив Pole случайные числа

// от 1 до 2

// каждое число должно быть записано два раза

for i:=1 to H do

for j:=1 to W do

begin

repeat

r := random (k) + 1;

until buf[r] < 2;

Pole[i,j] := r; // код картинки

inc(buf[r]);

end;

// здесь поле сгенерировано

n:=0;

ShowPole;

;


// создание формыTForm1.FormClick(Sender: TObject);.timer2.Enabled:=True; //clock:=0;;

TForm1.FormCreate(Sender: TObject);

var

np: integer; // кол-во парных картинок

begin

level:=30;

Pictures := TBitmap.Create;

// загрузить картинки из файла

Pictures.LoadFromFile('pictures.bmp');


HK := Pictures.Height-1; // высота картинки

WK := HK; // ширина картинки


np:= Round(Pictures.Width / WK);

if np <= 15

then H := 4

else H :=5;

W := Round(np*2/H);





// установить размера поля

Form1.ClientHeight := H * HK;

Form1.ClientWidth := W * WK;



Form1.Timer1.Enabled := False;

Form1.Timer1.Interval := 200;


n := 0;

NewGame;

;



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

procedure TForm1.FormPaint(Sender: TObject);

ShowPole;;


// щелчок в клеткеTForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

col_: integer; // номер клетки по горизонтали

row_: integer; //номер клетки по вертикали


begin

col_ := Trunc(X/WK) + 1;

row_ := Trunc(Y/HK) + 1;



if Pole[col_,row_] > 200 then

// щелчок в на месте одной из двух

// уже найденных парных картинок

exit;


// открытых клеток нет

if count = 0 then

begin

count := 1;

open1.col := col_;

open1.row := row_;



// клетка помечается как открытая

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] + 100;

Kletka(open1.col,open1.row);

exit;

end;


// открыта одна клетка, надо открыть вторую

if count = 1 then begin

open2.col := col_;

open2.row := row_;


// если открыта одна клетка и щелчок сделан

// в этой клетке, то ничего не происходит

if (open1.col = open2.col) and (open1.row = open2.row)

then exit


else begin

count := 2; // теперь открыты две клетки

Pole[open2.col,open2.row] :=

Pole[open2.col,open2.row] + 100;

Kletka(open2.col,open2.row); // отрисуем вторую клетку


// проверим, открытые картинки одинаковые?

if Pole[open1.col,open1.row] = Pole[open2.col,open2.row] then

// открыты две одинаковые картинки

begin

n := n+1;

Form1.Timer1.Enabled := True; // запустить таймер

// процедур обработки события OnTimer

// "сотрет" две одинаковые картинки

end;

end;

exit;

end;


if count = 2 then

begin

// открыты 2 клетки с разными картинками

// закроем их и откроем новую, в которой

// сделан щелчок






// закрыть открытые клетки

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] - 100;

Pole[open2.col,open2.row] := Pole[open2.col,open2.row] - 100;

Kletka(open1.col,open1.row);

Kletka(open2.col,open2.row);


// запись в open1 номера текущей клетки

open1.col := col_;

open1.row := row_;

count := 1; // счетчик открытых клеток


// открыть текущую клетки

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] + 100;

Kletka(open1.col,open1.row);

end;;


// обработка события таймераTForm1.Timer1Timer(Sender: TObject);

begin

// в массиве Pole клетки помечаются как совпавшие

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] + 100;

Pole[open2.col,open2.row] := Pole[open2.col,open2.row] + 100;

count := 0;


// отрисовать клетки

Kletka(open2.col,open2.row);

Kletka(open1.col,open1.row);


// остановка таймера

Form1.Timer1.Enabled := False;



if n = Trunc(W*H/2)

then // открыты все пары

begin

Form1.Canvas.Font.Name := 'Times New Roman';

Form1.Canvas.Font.Size := 36;

Form1.Canvas.Font.Color := clBlack;

Form1.Canvas.TextOut(70,160,'Конец игры!');

Form1.Canvas.Font.Size := 10;

Form1.Canvas.TextOut(120,210,'Ахметов И.Р., 2012');

form1.timer2.Enabled:=False;

clock:=0;

Form1.Caption:='Парные картинки';

end;

;

TForm1.Timer2Timer(Sender: TObject);

clock:= clock+1;

Form1.Caption:='Парные картинки [Игра идёт ! ' + inttostr(clock)+' Секунд'+']';

if clock>level then

begin

Timer2.Enabled:=False;

Form1.Caption:='Парные картинки';

ShowMessage('Время вышло!');

end;;


// выбор в меню команды Новая игра

procedure TForm1.N1Click(Sender: TObject);

Pole[open1.col,open1.row] := Pole[open1.col,open1.row] + 100;

Pole[open2.col,open2.row] := Pole[open2.col,open2.row] + 100;

count := 0;


// отрисовать клетки

Kletka(open2.col,open2.row);

Kletka(open1.col,open1.row);


// остановка таймера

Form1.Timer1.Enabled := False;


Canvas.Rectangle(0,0,ClientWidth,ClientHeight);

NewGame;

clock:=0;

;

TForm1.N4Click(Sender: TObject);.Show;;

TForm1.N6Click(Sender: TObject);:=50;;

TForm1.N7Click(Sender: TObject);:=30;;

TForm1.N8Click(Sender: TObject);:=18;;

TForm1.N3Click(Sender: TObject);.Show;;

.


разработка игровой программы «Парные картинки» Содержание игровая программа интерфейс Введени

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2018 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ