Далее в свойсте формы FormKeyDown (при нажатии клавиш клавиатуры) пишем обработку клавиатуры т.е. наш код будет слідить за тем, какие клавиши нажаты и изменять в святи с этим наши переменные
if key=87 then begin qUp:=true; Tank[1].Go:=true; Tank[1].Povorot:=1; end;
if key=65 then begin qLeft:=true; Tank[1].Go:=true; Tank[1].Povorot:=4; end;
if key=83 then begin qDown:=true; Tank[1].Go:=true; Tank[1].Povorot:=3; end;
if key=68 then begin qRight:=true; Tank[1].Go:=true; Tank[1].Povorot:=2; end;
if (key=32) and (Tank[1].vistrelil=false) then begin Tank[1].Fight:=true; end;
В таймере мы делаем необходимые расчеты игры и делаем ее прорисовку. Здесь же задам и поведение соперников и выстрелы пуль и все что нужно для прорисовки. В свойстве формы FormKeyUp (при отпускании клавиш) изменяем переменные на неактивне: if (key=87) then qUp:=false; if (key=65) then qLeft:=false; if (key=83) then qDown:=false; if (key=68) then qRight:=false; if (qUp=false) and (qLeft=false) and (qDown=false) and (qRight=false) then Tank[1].Go:=false; Во втором таймере мы делаем следующие действия: for i:=1 to 4 do for j:=1 to 2 do form1.Canvas.Draw(i*60,j*60,Tanki[3,i,j]);
Если чесно, то это можно сделать и в первом таймере. Обычно я использую разные таймеры, если хочу чтобы скорость расчетов и прорисовки в разных таймерах была разной (Например карта прорисовывается с одной скоростью и двигаються танки соперника, а наш танк с другой и т.д. ) Теперь в свойстве формы FormClick (при клике по форме мышкой) сделаем чтобы игра начиналась заново (нужно при неправильно сгенерированной карте или других моментах которые нас не устраивают). Таким образом можно будет кликнуть по карте и загрузиться новый тур: Timer1.Enabled:=false; qUp:=false; qDown:=false; qLeft:=false; qRight:=false; Tank[1].x:=60; Tank[1].y:=540; Tank[1].Go:=false; if Tank[1].Visible=true then showmessage('ТУР Пройден!!!!'); if Tank[1].Visible=false then showmessage('Игра окончена!!!!'); //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;
timer1.Enabled:=true; Во второй части урока я не так сильно кропотливо обьсянл все моменты и прошу за это меня извинить – это связано с нехваткой времени. Я паралельно занимаюсь еще другими сайтами плюс учусь в университете и пишу магистерскую работу по написанию игры, о которой говорится на главной странице сайта. На этом все – до свидания!