MIDlet Pascal
Поиск по сайту
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Яндекс.Метрика

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Четверг, 15.11.2018, 00.57.14
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №22.1 - Танки - Инициализация, переменные, отрисовка поля
Урок №1 Танки - инициализация, переменные, отрисовка поля
Привет всем!Сегодня мы начнем серию уроков по созданию примитивной копии игры Battle City!
И так в начале мы опишем игру, что в ней должно быть:

I.Поле
├1.Блоки кирпичные которые взрываются
├2.Блоки каменные которые невозможно взорвать
├3.Пустые части поля
├4.База "орел"
II.Танк игрока
├1.Двигаемся в навправлении нажатой клавиши
├2.умеет стрелять
├3.Блоки ему мешают проехать
III.ТАнк противника
├1.Двигается в случайном направлении
├2.Постоянно стреляет
├3.Блоки ему мешают проехать
├4.Может убить танк игрока
IV.Снаряд
├1.Убивает любой танк противника, не союзника
├2.летит по прямой линии
├3.при ударе о что либо исчезает воздействуя на объект

И так.План у нас есть, это уже пол дела.Я код максимально доступно прокоментировал
Для самого начала создадим все переменные и типы переменных:

type  tank=record //Создаем тип "танк"
      x,y:integer;//положение
      way:integer;//направление
      end;
      bellet=record  //тип пуля
      x,y,way:integer; //положение в пространстве
      shot:boolean;//выстрел есть?
      end;
      
var eagle:array[1..2] of image;//Орел
    tankp,tanke:array[1..4] of image;//танки
    player:tank;//игрок
    enemy:array[1..3] of tank;//противник
    pb:bellet; //Выстрел игрока
    eb:array[1..3] of bellet;//выстрелы противника
    block1,block2,belleti:array[1..4] of image;//набор изображений
    field:array[1..21,1..30] of integer;//поле игры
    i,j,key,goi:integer;//стандартный набор
    res:resource;//Ресурс
    s:string;//стринга
    go:boolean;//едем или нет?

Конечно же мы не все используем в данном уроке, но все эти мы используем в дальнейшем по любому!
И так отлично теперь загрузим ресурс изображений


img.png

bellet.png

eagle.png

А так-же в программе Блокнот или gedit создадим файл который содержит данные о поле
Файл level.mp
_____________________
000000000000000000000
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101000000000101010
000000010101010000000
020110000000000011020
111110000000000011111
000000000000000000000
101010111222111010101
000000000000000000000
111110000000000011111
020110000000000011020
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010101010101010101010
010100000101000001010
000100000000000001000
000100000111000001000
000000000131000000000

_____________________
Отлично!Теперь все ресурсы уже загружены!Теперь делаем инициализацию переменных

  //инициализация
  for i:=1 to 2 do eagle[i]:=ImageFromImage(LoadImage('/eagle.png'),10*(i-1),0,10,10);//ресурс Орлов
  for i:=1 to 4 do tankp[i]:=ImageFromImage(LoadImage('/img.png'),10*(i-1),0,10,10);//Ресурс танков игрока
  for i:=1 to 4 do tanke[i]:=ImageFromImage(LoadImage('/img.png'),10*(i-1),10,10,10);//Ресурс танков противника
  for i:=1 to 4 do //Ресурс блоков (в том числе и анимация)
    begin
      block1[i]:=ImageFromImage(LoadImage('/img.png'),10*(i-1),20,10,10);
      block2[i]:=ImageFromImage(LoadImage('/img.png'),10*(i-1),30,10,10);
    end;
  belleti[1]:=ImageFromImage(LoadImage('/bellet.png'),0,0,3,6);//ресурс снарядов
  belleti[2]:=ImageFromImage(LoadImage('/bellet.png'),3,0,6,3);
  belleti[3]:=ImageFromImage(LoadImage('/bellet.png'),9,0,3,6);
  belleti[4]:=ImageFromImage(LoadImage('/bellet.png'),3,3,6,3);
    res:=OpenResource('/level.mp'); //открываем карту уровня
    for i:=1 to 30 do //Считываем с файла все данные и записываем в переменную field
      begin
        s:=ReadLine(res);
        for j:=1 to 21 do
          field[j,i]:=stringtointeger(copy(s,j-1,j));
      end;
    //Инициализация закончена

Как видите мы загрузили все изображения, и разбили их на маленькие спрайты для игры, а так-же считали данные об игровом поле и записали его в переменную field.Шифровка такая:
0 - пустое пространство
1 - разбиваемый блок
2 - не разбиваемый блок
3 - орел

Примечание:
  function ImageFromImage(i:image;x,y,width,height:integer):image;
Эта функция возвращает из изображения i изображение по координатам x,y и размерами width,height

Теперь карта игрового поля содержится в оперативной памяти.И мы можем получить в любой момент данные о нем или же их поменять так как нам надо.Например давайте теперьсоздадим процедуру которая будет отрисовывать экран и назовем её paint

Procedure paint; //процедура отрисовки
begin
  SetColor(0,0,0);//Черный
  FillRect(0,0,240,300);//зарисовываем поле
  SetColor(100,100,100);//Серый
  FillRect(210,0,30,300);//рисуем бар
  for i:=1 to 21 do //отрисовка поля
    for j:=1 to 30 do
      begin
        if field[i,j]=1 then DrawImage(block1[1], (i-1)*10, (j-1)*10); //блок 1
        if field[i,j]=2 then DrawImage(block2[1], (i-1)*10, (j-1)*10); //блок 2
        if field[i,j]=3 then DrawImage(eagle[1], (i-1)*10, (j-1)*10); //орел
      end;
  repaint;//отрисовка
end;

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

repeat//главный цикл игры
  paint;//отрисовываем поле
until false;

Ну вот!Все готово.Теперь отрисовывается игровое поле!

← Урок №21Урок №22.2 →
Если вы нашли ошибки/очепятки в тексте то сообщите о них на форуме
А также можете заказать программу/игру на этой странице

www.parkflyer.ru - радиоуправляемые модели, радиоуправляемые модели самолетов, магазин радиоуправляемых моделей
Роспись стен, скульптуры на заказ
Wladymyr © 2012-2018
Создать бесплатный сайт с uCoz