Создание Танчиков
часть 2
В последней статье по написанию наших «танчиков» я бы хотел
показать весь наш код, которым мы уже написали и тот, который я добавил к нему,
и будем анализировать эти части. Во первых рассмотрим записи наших игровых
обьектов (танки, флаг, пули) после слова type.
TTank=record
Speed,x,y,Povorot,Anim:integer;
Go,Fight,Vistrelil,poyehal:boolean;
Zaderhka_Vistrela,Max_vistrel:integer;
Visible:boolean;
end;
Tpulya=record
x,y,speed,povorot:integer;
visible:boolean;
end;
TFlag=record
x,y:integer;
Pic:Tbitmap;
end;
Характеристики
танка, мы с Вами уже рассмотрели в предыдущей статье, на этом останавливаться
не будем.
У пули,
как видно, есть:
x,y - координаты
ее нахождения
speed – скорость движения пули
povorot – куда был повернут танк, когда выстрелил эту пулю (чтобы
знать в какую сторону пуля полетит)
visible – показатель того, вестрелена пуля или нет (сущетсвует на
карте или нет).
У флага все просто:
x,y –
координаты на карте
Pic – картинка флага
Идем далее. Теперь рассмотрим дополнительно объявленные переменные:
var
Tanki:array[1..4,1..4,1..2]of TBitmap;
Textures:array[1..3] of TBitmap;
Flag:array[1..2]of TFlag;
Map:array[0..10,0..10] of integer;
Tank:array[1..4]of TTank;
Puli:array[1..20] of Tpulya;
Pulya,Buf:Tbitmap;
path:string;
qUp,qDown,qLeft,qRight:boolean;
i,j:integer;
Обьясню переменные
Tanki – массив картинок анимации танков
Textures – массив картинок кирпичей, покрытия и брони
Flag – массив с вашим флагом и флагом соперника
Map – игровая карта размеров 10 на 10 квадратиков
Tank – массив танков
Puli – массив пуль (ограничен до 20 пуль, которые могут
одновременно прорисовыватья – остальные будут заменять предыдущие. Но для трех
танков 20 пуль одновременно – это и так черезчур)
Pulya – картинка пули
Buf – буфер на который будет рисоваться вся игра, а сам буфер
будет рисоваться на форму. (нужен чтобы рисуемая картинка не мигала)
Path – хранит путь к нашей папке с игрой (нужен для правильной
загрузки картинок)
qUp,qDown,qLeft,qRight – переменные-показатели нажатых
клавиш в каждый момент
i,j – просто переменные, которые мы будем использовать как
для загрузки картинок так и для самой игровой структуры.
В свойстве нашей формы CREATE (по созданию
формы) мы пишем следующий
код:
//opredeleniye
puti k papke s igroy
path:=extractFileDir(Application.ExeName);
//zagruzka kartinok tankov
for i:=1 to 4 do
begin
for j:=1 to 2 do
begin
Tanki[1,i,j]:=Tbitmap.create;
Tanki[1,i,j].TransparentColor:=clWhite;
Tanki[1,i,j].Transparent:=true;
Tanki[1,i,j].loadfromFile(path+'\img\'+'t'+inttostr(i)+inttostr(j)+'.bmp');
Tanki[3,i,j]:=Tbitmap.create;
Tanki[3,i,j].TransparentColor:=clWhite;
Tanki[3,i,j].Transparent:=true;
Tanki[3,i,j].loadfromFile(path+'\img\'+'v'+inttostr(i)+inttostr(j)+'.bmp');
Tanki[2,i,j]:=Tbitmap.create;
Tanki[2,i,j].TransparentColor:=clWhite;
Tanki[2,i,j].Transparent:=true;
Tanki[2,i,j].loadfromFile(path+'\img\'+'r'+inttostr(i)+inttostr(j)+'.bmp');
end;
end;
//zagruzka tekstur
for i:=1 to 3 do
begin
Textures[i]:=Tbitmap.Create;
textures[i].Transparent:=false;
Textures[i].LoadFromFile(path+'\img\'+inttostr(i)+'.bmp');
end;
flag[1].x:=9;
flag[1].y:=0;
flag[2].x:=0;
flag[2].y:=9;
flag[1].Pic:=Tbitmap.Create;
flag[1].Pic.Transparent:=true;
flag[2].Pic:=Tbitmap.Create;
flag[2].Pic.Transparent:=true;
flag[1].Pic.loadfromfile(path+'\img\4.bmp');
flag[2].Pic.loadfromfile(path+'\img\5.bmp');
//zagruzka puli
Pulya:=Tbitmap.Create;
Pulya.Transparent:=true;
Pulya.LoadFromFile(path+'\img\p.bmp');
Buf:=Tbitmap.Create;
Buf.Width:=600;
buf.Height:=600;
Tank[1].Speed:=12;
Tank[1].x:=60;
Tank[1].y:=540;
Tank[1].Povorot:=1;
Tank[1].Go:=false;
Tank[1].Anim:=1;
Tank[1].Fight:=false;
Tank[1].Zaderhka_Vistrela:=0;
Tank[1].Max_vistrel:=10;
Tank[1].Vistrelil:=false;
Tank[1].Visible:=true;
Tank[2].Speed:=7;
Tank[2].x:=480;
Tank[2].y:=0;
Tank[2].Povorot:=3;
Tank[2].Go:=false;
Tank[2].Anim:=1;
Tank[2].Fight:=false;
Tank[2].Zaderhka_Vistrela:=0;
Tank[2].Max_vistrel:=10;
Tank[2].Vistrelil:=false;
Tank[2].Visible:=true;
Tank[2].poyehal:=false;
Tank[3].Speed:=5;
Tank[3].x:=540;
Tank[3].y:=60;
Tank[3].Povorot:=3;
Tank[3].Go:=false;
Tank[3].Anim:=1;
Tank[3].Fight:=false;
Tank[3].Zaderhka_Vistrela:=0;
Tank[3].Max_vistrel:=5;
Tank[3].Vistrelil:=false;
Tank[3].Visible:=true;
Tank[3].poyehal:=false;
//nachalniye harakteristiki pul'
for i:=1 to 20 do
begin
Puli[i].x:=0;
Puli[i].y:=0;
Puli[i].speed:=20;
Puli[i].povorot:=0;
Puli[i].visible:=false;
end;
qLeft:=false;
qRight:=false;
qUp:=false;
qDown:=false;
//generirovaniye karti
randomize;
for i:=0 to 9 do
for j:=0 to 9 do
begin
map[i,j]:=random(100)+1;
if map[i,j]<=50 then map[i,j]:=1;
if (map[i,j]>50) and (map[i,j]<=80)
then map[i,j]:=2;
if (map[i,j]>80) and (map[i,j]<=100)
then map[i,j]:=3;
end;
//rasstanovka flagov i tankov
map[9,0]:=1;
map[9,1]:=1;
map[8,0]:=1;
map[0,9]:=1;
map[0,8]:=1;
map[trunc(Tank[1].x/60),trunc(Tank[1].y/60)]:=1;
for i:=1 to 4 do
for j:=1 to 2 do
form1.Canvas.Draw(i*60,j*60,Tanki[3,i,j]);
В этом коде мы
загружаем все картинки и генерируем нашу карту и заполняем начальную
информацию. Так как перед началом игры все долино бать підготовлено к ней.
|