Главная
Регистрация
Вход
Авторизироваться
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ADMIN, Nextik  
огонь
121212Дата: Понедельник, 20.04.2009, 17:28 | Сообщение # 1
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация: « 14 »
Статус: Offline
дайте плиз пример работы со стрельбой хотяб что чубрик стоя на месте стрелял оч надо!
 
12121Дата: Понедельник, 20.04.2009, 23:13 | Сообщение # 2
Программист
Группа: Проверенные
Сообщений: 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.

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

юзайте другие переменные с другими названиями
 
ReaktivДата: Воскресенье, 10.05.2009, 00:00 | Сообщение # 5
Группа: Удаленные





Подскажите пожалуйста, как сделать что бы в примере вместо розового квадрата передвигалась картинка из res?
 
12121Дата: Воскресенье, 10.05.2009, 11:12 | Сообщение # 6
Программист
Группа: Проверенные
Сообщений: 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.

 
ReaktivДата: Понедельник, 11.05.2009, 19:30 | Сообщение # 7
Группа: Удаленные





Во блин, я сам чет не допер biggrin Ну все равно спасибо за помощь smile
 
ReaktivДата: Понедельник, 11.05.2009, 19:45 | Сообщение # 8
Группа: Удаленные





слушайте, вот я хочу чтобы после попадания появлялась картинка на пару секунд, а потом асе начиналось с начала. Картинку я нарисую, а как сделать чтоб сначала все выполняться начало? Вот в бейсике GOTO X это безусловный переход к строке X, в паскале там чтото вроде FOR и REPEAT, а в МР что надо?
 
DelphierДата: Понедельник, 11.05.2009, 20:26 | Сообщение # 9
Новичок
Группа: Проверенные
Сообщений: 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;
 
12121Дата: Понедельник, 11.05.2009, 23:44 | Сообщение # 10
Программист
Группа: Проверенные
Сообщений: 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
 
12121Дата: Понедельник, 11.05.2009, 23:48 | Сообщение # 11
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
А если бы был выход в меню то так просто не сделаешь. Но можешь сам попробовать smile
 
ReaktivДата: Вторник, 12.05.2009, 19:44 | Сообщение # 12
Группа: Удаленные





Че за halt??
 
mustaeedДата: Вторник, 12.05.2009, 20:33 | Сообщение # 13
Непонятливый
Группа: Пользователи
Сообщений: 21
Награды: 0
Репутация: « 0 »
Статус: Offline
halt вырубает midlet
 
12121Дата: Вторник, 12.05.2009, 21:16 | Сообщение # 14
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
Это выход из приложения. В этой строке
if (yp<vm) and ((xp>=xm) and (xp<=xm+wm)) then halt; // если долетела до мишени (yp<15) и попала ((xp>=xm) and (xp<=xm+15)) то все
 
V@ly@Дата: Вторник, 26.05.2009, 14:11 | Сообщение # 15
Группа: Удаленные





господа....может у кого нить найдется готовый исходник со спрайтовой анимацией...оооочень надо cry

из всех исходников найденых на сайте ничего нормального нет =(

Сообщение отредактировал V@ly@ - Вторник, 26.05.2009, 14:13
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: