Как и обещал создадим стрелялку :)
А вот выглядит дизайн программы в процессе разработки
Надписи это компонент TLabel находится на первой странице палитры компонентов сверху
Окна в которых будет кол-во жизней,очки,кол-во выстрелов это TEdit. На вкладке System берем два таймера Ttimer и бросаем их на форму на второй вкладке aditional берем 5 TShapes 3 это наш враг, один кубик это главный герой,один шарик это чем будем стрелять наша пуля и один кубик
это просто фотка добавим Image и загрузим в него любую картинку взрыва (в инспекторе объектов на первой вкладке свойств находим picture и жмем ... ) я вот такой взрыв нарисовал :)
Рамка это TBevel и groupbox так для оформления. Можно выбрать (View->Component List) вид-список компонентов и ввести название компонента а потом нажать добавить на форму иногда так быстрее.
Как сделать из shape окружность? для этого есть свойство shape
выбираем stCircle и готово. Можно менять цвета и делать "дизайн" как вам нравится, применять красивый шрифт или вообще поставить фоновую картинку:
Устанавливаем компонент фотка Timage и выбираем в свойстве Align->alClient таким образом растягиваем фото на всю форму,далее загружаем любую фотку и все. Вот на скрине видно что не все так гладко получается необходимо выравнивать более точно, или отказаться от гроупбокс
Теперь касаемо кода:
var
ind : integer;
Procedure MvCubs;
label cikl;
var
t : integer;
life : integer;
begin
cikl:
t := form1.shape2.top; //
with form1 do
begin
if t <> 312 then
shape1.Top := shape1.Top + 10;
shape2.top := shape2.top + 10;
shape3.top := shape3.top + 10;
if t = 312 then
begin
timer1.enabled := false;
//boom;
showmessage('game over #1');
life := strtoint(edit3.text);
if form1.Edit3.Text = '0' then
edit3.text := 'you dead...'
else life := life - 1;
edit3.text := inttostr(life);
form1.Shape2.Top := 16;
form1.timer1.Enabled := true;
goto cikl;
end;
end;
end;
Procedure MoveShot;
label
next;
var
i, j : integer;
ch : integer;
dl : integer;
ch_str : string;
begin
form1.cir.Visible := true;
// while (form1.cir.Top <> (form1.Bevel1.Top - 4)) do
//begin
For i := 0 to 10 do
begin
begin
For j := 0 to 3 do
begin
if j = 0 then goto next
else
ch := j div 2;
ch_str := IntToStr(ch);
dl := length(ch_str);
if dl > 1 then
form1.cir.Visible := false
else
next:
form1.cir.Visible := true;
if form1.cir.Top = (form1.Bevel1.Top + form1.Bevel1.Height) then
begin
form1.cir.Top := ((form1.man.Top) - 10);
form1.cir.visible := false;
form1.movecircle.Enabled := false;
end;
form1.cir.Top := form1.cir.Top - j;
end;
end;
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
movecircle.Enabled := false;
cir.Visible := false;
cir.Left := man.Left + 3;
cir.Top := man.Top - 9;
if key = vk_left then
man.Left := man.Left - 5;
if key = vk_right then
man.Left := man.Left + 5;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
ind := ind + 1;
edit2.Text := IntToStr(ind);
if ind = 0 then exit;
case key of
#32 : movecircle.Enabled := true;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
mvcubs;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.movecircleTimer(Sender: TObject);
begin
moveshot;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
cir.Visible := false;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
close;
end;
end.
Скажу честно что эту игру писал довольно давно лет этак 5 назад если не больше, так сказать был первый опыт, код мне и самому сейчас не нравится, но в то время был единственным выходом из-за отсутствия знаний и опыта.
Еще здесь не хватает фу-ии взрыва мы ее рассмотрим чуть позже в другой статье. А пока все должно работать кубики должны двигаться,наш герой-кубик тоже должен двигаться через управление стрелками на клавиатуре,а пробел должен делать выстрел с одним касяком :)))
Опишу и теорию как и почему работает эта программа и на чем основанна.
Чуть не забыл необходимо изменить названия одного таймера:
Точно так же изменим у героя имя на man и пуля назовем cir вроде бы все, теперь должно компилироваться (F9) без ошибок и работать.
Комментариев нет:
Отправить комментарий