Авторизироваться
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ADMIN, Nextik  
огонь
20.04.2009 в 17:28 Сообщение #1
121212
Программист
Проверенные
Сообщений: 268
Награды: 7
Репутация: 14
Offline
дайте плиз пример работы со стрельбой хотяб что чубрик стоя на месте стрелял оч надо!
20.04.2009 в 23:13 Сообщение #2
12121
Программист
Проверенные
Сообщений: 357
Награды: 4
Репутация: 290
Offline
вот специально для тебя :

program bax;
var
x, // пушкa
xp,yp, // пуля
xm:integer; // мишень
pl:boolean; // флаг полета пули

procedure pistolet(c: integer;); // рисует (1) или стирает (0) пушку
begin
if c=1 then setColor(255, 0, 0) else setColor(255, 255, 255);
drawLine(x,getHeight,x+10,getHeight-10);
drawLine(x+20,getHeight,x+10,getHeight-10);
end;

procedure klava; // опрос клавиатуры
var
c:integer;

begin
c:=getKeyPressed;

if keyToAction©=GA_LEFT then begin
pistolet(0);
x:=x-5; if x<0 then x:=getWidth-20;
pistolet(1);
end;

if keyToAction©=GA_RIGHT then begin
pistolet(0);
x:=x+5; if x>getWidth-20 then x:=0;
pistolet(1);
end;

if (keyToAction©=GA_FIRE) and not(pl) then begin // not(pl) это тоже что pl=false. если пуля уже летит то нажатие игнорируем
pl:=true; // пуля полетела
xp:=x+10; yp:=getHeight-15; // начальные координаты пули
end;

end;

procedure mishen; // рисуем и сдвигаем мишень

begin

setColor(255, 255, 255);fillRect(xm,0, 15, 15);
xm:=xm+1; if xm>getWidth-15 then xm:=0;
setColor(255, 0, 255);fillRect(xm,0, 15, 15);

end;

procedure pulja1(c:integer);// рисует (1) или стирает (0) пулю
begin
if c=1 then setColor(255, 0, 0) else setColor(255, 255, 255);
drawLine(xp,yp,xp,yp+5);
end;

procedure pulja;
begin
if pl then begin // если пуля летит ( pl=true ) то изменяем координаты пули
pulja1(0); // стираем
yp:=yp-3; // изменяем

if (yp<15) and ((xp>=xm) and (xp<=xm+15)) then halt; // если долетела до мишени (yp<15) и попала ((xp>=xm) and (xp<=xm+15)) то все

pulja1(1); // рисуем по новым координатам

if yp<0 then begin pl:=false;pulja1(0);end; // вылет за край экрана - сбрасываем флаг полета и стираем

end;
end;

begin // начало
setColor(255, 255, 255);fillRect(0,0, getWidth, getHeight);

pistolet(1);

repeat

mishen;

pulja;

klava;

repaint;delay(10);
until false;

end.

20.04.2009 в 23:17 Сообщение #3
12121
Программист
Проверенные
Сообщений: 357
Награды: 4
Репутация: 290
Offline
© это ( с ) конечно .
21.04.2009 в 15:09 Сообщение #4
programmer
Умный
Проверенные
Сообщений: 599
Награды: 3
Репутация: 111
Offline
Quote (12121)
© это ( с ) конечно .

юзайте другие переменные с другими названиями
10.05.2009 в 00:00 Сообщение #5
Reaktiv
Удаленные
Подскажите пожалуйста, как сделать что бы в примере вместо розового квадрата передвигалась картинка из res?
10.05.2009 в 11:12 Сообщение #6
12121
Программист
Проверенные
Сообщений: 357
Награды: 4
Репутация: 290
Offline
где то так :

program bax;

const vm = 32; // высота рис
wm = 32; // ширина рис
sp = 10; // скорость пули
sm = 7; // скорость мишени
var
im: image; // мишень
x, // пушкa
xp,yp, // пуля
xm:integer; // мишень x координата
pl:boolean; // флаг полета пули

procedure pistolet(c: integer;); // рисует (1) или стирает (0) пушку
begin
if c=1 then setColor(255, 0, 0) else setColor(255, 255, 255);
drawLine(x,getHeight,x+10,getHeight-10);
drawLine(x+20,getHeight,x+10,getHeight-10);
end;

procedure klava; // опрос клавиатуры
var
c:integer;

begin
c:=getKeyPressed;

if keyToAction©=GA_LEFT then begin
pistolet(0);
x:=x-5; if x<0 then x:=getWidth-20;
pistolet(1);
end;

if keyToAction©=GA_RIGHT then begin
pistolet(0);
x:=x+5; if x>getWidth-20 then x:=0;
pistolet(1);
end;

if (keyToAction©=GA_FIRE) and not(pl) then begin // not(pl) это тоже что pl=false. если пуля уже летит то нажатие игнорируем
pl:=true; // пуля полетела
xp:=x+10; yp:=getHeight-15; // начальные координаты пули
end;

end;

procedure mishen; // рисуем и сдвигаем мишень

begin

setColor(255, 255, 255);fillRect(xm,0, wm, vm); // стираем
xm:=xm+sm; if xm>getWidth then xm:=0-wm;
drawImage(im, xm, 0);

end;

procedure pulja1(c:integer);// рисует (1) или стирает (0) пулю
begin
if c=1 then setColor(255, 0, 0) else setColor(255, 255, 255);
drawLine(xp,yp,xp,yp+5);
end;

procedure pulja;
begin
if pl then begin // если пуля летит ( pl=true ) то изменяем координаты пули
pulja1(0); // стираем
yp:=yp-sp; // изменяем

if (yp<vm) and ((xp>=xm) and (xp<=xm+wm)) then halt; // если долетела до мишени (yp<15) и попала ((xp>=xm) and (xp<=xm+15)) то все

pulja1(1); // рисуем по новым координатам

if yp<0 then begin pl:=false;pulja1(0);end; // вылет за край экрана - сбрасываем флаг полета и стираем

end;
end;

begin // начало

im:=loadImage('/1.png');
setColor(255, 255, 255);fillRect(0,0, getWidth, getHeight);

pistolet(1);

repeat

mishen;

pulja;

klava;

repaint;delay(10);
until false;

end.

11.05.2009 в 19:30 Сообщение #7
Reaktiv
Удаленные
Во блин, я сам чет не допер biggrin Ну все равно спасибо за помощь smile
11.05.2009 в 19:45 Сообщение #8
Reaktiv
Удаленные
слушайте, вот я хочу чтобы после попадания появлялась картинка на пару секунд, а потом асе начиналось с начала. Картинку я нарисую, а как сделать чтоб сначала все выполняться начало? Вот в бейсике GOTO X это безусловный переход к строке X, в паскале там чтото вроде FOR и REPEAT, а в МР что надо?
11.05.2009 в 20:26 Сообщение #9
Delphier
Новичок
Проверенные
Сообщений: 13
Награды: 2
Репутация: 5
Offline
Так в МП тоже есть и for и repeat!

Code

repeat
   for i:=1 to 20 do
     DrawImage(pula, x+i,y);
   DrawImage(expl, x+i,y);
   Delay(300);
until GetKeyPressed<>ke_None;
11.05.2009 в 23:44 Сообщение #10
12121
Программист
Проверенные
Сообщений: 357
Награды: 4
Репутация: 290
Offline
Просто хочешь нарисовать взрыв а потом что бы все сначала ? Если да то просто вместо halt делаешь
begin drawImage(vzryv, xm, 0);repaint; delay(10);xm:=0;yp:=-10;end;
конечно vzryv надо обьявить и загрузить в начале. Можно вывести несколько кадров конечно.если считаешь попадания то счетчик попаданий увеличиваешь тоже.
Пишу с телефона без проверки так что может что не точно.
Сообщение отредактировал 12121 - Понедельник, 11.05.2009, 23:59
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: