русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Проект «Собери картинку»


Дата добавления: 2014-11-27; просмотров: 1173; Нарушение авторских прав


Постановка задачи.Данная программа релизует известную игру Puzzle и направлена на освоение типов TBitmap, TRect, метода CopyRect и навыков работы с двумерными массивами. Вид картинки до сборки и после перемешивания показан на рис. 32. Цель работы
с приложением – собрать картинку.

 

Рис. 32. Проект «Собери картинку»

 

Реализация. Подберите фотографию и сохраните ее в папке проекта как растровый рисунок типа bmp. Положите на форму два компонента TPaintBox, один TImage и две кнопки «Показать картинку» и «Перемешать картинку». При создании формы (процедура FormCreate) создайте компонент Puzzle класса TBitmap, загрузите
в него картинку из файла, установите размер формы, равный двум Puzzle.Width + 30 (30 пикселей на зазоры), установите размер компонентов PaintBox1 и PaintBox2, равным размеру Puzzle.

Картинку будем «резать» на 16 клеток (4 х 4). Размер одного фрагмента обозначим dx и dy.

dx:= Puzzle.Width div 4;

dy:= Puzzle.Height div 4;

Для хранения одного фрагмента картинки используйте компонент TImage. Сделайте его размер равным размеру фрагмента,
т. е. dx и dy. Сделайте Image1 невидимым.

Также задайте начальное значение переменной click1, которая подсчитывает число «кликов»:

click1 := 1; {Номер "клика": первый клик и далее нечетный клик выбирает первый фрагмент, второй – четный, выбирает второй фрагмент и меняет их местами}

Опишите глобальные переменные:

 

var

puzzle:TBitmap;

rect1,rect2:Trect;

click1,i,j,dx,dy:integer;

pole: array[1..4,1..4] of integer;

 

Обработчик кнопки «Показать картинку» выводит исходный рисунок в Paintbox1.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

paintbox1.Canvas.Draw(0,0,puzzle);

end;

 

В следующей процедуре создаем перемешанный рисунок. Разбиваем рисунок на 16 квадратных фрагментов и перемешиваем их. «Перемешанный» рисунок помещаем в Paintbox2.



procedure TForm1.Button2Click(Sender: TObject);

var k,n,x,y:integer;

begin

{Заполняем двумерный массив нyлями. С помощью массива будем определять, помещен ли в соответствующую клетку фрагмент рисунка. Если в массиве 0, то это свободное поле, где еще не поставлен фрагмент.}

for i := 1 to 4 do

for j := 1 to 4 do

pole[i,j]:=0; //Весь массив заполнили нулями

for i := 1 to 4 do

for j := 1 to 4 do

begin // Ищем свободное поле

repeat

k:=random(4)+1;

n:=random(4)+1;

until pole[k,n]=0;

pole[k,n]:=1; //Заполняем его единицей

x:=(j-1)*dx; //Координаты фрагмента, который мы

//скопируем из PaintBox1 в Paintbox2

//на случайно выбранное место

y:=(i-1)*dy;

rect1:=bounds(x,y,dx,dy); //Границы этого фрагмента

//сохраняем в переменной rect1

x:=(n-1)*dx; //Координаты случайно выбранного

y:=(k-1)*dy; // фрагмента в Paintbox2

rect2:=bounds(x,y,dx,dy); //Границы этого фрагмента

//сохраняем в переменной rect2

//Копируем фрагмент из Paintbox1 в Paintbox2

paintbox2.Canvas.CopyRect(rect2,paintbox1.Canvas,rect1);

end;

//Чертим клетки на Paintbox2

with paintbox2.Canvas do

begin

pen.Color:=clblack;

pen.Width:=1;


for i:=1 to 3 do

begin

moveto(0, dy*i);

lineto(paintbox2.Width,dy*i);

moveto(dx*i,0);

lineto(dx*i,paintbox2.Height);

end;

end; end;

 

В обработчике события OnMouseDown на компоненте PaintBox2 напишите следующий код.

 

procedure TForm2.PaintBox2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var u,v:integer; rect3:Trect;

procedure XYtoUV(x,y:integer; var u,v:integer);

//Процедура находит номер строки и столбца, в которых

// находится фрагмент c координатами Х и Y

begin

u:=(x div dx)*dx;

v:=(y div dy)*dy;

end;

begin

XYtoUV(x,y,u,v);

rect2:=bounds(0,0,dx,dy); //Границы фрагмента,

// скопированного в Image1

// Если это нечетный "клик",

if click1 mod 2=1 then

begin

//Копируем фрагмент в Image1.

rect1:=bounds(u,v,dx,dy);

image1.Canvas.CopyRect(rect2,paintbox2.Canvas,rect1);

end

else

// Если это четный "клик"

begin

//Меняем местами два фрагмента

rect3:=bounds(u,v,dx,dy);


paintbox2.Canvas.CopyRect(rect1,paintbox2.Canvas,rect3);

paintbox2.Canvas.CopyRect(rect3,Image1.Canvas,rect2);

end;

click1:=click1+1;

end;

 

Задание 1. На титульном листе сделайте меню, в котором заведите позиции «Помощь играющему» и «Выбор картинки из файлов». Предложите на выбор около 5 картинок.

 

Задание 2. Сделайте программную проверку правильности сборки картинки с положительной похвалой.

 

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

 

Задание 4.Положите таймер и сделайте на форме свой таймер с тем, чтобы на сборку картинки установить ограничение по времени.

 


 



<== предыдущая лекция | следующая лекция ==>
Проект «Угадай картинку» | Сортировка массива


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.332 сек.