IPB
ЛогинПароль:

> ТАНКИ, одновременное выполнение действий
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


хочу написать простую игру (дано допустим 2 танка 1 управляется пользователем а 2 компьютером ) в ходе написания возник ряд вопросов 1) как сделать чтобы одновременно выполнялось несколько действий допустим я стреляю и пока летит снаряд я хочу переместить свой танк а враг может попытаться увернутся от снаряда.на данном этапе написания когда я стреляю я не могу переместить танк пока не далетит снаряд.2)как установить границы экрана чтобы танк не заезжал за границы и вообще как разграничить экран я пробовал спомощью setviewport но чето ничего не получилось.

вот то что я уже написал набрОсал танки 1им из них можно управлять стрелками и стрелять на пробел выход на esc.танки я нарисовал линиями чтоб легче было работать с координатами
program igra;
uses graph,crt;
var
ch:char;
tx,ty,tx2,ty2:integer;
d,m,i,x,y,k:integer;
procedure vistrel;
var
vx,vy,i,k:integer;
begin
vx:=tx;
vy:=ty;
for i:=1 to 640-(vx+60) do begin
setcolor(15);
circle(vx+64+i,vy+23,3);
setcolor(0);
circle(vx+64+i-1,vy+23,3);
delay(200);
if (vy+23>=ty2) and (vy+23<=ty+48) then
circle(213,120,2);
end;
setcolor(15);
end;
begin
d:=detect;
initgraph(d,m,'e:\tp7.1\bgi');
tx:=1;
ty:=120;
tx2:=610;
ty2:=120;
{kab}
repeat
{\\\\\\\\\\\\\\\\\tank22\\\\\\\\\\\\\\\\\\\\\ }
{kab}
line(tx2,ty2,tx2+23,ty2);
line(tx2+23,ty2,tx2+23,ty2+48);
line(tx2,ty2+48,tx2+23,ty2+48);
line(tx2,ty2,tx2,ty2+48);
arc(tx2+11,ty2+6,23,154,13);
arc(tx2+11,ty2+42,206,337,13);
{pil}
line(tx2+10,ty2+9,tx2+10,ty2+39);
line(tx2+17,ty2+9,tx2+10,ty2+9);
line(tx2+10,ty2+39,tx2+17,ty2+39);
{puh}
line(tx2,ty2+12,tx2-12,ty2+12);
line(tx2,ty2+36,tx2-12,ty2+36);
line(tx2-12,ty2+12,tx2-12,ty2+36);
{dulo}
line(tx2-12,ty2+26,tx2-29,ty2+26);
line(tx2-29,ty2+20,tx2-29,ty2+28);
line(tx2-12,ty2+22,tx2-29,ty2+22);
{gluh}
line(tx2-29,ty2+20,tx2-36,ty2+20);
line(tx2-29,ty2+28,tx2-36,ty2+28);
line(tx2-36,ty2+20,tx2-36,ty2+28);
{\\\\\\\\\\\=tank\\\\\\\\\\\\\\\\}
line(tx,ty,tx+23,ty);
line(tx+23,ty,tx+23,ty+48);
line(tx,ty+48,tx+23,ty+48);
line(tx,ty,tx,ty+48);
arc(tx+11,ty+6,23,154,13);
arc(tx+11,ty+42,206,337,13);
{pil}
line(tx+17,ty+9,tx+17,ty+39);
line(tx+10,ty+9,tx+17,ty+9);
line(tx+10,ty+39,tx+17,ty+39);
{puh}
line(tx+23,ty+12,tx+35,ty+12);
line(tx+23,ty+36,tx+35,ty+36);
line(tx+35,ty+12,tx+35,ty+36);
line(tx+35,ty+22,tx+53,ty+22);
{dulo}
line(tx+35,ty+26,tx+53,ty+26);
line(tx+53,ty+20,tx+53,ty+28);
{gluh}
line(tx+53,ty+20,tx+60,ty+20);
line(tx+53,ty+28,tx+60,ty+28);
line(tx+60,ty+20,tx+60,ty+28);
ch:=readkey;
case ch of
#72:ty:=ty-5;
#75:tx:=tx-5;
#77:tx:=tx+5;
#80:ty:=ty+5;
#32:vistrel;
#27:halt;
end;{case}
cleardevice;
until ch=#27;
readln;
closegraph;
end.
объяснити хоть на словах как сделать то о чем я написал.спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской
Реальное имя: Андрей

Репутация: -  2  +


Да пожалуйста, если что, обращайся еще.
Кстати, если делать вообще по науке, то нужно вот как:
Для каждого объекта кроме координат X и Y должна быть пара DX и DY, которой задается вектор перемещения объекта. Тогда при анализе клавы или генерации очередного хода противника изменяешь DX или DY (Если ход вверх, то DX = 0, DY = -5; Если вправо, то DX = 5, DY = 0 и т.д.). А потом пересчитываешь координаты X := X + DX; Y := Y + DY.
Это позволит сделать анализ границ. То есть, пересчитывать координаты нужно только в том случаи, если следующий ход попадает в границы экрана (псевдокод):
Код

If X + DX больше 0 и меньше 640
Then X := X + DX
If Y + DY больше 0 и меньше 480
Then Y := Y + DY

Также, используя этот способ, можно, например, добавить препятствия, призы и пр.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(spill @ 20.02.2008 12:03) *

Да пожалуйста, если что, обращайся еще.
Кстати, если делать вообще по науке, то нужно вот как:
Для каждого объекта кроме координат X и Y должна быть пара DX и DY, которой задается вектор перемещения объекта. Тогда при анализе клавы или генерации очередного хода противника изменяешь DX или DY (Если ход вверх, то DX = 0, DY = -5; Если вправо, то DX = 5, DY = 0 и т.д.). А потом пересчитываешь координаты X := X + DX; Y := Y + DY.
Это позволит сделать анализ границ. То есть, пересчитывать координаты нужно только в том случаи, если следующий ход попадает в границы экрана (псевдокод):
Код

If X + DX больше 0 и меньше 640
Then X := X + DX
If Y + DY больше 0 и меньше 480
Then Y := Y + DY

Также, используя этот способ, можно, например, добавить препятствия, призы и пр.

спасибо сделал таким способом с границами теперь никаких проблем good.gif и наконец надеюсь последний вопрос по поводу выстрела.тут я вижу 2 возможности я стреляю пуля летит и пока она не вылетит за экран или кудато не попадет я выстрелить не могу собственно сейчас у меня именно так , а я хотел бы сделать чтобы пока 1 пуля летит я перемещаю танк и стреляю еще раз(1 пуля все еще летит) и еще пусть не бесконечное число раз но и не 1. так вот в чем сложность сейчас для координат пули у меня 2 переменные vx,vy так получается что для хранения координат 2 пули которая выпущена до попадания 1 нужны другие переменные?или может тут както с массивом можно сделать? чето я с этим совсем запутался?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
blackhard   ТАНКИ   15.02.2008 4:08
spill   Игры так не пишут. В игре должен быть ОДИН цикл. В…   15.02.2008 18:12
andriano   Ты бы хоть, прежде чем писать, почитал темы, наход…   15.02.2008 23:12
blackhard   Ты бы хоть, прежде чем писать, почитал темы, нахо…   16.02.2008 0:01
blackhard   И опять мне нужна помощь. теперь проблема с ИИ ну …   19.02.2008 3:57
spill   Вот твои ошибки: 1. Используй Randomize один раз в…   19.02.2008 17:34
blackhard   Вот твои ошибки: 1. Используй Randomize один раз …   20.02.2008 2:35
andriano   И вот еще что надо бы переделать. Анимация делает…   20.02.2008 13:16
spill   Да пожалуйста, если что, обращайся еще. Кстати, ес…   20.02.2008 16:03
blackhard   Да пожалуйста, если что, обращайся еще. Кстати, е…   20.02.2008 22:45
andriano   Именно с массивом. Прикинь, какая у твоего танка м…   20.02.2008 23:31
blackhard   Именно с массивом. Прикинь, какая у твоего танка …   20.02.2008 23:40
blackhard   Я решил переделать игру.Теперь обьекты у меня это …   23.03.2008 17:58
andriano   Поясни, пожалуйста, как именно ты стираешь изображ…   23.03.2008 21:11
blackhard   Поясни, пожалуйста, как именно ты стираешь изобра…   23.03.2008 21:28
andriano   Это я вижу. Но ты сам сказал, что это не работает.…   23.03.2008 22:36
blackhard   Это я вижу. Но ты сам сказал, что это не работает…   23.03.2008 23:31
andriano   Третий раз спрашиваю: как именно стираешь изображе…   24.03.2008 3:01
blackhard   Третий раз спрашиваю: как именно стираешь изображ…   24.03.2008 3:16
andriano   Дергается или мерцает? Если дергается, что-то не в…   25.03.2008 0:00
blackhard   Дергается или мерцает? Если дергается, что-то не …   25.03.2008 0:36
andriano   Только что разместил ссылки на статьи в соответств…   25.03.2008 0:49
blackhard   Теперь я решил сделать чтобы у меня там солдатики …   22.04.2008 17:57
renesko1   Попробуй сделать обьект солдат и метод paint Созда…   22.04.2008 21:32
blackhard   А можно както в подобной игре сделать нормальный з…   5.05.2008 16:43
andriano   Игра - имеется в виду под DOS?   5.05.2008 16:59
blackhard   Игра - имеется в виду под DOS? Ну да   5.05.2008 17:23
andriano   Пробежал глазами тему. "Нормальный звук…   5.05.2008 21:14


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.01.2022 8:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name