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

Статистика

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


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

Друзья сайта
IT юмор - развлечения
Заработать в интернете - легко!Просто сиди и кликай.
Четверг, 15.11.2018, 01.06.59
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Урок №5.3 - Армагедон! - MPS - Леталка стелялка
Всем привет) начнем с обновления изо)
images.png
На изображении есть изо ракеты.Применим их в этом уроке
И обновляем процедуру LoadImages;
Procedure LoadImages;
Begin
 im:=LoadImage('/images.png');
 Pers[1]:=Rotate_Image_From_Image(im, 0,0,30,50,0);
 Pers[2]:=Rotate_Image_From_Image(im, 30,0,30,50,0);
 Pers[3]:=Rotate_Image_From_Image(im, 60,0,30,50,0);
 Klen[1]:=Rotate_Image_From_Image(im, 0,50,30,40,0);
 Klen[2]:=Rotate_Image_From_Image(im, 90,0,90,90,0);
 ResArs:=Rotate_Image_From_Image(im, 30,50,15,6,0);{NEW}
End;

Новые пирименные)
 ResArs:image;{для хранения изо ракеты}
 arsa:integer;{вспомагатель стрельбы}

 ars:array[1..50] of record {масив пуль}
 x,y:integer;{координаты пуль}
 End;


Новые процедуры)
Procedure DArs;
Begin
 For i:=1 To 50 Do {зацыкливываем на 50 раз}
 Begin
  if (ars[i].x>0) and (ars[i].y>0) then 
 DrawImage(ResArs, ars[i].x,ars[i].y);{выводим изо ракеты если ею выстрелили}
 if (ars[i].x>0) and (ars[i].y>0) then 
 ars[i].x:=ars[i].x+5;{перемищение пули по х кор}
  if (getKeyClicked=GA_FIRE) then
  Begin
  if (arsa=50) then arsa:=0;{если вспомогатель больше 50 то начинаем сначала}
 arsa:=arsa+1;{плюсуем вспомогать}
 ars[arsa].x:=(wi/2)-12;{устанавливаем х кор}
 ars[arsa].y:=y+14;{устанавиливаем у кор}
 End;
 End;
End;

Розбераем)
ars[*].* - может некоторые незнают про комбинированыйе типы, я обясню.
 Например, если вы пишете игру, где игрок
 управляет персонажем на экране, вы вполне
 можете использовать комбинированный тип для
 описания позиции, здоровья и прочих параметров
 персонажа.
 Ето все проще чем кажется, поскольку суть уних
 одинакова с простыми пирименными мы могли бы
 заменить их, но проще будет использовать
 комбенированые типы.

Весь цыкл выглядит так:
Program MPS;
uses canvas;
var
 im:image;
 Pers:array[1..3] of image;
 Klen:array[1..3] of image;
 
 i,key:integer;
 wi,he:integer;
 x,y:integer;
 life:integer;
 zapas:integer;
 oblaka:integer;
 mx,my:integer;
 

Procedure LoadImages;
Begin
 im:=LoadImage('/images.png');
 Pers[1]:=Rotate_Image_From_Image(im, 0,0,30,50,0);
 Pers[2]:=Rotate_Image_From_Image(im, 30,0,30,50,0);
 Pers[3]:=Rotate_Image_From_Image(im, 60,0,30,50,0);
 Klen[1]:=Rotate_Image_From_Image(im, 0,50,30,40,0);
 Klen[2]:=Rotate_Image_From_Image(im, 90,0,90,90,0);
End;

Procedure SInt;
Begin
 wi:=getWidth;
 he:=getHeight;
 x:=(wi/2)-30;
 y:=he-70;
 life:=30;
 zapas:=30*10;
End;

Procedure DFon;
Begin
 oblaka:=oblaka+1;
 if (oblaka>8000) then oblaka:=0;
 if (x>2000) then x:=0;
 if (y<he-70) then y:=y+1;
 
  For mx:=0 To 100 Do 
 For my:=0 To (he/90) Do 
 DrawImage(Klen[2], (mx*90)-oblaka,(my*90));
 
 For i:=0 To 100 Do 
 DrawImage(Klen[1], (i*30)-x,he-40);
End;

Procedure DPers;
Begin
 DrawImage(Pers[Random(3)+1], (wi/2)-30,y);
 
 SetColor(255,0,0);
 FillRect((wi/2)-28,y-6,30,2);
 SetColor(0,255,0);
 FillRect((wi/2)-28,y-6,life,2);
 SetColor(0,0,255);
 FillRect((wi/2)-28,y-4,zapas/10,2);
 
 if (y<(he-70)) then zapas:=zapas-1;
 else 
 if (zapas<=30*10) then zapas:=zapas+3;
 if (zapas<1) and (y<(he-70)) then y:=y+5;
 
 
  if (key=GA_UP) and (y>5) and (zapas>5) then
 Begin
 y:=y-5;
 x:=x+3;
 oblaka:=oblaka+1;
  End;
 if (key=GA_DOWN) and (y<(he-70)) then y:=y+3;
 if (key=GA_RIGHT) and (y<(he-70)) then
  Begin
 x:=x+5;
 oblaka:=oblaka+3;
 End;
 if (key=GA_LEFT) and (y<(he-70)) then
 Begin
 x:=x-5;
 oblaka:=oblaka-3;
  End;
End;

Procedure DArs;
Begin
 For i:=1 To 50 Do 
  Begin
 if (ars[i].x>0) and (ars[i].y>0) then 
 DrawImage(ResArs, ars[i].x,ars[i].y); 
  if (ars[i].x>0) and (ars[i].y>0) then 
 ars[i].x:=ars[i].x+5; 
 if (getKeyClicked=GA_FIRE) then
 Begin
  if (arsa=50) then arsa:=0; 
 arsa:=arsa+1; 
 ars[arsa].x:=(wi/2)-12; 
 ars[arsa].y:=y+14; 
 End;
 End;
End;



Begin
 SetInt;
 LoadImages;
Repeat
 key:=keyToAction(getKeyPressed);
 SetColor(250,250,255);
 FillRect(0,0,wi,he);
 
 DFon;
 DArs;
 DPers;
 
 Repaint;
 Delay(10);
Until False;
End.

Всем спосибо, мы научились писать стрельбу бесконечным дождем пуль.
В следующем уроке мы добавим простенького бота, и это будет уже полноценной аркадой
Если вы нашли ошибки/очепятки в тексте то сообщите о них на форуме
А также можете заказать программу/игру на этой странице

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