Для опытов с графикой, предлагаю попытаться вспомнить о старой, и многими уже давно забытой игре на Dendy - "Battle City". Для начала нам понадобится 4 изображения одного и того же танка повёрнутого на углы n*900. Эти изображения должны быть в виде png файлов размером 24х24 пикселей, с именами вида tankN.png (где N - порядковый номер изображения, начиная с 0).
![]() tank0.png |
![]() tank1.png |
![]() tank2.png |
![]() tank3.png |
Нарисовав это чудо техники, создадим новый проект, и первым же делом добавим эти файлы в ресурс при помощи "Project - Import resource file:". Наш танк должен уметь ездить по нажатию на соответствующие клавиши и ни в коем случае не выезжать за пределы поля! Приступим к написанию кода:
program Tank; const SPEED = 1; // Скорость движения танка var i : Integer; // Внешний вид танка при различных углах поворота tank : array [0..3] of image; dir : Integer; // направление X, Y : Integer; // позиция key : Integer; begin // Инициализация for i := 0 to 3 do // Подгружаем все картинки из ресурса tank[i] := LoadImage('/tank' + chr(48 + i) + '.png'); // 48 - код нуля dir := 0; // смотрим строго направо X := 48; // позиция танка по X Y := 48; // и по Y соответственно :) // Подготовка поля вывода SetColor(0, 0, 0); FillRect(0, 0, GetWidth, GetHeight); // Отрисовка и обработка ввода repeat // Стираем танк FillRect(X, Y, 24,24); // Получаем код зажатой клавиши key := GetKeyPressed; // Вот что бывает, когда нет возможности использовать case ;) if key = KE_KEY6 then begin dir := 0; X := X + SPEED; end else if key = KE_KEY8 then begin dir := 3; Y := Y + SPEED; end else if key = KE_KEY4 then begin dir := 2; X := X - SPEED; end else if key = KE_KEY2 then begin dir := 1; Y := Y - SPEED; end; // контролируем выход за границы экрана if X < 0 then X := 0; if Y < 0 then Y := 0; if X > GetWidth - 24 then X := GetWidth - 24; if Y > GetHeight - 24 then Y := GetHeight - 24; // Рисуем танк новой позиции DrawImage(tank[dir], X, Y); // Вывод этого безобразия на экран и задержка на 20 мс repaint; delay(20); until GetKeyClicked = KE_KEY0; // Закрыть приложение при нажатии "0" end. |
Целью написания полноценной игры я не задавался, так что оставлю врагов, стрельбу и препятствия на вашей совести: ;)
К содержанию
|
|
![]() |
Скачать новую версию данного учебника в одном архиве
Курс находится в процессе разработки, поэтому архив постоянно обновляется! |