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

Статистика

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


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

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Суббота, 24.02.2018, 14.57.31
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №22.3 - Танки - Пли!
Урок №3 - Танки - Выстрел
Здравствуйте!В этом уроке мы дадим игроку право стрелять!
И так первое что мы добавим так это саму команду для стрельбы, и стелять будем нажав клавишу 5!То есть все что на м нужно, это добавить вот такой небольшой код:

  if (key=KE_KEY5) and (not pb.shot) then //если нажали выстрелить и выстрела нет, тогда
    begin
      pb.shot:=true; //появился выстрел
      pb.way:=player.way; //направление выстрела, это направление танка игрока
      pb.x:=player.x/10+1;//также положение
      pb.y:=player.y/10+1;
    end;

В коментариях, все доступно объяснил, вроде ничего сложного в этом нет!И чуть не забыл, запомним эти шифровки направления:
1 - вверх
2 - влево
3 - вниз
4 - вправо

Самый сложный код это будет обработка полета снаряда и анимации взрыва.Для того что бы работала анимация, теперь сделаем еще коды взрыва блоков, тоисть:
11 - 1 блок 1 спрайт
12 - 1 блок 2 спрайт
13 - 1 блок 3 спрайт
21 - 2 блок 1 спрайт
22 - 2 блок 2 спрайт
23 - 2 блок 3 спрайт

Мы их буде размещать в переменной field что бы приложение могло вывести анимацию взрыва на экран
Вот код обработки полета снаряда:

    if pb.shot then //если есть выстрел
      begin
        if
(pb.way=1) and (pb.y-1>0) then //если путь снаряда направлен на 1 и есть куда лететь, тогда
          begin
            if
field[pb.x,pb.y-1]<>0 then pb.shot:=false; //если есть преграда, закнчиваем выстрел
            if field[pb.x,pb.y-1]=1 then field[pb.x,pb.y-1]:=11; //если преграда - это блок 1 тогда взрываем его
            if field[pb.x,pb.y-1]=2 then field[pb.x,pb.y-1]:=21; //если преграда - это блок 2 тогда делаем анимацию взрыва
            if field[pb.x,pb.y-1]=3 then //Если преграда - это орел
              begin //тогда
                Delay(5000); //Делаем задержку в 5 секунд
                halt; //закрываем мидлет
              end;
            pb.y:=pb.y-1; //двигаем снаряд в направлении
          end else
            if
(pb.y-1=0) and (pb.way=1) then pb.shot:=false; //если напрвление вверх, а некуда лететь, тогда выстрел завершен
        if (pb.way=2) and (pb.x-1>0) then //аналогично
          begin
            if
field[pb.x-1,pb.y]<>0 then pb.shot:=false;
            if field[pb.x-1,pb.y]=1 then field[pb.x-1,pb.y]:=11;
            if field[pb.x-1,pb.y]=2 then field[pb.x-1,pb.y]:=21;
            if field[pb.x-1,pb.y]=3 then
              begin

                Delay(5000);
                halt;
              end;
            pb.x:=pb.x-1;
          end else
            if
(pb.x-1=0) and (pb.way=2) then pb.shot:=false;
        if (pb.way=3) and (pb.y+1<31) then//аналогично
          begin
            if
field[pb.x,pb.y+1]<>0 then pb.shot:=false;
            if field[pb.x,pb.y+1]=1 then field[pb.x,pb.y+1]:=11;
            if field[pb.x,pb.y+1]=2 then field[pb.x,pb.y+1]:=21;
            if field[pb.x,pb.y+1]=3 then
              begin

                Delay(5000);
                halt;
              end;
            pb.y:=pb.y+1;
          end else
            if
(pb.y+1=31) and (pb.way=3) then pb.shot:=false;
        if (pb.way=4) and (pb.x+1<22) then//аналогично
          begin
            if field[pb.x+1,pb.y]<>0 then pb.shot:=false;
            if field[pb.x+1,pb.y]=1 then field[pb.x+1,pb.y]:=11;
            if field[pb.x+1,pb.y]=2 then field[pb.x+1,pb.y]:=21;
            if field[pb.x+1,pb.y]=3 then
              begin

                Delay(5000);
                halt;
              end;
            pb.x:=pb.x+1
          end else
            if
(pb.x+1=22) and (pb.way=4) then pb.shot:=false;
        end;

В коментариях все доступно объяснил (Если что не понятно, задавайте вопрос на форуме или [В]контакте)
Теперь добавляем этот код обработки поочередного показа спрайтов взрыва:

  for i:=1 to 21 do//проверяем на анимацию все поле
    for j:=1 to 30 do
      begin

        if field[i,j]=13 then field[i,j]:=0;
        if field[i,j]=12 then field[i,j]:=13;
        if field[i,j]=11 then field[i,j]:=12;
        if field[i,j]=23 then field[i,j]:=2;
        if field[i,j]=22 then field[i,j]:=23;
        if field[i,j]=21 then field[i,j]:=22;
      end;

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

  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); //орел
        if field[i,j]=11 then DrawImage(block1[2], (i-1)*10, (j-1)*10); //анимация блока 1
        if field[i,j]=12 then DrawImage(block1[3], (i-1)*10, (j-1)*10);
        if field[i,j]=13 then DrawImage(block1[4], (i-1)*10, (j-1)*10);
        if field[i,j]=21 then DrawImage(block2[2], (i-1)*10, (j-1)*10); //анимация взрыва блока 2
        if field[i,j]=22 then DrawImage(block2[3], (i-1)*10, (j-1)*10);
        if field[i,j]=23 then DrawImage(block2[4], (i-1)*10, (j-1)*10);
      end;

Но здесь тоже все впринципе понятно.А так же не забываем нарисовать сам снаряд:

  if pb.shot then DrawImage(belleti[pb.way],pb.x*10-6,pb.y*10-6); //Отрисовка выстрела

Отлично!Все работает!В следующих урок мы будем зделаем ботов!И так!

Что нам осталось делать из списка с первого урока

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

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

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