Реферат на тему Игра Мозайка на Делфи Delphi
Работа добавлена на сайт bukvasha.net: 2013-11-23Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Министерство образования и науки Российской Федерации
Курский государственный технический университет
Кафедра ПО и ВТ
КУРСОВАЯ РАБОТА
по дисциплине «Программирование на языках высокого уровня»
ИГРА «МОЗАЙКА»
Выполнил: студентка группы ПО-51
Елизавета Королева
студентка группы ПО-51
Анастасия Зиновьева
Проверил: преподаватель Петрик Е. А.
Курск 2006
СОДЕРЖАНИЕ
1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 4
1.1 Введение. 4
1.2 Основания для разработки. 4
1.3 Назначение разработки. 4
1.3.1 Функциональное и эксплуатационное назначение изделия. 4
1.3.1.1 Перечень требований пользователя к программному обеспечению.. 4
1.3.1.2 Рассмотренные альтернативы.. 4
1.3.2 Требования к программе или программному изделию.. 5
1.3.2.1 Стандарты.. 5
1.3.2.2 Программная совместимость. 5
1.3.2.3 Требования к составу и параметрам технических средств. 5
1.3.2.4 Входные данные. 5
1.3.2.5 Процесс обработки. 6
1.3.2.6 Выходные данные. 6
1.3.2.7 Результирующие компоненты изделия. 6
1.3.2.8 Носители информации. 6
1.3.2.9 Безопасность и секретность. 7
1.3.2.10 Требования к надежности. 7
1.3.2.11 Рестарт. 7
1.3.2.12 Мобильность. 7
1.3.2.13 Требования к программной документации. 7
1.4 Стадии и этапы разработки. 7
1.5 Порядок контроля и приемки. 8
2.РАБОЧИЙ ПРОЕКТ. 8
2.1 Введение. 8
2.2 Функциональные и эксплуатационные характеристики изделия. 8
2.2.1 Программные ограничения. 8
2.2.2 Требования к составу и параметрам технических средств. 9
2.2.3 Результирующие компоненты изделия. 9
2.2.4 Требования к надежности. 9
2.2.5 Удобство эксплуатации. 9
2.2.6 Мобильность. 10
2.3 Описание модулей. 10
2.3.1 Модуль Unit1. 10
2.3.1.1 Таблица компонентов. 10
2.3.1.2 Внешний вид формы.. 10
2.3.1.2 Входные данные. 11
2.3.1.3 Промежуточные данные. 11
2.3.1.4 Выходные данные. 11
2.3.1.5 Блок-схемы алгоритмов. 11
2.3.1.6 Текст модуля. 11
2.3.2 Модуль Unit2. 12
2.3.2.1 Входные данные. 12
2.3.2.2 Промежуточные данные. 12
2.3.2.3 Выходные данные. 12
2.3.2.4 Блок-схемы алгоритмов. 12
2.3.2.5 Текст модуля. 12
ПРИЛОЖЕНИЯ.. 13
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ.. 37
- если картинка собрана полностью, выводится сообщение о завершении игры;
- имеется возможность выбирать картинки;
- можно начинать игру заново.
1.3.1.2 Рассмотренные альтернативы
При постановке задачи на разработку программы «Мазайка» были рассмотрены следующие альтернативы:
- Программная платформа.
Рассматривались операционные системы Windows и Linux. Была выбрана система Windows в связи с широчайшим ее распространением, доступностью и наличием гибких средств разработки программного обеспечения под эту платформу.
- Средства разработки. Были рассмотрены следующие средства разработки: Delphi и С++ Builder. Был выбран Borland Delphi7. Выбор обоснован популярностью и доступностью данного программного обеспечения.
Разработка программной документации и программы должна производиться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.
1.3.2.2 Программная совместимость
Данная программа должна работать автономно под управлением
операционных систем Windows 98, Windows ME, Windows 2000, Windows XP.
1.3.2.3 Требования к составу и параметрам технических средств
Программный продукт должен работать на компьютерах со следующими характеристиками:
· объем ОЗУ 512 Мб;
· объем жесткого диска 40 Гб;
· микропроцессор Intel Celeron 400 МГц;
· монитор 17” с разрешением 1024*768;
· звуковая карта.
1.3.2.4 Входные данные
Входными данными программы являются:
· выбранная картинка;
· сигналы манипулятора «мышь»;
1.3.2.5 Процесс обработки
· При запуске программного изделия должно происходить открытие программной оболочки (формы).
1.3.2.6 Выходные данные
Выходными данными программы являются:
· сообщение о выигрыше, если картинка собрана.
1.3.2.7 Результирующие компоненты изделия
В комплект поставки программного продукта должны входить следующие
компоненты:
· исполнительный файл программы;
· рабочие модули программы;
· программная документация на изделие.
1.3.2.8 Носители информации
Программа поставляется на дискете размером 3,5 дюйма и объемом 1,44 Мб.
1.3.2.9 Безопасность и секретность
Информация, содержащаяся в изделии, не является секретной, поэтому программа не требует защиты.
1.3.2.10 Требования к надежности
Программа должна пройти функциональное тестирование и успешно отработать на всех тестах. Тесты разрабатываются на этапе выполнения рабочего проекта.
1.3.2.11 Рестарт
Восстановления данных при программном или аппаратном сбоях не
предусматривается.
1.3.2.12 Мобильность
Программа должна свободно переноситься с одного компьютера на другой при помощи соответствующих носителей информации.
1.3.2.13 Требования к программной документации
Программная документация должна разрабатываться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.
Программная документация должна включать следующие документы:
· Техническое задание;
· Рабочий проект.
В приложении к документу «Рабочий проект» должен быть приведен листинг исходных текстов программы и блок-схемы алгоритмов.
· Техническое задание;
· Рабочий проект.
На стадии «Техническое задание» проводится постановка задачи, разработка требований к программному изделию, изучение литературы по задаче и оформление документа «Техническое задание».
На стадии «Рабочий проект» проводится разработка схем алгоритмов для каждого из функциональных модулей, физическое проектирование программного изделия, разработка тестов, тестирование и отладка программных модулей. В заключение данного этапа оформляется документ «Рабочий проект».
Приемка программного изделия осуществляется при сдаче документально оформленных этапов разработки, передаче программного изделия и проведении испытаний на основе установленных тестов.
· объем ОЗУ не менее 32 Мб;
· объем жесткого диска не менее 900 Мб;
· микропроцессор с тактовой частотой не менее 133 МГц;
· монитор с глубиной цвета 16 бит;
· дисковод floppy-дисков.
Для бесперебойной работы программы рекомендуем следующие параметры компьютера:
· объем ОЗУ 128 Мб;
· объем жесткого диска 3 Гб;
· микропроцессор с тактовой частотой 333 МГц.
· рабочие модули программы;
· программная документация на изделие.
2.3.1.2 Внешний вид формы
2.3.1.2 Входные данные
положение фишек;
2.3.1.3 Промежуточные данные
проверка на наличие «собранности» мозайки;
2.3.1.4 Выходные данные
результат игры.
2.3.1.5 Блок-схемы алгоритмов
Приложение А, стр. 13
2.3.1.6 Текст модуля
Приложение Б, стр. 25
Приложение Б
Листинг модуля Unit1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, ExtDlgs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
C1: TMenuItem;
N5: TMenuItem;
OpenPictureDialog1: TOpenPictureDialog;
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormPaint(Sender: TObject);
procedure Load;
procedure Refresh;
procedure New;
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
H=4;
W=4; // размер поля 4*4 клетки
var
widt,heig:integer; // ширина и высота одной клетки
pole:array[1..H,1..W] of byte; // свойства поля
zx,zy:integer; // координаты пустой клетки
pos:array[1..H, 1..W] of byte =(( 1, 2, 3, 4),( 5, 6, 7, 8),( 9,10,11,12),(13,14,15, 0)); // выигрышный вариант
pic:TBitmap; // сама картинка
procedure TForm1.New;
var
f: string[20]; // файл загружаемой картинки
i,j: integer;
begin
f:='picture10.bmp';
try
pic.LoadFromFile(f);
except
on EFopenError do
begin
ShowMessage('Ошибка загрузки файла');
Form1.Close;
end;
end;
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
// проверка на факт выигрыша
function GameOver: boolean;
var
rw,cl:integer;
i:integer;
begin
rw:=1;
cl:=1;
GameOver:=True; // клети расставлены правильно
for i:=1 to 15 do
begin
if pole[rw,cl]<>i then
begin
GameOver:=False;
break;
end;
if cl<4
then inc(cl)
else begin
cl:=1;
inc(rw);
end;
end;
end;
// ход в соседнюю пустую клетку
procedure Go(clickx,clicky:integer);
var
r:integer;
begin
if not ((abs(clickx-zx)=1) and (clicky-zy=0) or // проверка на возможность хода
(abs(clicky-zy)=1) and (clickx-zx=0))
then exit;
pole[zy,zx]:=Pole[clicky,clickx]; // осуществим переход из [x,y] в [zx,zy]
pole[clicky,clickx]:=0;
zx:=clickx;
zy:=clicky;
Form1.Load; // перерисовка поля
if GameOver then
begin
pole[4,4]:=16;
Form1.Load;
r:=MessageDlg('Вы выиграли!'+ #13+'Сыграем ещё?',mtInformation,[mbYes,mbNo],0);
if r=mrNo then Form1.Close;
Form1.New;
end;
end;
// клик по клетке
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y:Integer);
var
clickx,clicky:integer; // координаты кликаемой клетки
begin
clickx:=Trunc(X/widt)+1; // переведём щелчок мыши в координаты клетки
clicky:=Trunc(Y/heig)+1;
Go(clickx,clicky);
end;
procedure TForm1.Load; // отвечает за загрузку поля
var
into,outof:Trect; // ввод и вывод
lx,ly:integer; // координаты верхнего левого угла ввода
i,j:integer;
begin
for i:=1 to W do // отслеживает содержимое клеток
for j:=1 to H do
begin
ly:=((pole[i,j]-1) div W) * heig; // присвоим координатам верхнего левого угла ввода номер картинки
lx:=((pole[i,j]-1) mod W) * widt;
into:=Bounds(lx,ly,widt,heig);
outof:=Bounds((j-1)*widt,(i-1)*heig,widt,heig);
if pole[i,j]<>0
then Canvas.CopyRect(outof,pic.Canvas,into)
else Canvas.Rectangle((j-1)*widt,(i-1)*heig,j*widt,i*heig);
end;
end;
procedure TForm1.refresh; // "тусует" фрагменты картинки
var
x1,y1:integer; // координаты пустой клетки
x2,y2:integer; // взять картинку из этой координаты и поменять её с пустой
n:integer; // направление возможного хода
i:integer;
begin
x1:=4;
y1:=4;
randomize;
for i:=1 to 150 do // варианты расстановки
begin
repeat
x2:=x1;
y2:=y1;
n:=random(4)+1;
case n of
1:dec(x2);
2:inc(x2);
3:dec(y2);
4:inc(y2);
end;
until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);
pole[y1,x1]:=pole[y2,x2]; // определим фрагмент перемещения
pole[y2,x2]:=0;
x1:=x2;
y1:=y2;
end;
zx:=x1; // координаты пустой клетки
zy:=y1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pic:=TBitMap.Create;
New;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Load;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N2Click(Sender: TObject);
var i,j: integer;
begin
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
procedure TForm1.C1Click(Sender: TObject);
begin
showmessage('Программа к курсовому проекту');
end;
procedure TForm1.N5Click(Sender: TObject);
var
f: string[20]; // файл загружаемой картинки
i,j: integer;
begin
openpicturedialog1.Execute;
try
pic.LoadFromFile(openpicturedialog1.FileName);
except
on EFopenError do
begin
ShowMessage('Ошибка загрузки файла');
Form1.Close;
end;
end;
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
end.
Курский государственный технический университет
Кафедра ПО и ВТ
КУРСОВАЯ РАБОТА
по дисциплине «Программирование на языках высокого уровня»
ИГРА «МОЗАЙКА»
Выполнил: студентка группы ПО-51
Елизавета Королева
студентка группы ПО-51
Анастасия Зиновьева
Проверил: преподаватель Петрик Е. А.
Курск 2006
СОДЕРЖАНИЕ
1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 4
1.1 Введение. 4
1.2 Основания для разработки. 4
1.3 Назначение разработки. 4
1.3.1 Функциональное и эксплуатационное назначение изделия. 4
1.3.1.1 Перечень требований пользователя к программному обеспечению.. 4
1.3.1.2 Рассмотренные альтернативы.. 4
1.3.2 Требования к программе или программному изделию.. 5
1.3.2.1 Стандарты.. 5
1.3.2.2 Программная совместимость. 5
1.3.2.3 Требования к составу и параметрам технических средств. 5
1.3.2.4 Входные данные. 5
1.3.2.5 Процесс обработки. 6
1.3.2.6 Выходные данные. 6
1.3.2.7 Результирующие компоненты изделия. 6
1.3.2.8 Носители информации. 6
1.3.2.9 Безопасность и секретность. 7
1.3.2.10 Требования к надежности. 7
1.3.2.11 Рестарт. 7
1.3.2.12 Мобильность. 7
1.3.2.13 Требования к программной документации. 7
1.4 Стадии и этапы разработки. 7
1.5 Порядок контроля и приемки. 8
2.РАБОЧИЙ ПРОЕКТ. 8
2.1 Введение. 8
2.2 Функциональные и эксплуатационные характеристики изделия. 8
2.2.1 Программные ограничения. 8
2.2.2 Требования к составу и параметрам технических средств. 9
2.2.3 Результирующие компоненты изделия. 9
2.2.4 Требования к надежности. 9
2.2.5 Удобство эксплуатации. 9
2.2.6 Мобильность. 10
2.3 Описание модулей. 10
2.3.1 Модуль Unit1. 10
2.3.1.1 Таблица компонентов. 10
2.3.1.2 Внешний вид формы.. 10
2.3.1.2 Входные данные. 11
2.3.1.3 Промежуточные данные. 11
2.3.1.4 Выходные данные. 11
2.3.1.5 Блок-схемы алгоритмов. 11
2.3.1.6 Текст модуля. 11
2.3.2 Модуль Unit2. 12
2.3.2.1 Входные данные. 12
2.3.2.2 Промежуточные данные. 12
2.3.2.3 Выходные данные. 12
2.3.2.4 Блок-схемы алгоритмов. 12
2.3.2.5 Текст модуля. 12
ПРИЛОЖЕНИЯ.. 13
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ.. 37
1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1.1 Введение
Разработка собственных приложений в настоящее время вызывает интерес у многих людей, чьи умения в сфере разработки позволяют осуществить поставленную задачу. Я решил написать игровое приложение, главная задача которого заставить пользователя отвлечься от проблем повседневных, т.е. развлечься, что, собственно, является задачей всех игр.1.2 Основания для разработки
Основанием для разработки программы является задание к курсовой работе по предмету «Программирование на языках высокого уровня».1.3 Назначение разработки
1.3.1 Функциональное и эксплуатационное назначение изделия
1.3.1.1 Перечень требований пользователя к программному обеспечению
Игра «Мазайка» должна обеспечивать следующее:- если картинка собрана полностью, выводится сообщение о завершении игры;
- имеется возможность выбирать картинки;
- можно начинать игру заново.
1.3.1.2 Рассмотренные альтернативы
При постановке задачи на разработку программы «Мазайка» были рассмотрены следующие альтернативы:
- Программная платформа.
Рассматривались операционные системы Windows и Linux. Была выбрана система Windows в связи с широчайшим ее распространением, доступностью и наличием гибких средств разработки программного обеспечения под эту платформу.
- Средства разработки. Были рассмотрены следующие средства разработки: Delphi и С++ Builder. Был выбран Borland Delphi7. Выбор обоснован популярностью и доступностью данного программного обеспечения.
1.3.2 Требования к программе или программному изделию
1.3.2.1 СтандартыРазработка программной документации и программы должна производиться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.
1.3.2.2 Программная совместимость
Данная программа должна работать автономно под управлением
операционных систем Windows 98, Windows ME, Windows 2000, Windows XP.
1.3.2.3 Требования к составу и параметрам технических средств
Программный продукт должен работать на компьютерах со следующими характеристиками:
· объем ОЗУ 512 Мб;
· объем жесткого диска 40 Гб;
· микропроцессор Intel Celeron 400 МГц;
· монитор 17” с разрешением 1024*768;
· звуковая карта.
1.3.2.4 Входные данные
Входными данными программы являются:
· выбранная картинка;
· сигналы манипулятора «мышь»;
1.3.2.5 Процесс обработки
· При запуске программного изделия должно происходить открытие программной оболочки (формы).
1.3.2.6 Выходные данные
Выходными данными программы являются:
· сообщение о выигрыше, если картинка собрана.
1.3.2.7 Результирующие компоненты изделия
В комплект поставки программного продукта должны входить следующие
компоненты:
· исполнительный файл программы;
· рабочие модули программы;
· программная документация на изделие.
1.3.2.8 Носители информации
Программа поставляется на дискете размером 3,5 дюйма и объемом 1,44 Мб.
1.3.2.9 Безопасность и секретность
Информация, содержащаяся в изделии, не является секретной, поэтому программа не требует защиты.
1.3.2.10 Требования к надежности
Программа должна пройти функциональное тестирование и успешно отработать на всех тестах. Тесты разрабатываются на этапе выполнения рабочего проекта.
1.3.2.11 Рестарт
Восстановления данных при программном или аппаратном сбоях не
предусматривается.
1.3.2.12 Мобильность
Программа должна свободно переноситься с одного компьютера на другой при помощи соответствующих носителей информации.
1.3.2.13 Требования к программной документации
Программная документация должна разрабатываться согласно ЕСПД, ГОСТ 19.701-90, ГОСТ 2.304-88.
Программная документация должна включать следующие документы:
· Техническое задание;
· Рабочий проект.
В приложении к документу «Рабочий проект» должен быть приведен листинг исходных текстов программы и блок-схемы алгоритмов.
1.4 Стадии и этапы разработки
Выполнение разработки должно включать две стадии:· Техническое задание;
· Рабочий проект.
На стадии «Техническое задание» проводится постановка задачи, разработка требований к программному изделию, изучение литературы по задаче и оформление документа «Техническое задание».
На стадии «Рабочий проект» проводится разработка схем алгоритмов для каждого из функциональных модулей, физическое проектирование программного изделия, разработка тестов, тестирование и отладка программных модулей. В заключение данного этапа оформляется документ «Рабочий проект».
1.5 Порядок контроля и приемки
Тесты должны быть разработаны на этапе рабочего проектирования программного изделия.Приемка программного изделия осуществляется при сдаче документально оформленных этапов разработки, передаче программного изделия и проведении испытаний на основе установленных тестов.
2.РАБОЧИЙ ПРОЕКТ
2.1 Введение
Приложение представляет собой игру «Мазайка», для которой не требуется особое оформление в связи с тем, что рабочее поле полностью закрывается загруженной картинкой. Игра затягивает пользователя, прежде всего популярностью близкой игры «Пятнашки», которая не так давно была очень популярна.2.2 Функциональные и эксплуатационные характеристики изделия
2.2.1 Программные ограничения
Данная программа должна работать автономно под управлением операционных систем Windows 95, Windows 98, Windows ME, NT 4.0, Windows 2000, Windows XP.2.2.2 Требования к составу и параметрам технических средств
Для работы программного изделия требуется персональный компьютер, обладающий следующими параметрами:· объем ОЗУ не менее 32 Мб;
· объем жесткого диска не менее 900 Мб;
· микропроцессор с тактовой частотой не менее 133 МГц;
· монитор с глубиной цвета 16 бит;
· дисковод floppy-дисков.
Для бесперебойной работы программы рекомендуем следующие параметры компьютера:
· объем ОЗУ 128 Мб;
· объем жесткого диска 3 Гб;
· микропроцессор с тактовой частотой 333 МГц.
2.2.3 Результирующие компоненты изделия
· исполнительный файл программы Mazaika.exe;· рабочие модули программы;
· программная документация на изделие.
2.2.4 Требования к надежности
Программа прошла функциональное тестирование и успешно отработала на всех тестах. Тесты разрабатывались на всех этапах выполнения проекта.2.2.5 Удобство эксплуатации
Программа содержит интуитивный интерфейс, позволяющий без дополнительных подсказок запустить игру.2.2.6 Мобильность
Для копирования программы с дискеты на компьютер необходимо скопировать содержимое папки «Курсовик» на жесткий диск компьютера.2.3 Описание модулей
2.3.1 Модуль Unit1
2.3.1.1 Таблица компонентов № | Название | Страница палитры компонентов | Изменяемые свойства | Значение |
1 | Form1 | - | Caption | Мазайка |
AutoSize | false | |||
2 | MainMenu1 | Standard | Items | Файл Открыть Новая игра Выход О программе |
3 | OpenPictureDialog1 | Dialogs |
2.3.1.2 Входные данные
положение фишек;
2.3.1.3 Промежуточные данные
проверка на наличие «собранности» мозайки;
2.3.1.4 Выходные данные
результат игры.
2.3.1.5 Блок-схемы алгоритмов
Приложение А, стр. 13
2.3.1.6 Текст модуля
Приложение Б, стр. 25
ПРИЛОЖЕНИЯ
Приложение АПриложение Б
Листинг модуля Unit1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, ExtDlgs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
C1: TMenuItem;
N5: TMenuItem;
OpenPictureDialog1: TOpenPictureDialog;
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormPaint(Sender: TObject);
procedure Load;
procedure Refresh;
procedure New;
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
H=4;
W=4; // размер поля 4*4 клетки
var
widt,heig:integer; // ширина и высота одной клетки
pole:array[1..H,1..W] of byte; // свойства поля
zx,zy:integer; // координаты пустой клетки
pos:array[1..H, 1..W] of byte =(( 1, 2, 3, 4),( 5, 6, 7, 8),( 9,10,11,12),(13,14,15, 0)); // выигрышный вариант
pic:TBitmap; // сама картинка
procedure TForm1.New;
var
f: string[20]; // файл загружаемой картинки
i,j: integer;
begin
f:='picture10.bmp';
try
pic.LoadFromFile(f);
except
on EFopenError do
begin
ShowMessage('Ошибка загрузки файла');
Form1.Close;
end;
end;
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
// проверка на факт выигрыша
function GameOver: boolean;
var
rw,cl:integer;
i:integer;
begin
rw:=1;
cl:=1;
GameOver:=True; // клети расставлены правильно
for i:=1 to 15 do
begin
if pole[rw,cl]<>i then
begin
GameOver:=False;
break;
end;
if cl<4
then inc(cl)
else begin
cl:=1;
inc(rw);
end;
end;
end;
// ход в соседнюю пустую клетку
procedure Go(clickx,clicky:integer);
var
r:integer;
begin
if not ((abs(clickx-zx)=1) and (clicky-zy=0) or // проверка на возможность хода
(abs(clicky-zy)=1) and (clickx-zx=0))
then exit;
pole[zy,zx]:=Pole[clicky,clickx]; // осуществим переход из [x,y] в [zx,zy]
pole[clicky,clickx]:=0;
zx:=clickx;
zy:=clicky;
Form1.Load; // перерисовка поля
if GameOver then
begin
pole[4,4]:=16;
Form1.Load;
r:=MessageDlg('Вы выиграли!'+ #13+'Сыграем ещё?',mtInformation,[mbYes,mbNo],0);
if r=mrNo then Form1.Close;
Form1.New;
end;
end;
// клик по клетке
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y:Integer);
var
clickx,clicky:integer; // координаты кликаемой клетки
begin
clickx:=Trunc(X/widt)+1; // переведём щелчок мыши в координаты клетки
clicky:=Trunc(Y/heig)+1;
Go(clickx,clicky);
end;
procedure TForm1.Load; // отвечает за загрузку поля
var
into,outof:Trect; // ввод и вывод
lx,ly:integer; // координаты верхнего левого угла ввода
i,j:integer;
begin
for i:=1 to W do // отслеживает содержимое клеток
for j:=1 to H do
begin
ly:=((pole[i,j]-1) div W) * heig; // присвоим координатам верхнего левого угла ввода номер картинки
lx:=((pole[i,j]-1) mod W) * widt;
into:=Bounds(lx,ly,widt,heig);
outof:=Bounds((j-1)*widt,(i-1)*heig,widt,heig);
if pole[i,j]<>0
then Canvas.CopyRect(outof,pic.Canvas,into)
else Canvas.Rectangle((j-1)*widt,(i-1)*heig,j*widt,i*heig);
end;
end;
procedure TForm1.refresh; // "тусует" фрагменты картинки
var
x1,y1:integer; // координаты пустой клетки
x2,y2:integer; // взять картинку из этой координаты и поменять её с пустой
n:integer; // направление возможного хода
i:integer;
begin
x1:=4;
y1:=4;
randomize;
for i:=1 to 150 do // варианты расстановки
begin
repeat
x2:=x1;
y2:=y1;
n:=random(4)+1;
case n of
1:dec(x2);
2:inc(x2);
3:dec(y2);
4:inc(y2);
end;
until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);
pole[y1,x1]:=pole[y2,x2]; // определим фрагмент перемещения
pole[y2,x2]:=0;
x1:=x2;
y1:=y2;
end;
zx:=x1; // координаты пустой клетки
zy:=y1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pic:=TBitMap.Create;
New;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Load;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N2Click(Sender: TObject);
var i,j: integer;
begin
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
procedure TForm1.C1Click(Sender: TObject);
begin
showmessage('Программа к курсовому проекту');
end;
procedure TForm1.N5Click(Sender: TObject);
var
f: string[20]; // файл загружаемой картинки
i,j: integer;
begin
openpicturedialog1.Execute;
try
pic.LoadFromFile(openpicturedialog1.FileName);
except
on EFopenError do
begin
ShowMessage('Ошибка загрузки файла');
Form1.Close;
end;
end;
heig:=Pic.Height div H; // Размер клетки
widt:=Pic.Width div W;
ClientWidth:=widt*W; //Размер формы по размеру картинки
ClientHeight:=heig*H;
for i:=1 to H do
for j:=1 to W do
pole[i,j]:=pos[i,j];
Form1.Refresh; // перемещение клеток
Form1.Load; // загрузка поля
end;
end.