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


Бывалый
***

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

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


И опять мне нужна помощь. теперь проблема с ИИ ну то что я сделал нельзя конечно назвать ИИ smile.gif ну в общем у меня 2 объекта 1 можно управлять а 2 перемещается вдоль оси У я написал для этого вот такую процедуру
procedure move2;
var
d:integer;
begin
if t=0 then begin
d:=random(3);
t:=random(30);
end;
if (d=1) and (t<>0) then begin
dec(t);
ty2:=ty2-5;
circle(tx2,ty2,10);
setcolor(black);
circle(tx2,ty2+5,10);
end;
if (d=2) and (t<>0) then begin
dec(t);
ty2:=ty2+5;
circle(tx2,ty2,10);
setcolor(black);
circle(tx2,ty2-5,10);
end;
if (b=0) and (t<>0) then
begin
dec(t);
circle(tx2,ty2,10);
end;
if ty2=0 then ty2:=300;
setcolor(15);
end;
идея тут втом что есть 3 состояния движение вверх вниз и наместе состояние задается случайным образом как d:=random(3); а t:=random(30); задает сколько это перемещение будет длится. в теории вроде все хорошо токо на практике как всегда круг дальше нижней половины экрана не выходит и движется рывками nea.gif .
подскажите более удачьный алгоритм или помогите этот доработать.вот вся программа
program igra;
uses graph,crt;
var
ch:char;
b,tx2,ty2:integer;
d,m,t,x,y,k,q:integer;
procedure move1;
begin
if q=1 then begin
y:=y-5;
circle(x,y,10);
setcolor(black);
circle(x,y+5,10);
setcolor(15);
q:=0;
end;
if q=2 then begin
x:=x-5;
circle(x,y,10);
setcolor(black);
circle(x+5,y,10);
setcolor(15);
q:=0;
end;
if q=3 then begin
x:=x+5;
circle(x,y,10);
setcolor(black);
circle(x-5,y,10);
setcolor(15);
q:=0;
end;
if q=4 then begin
y:=y+5;
circle(x,y,10);
setcolor(black);
circle(x,y-5,10);
setcolor(15);
q:=0;
end;
end;
procedure move2;
var
i,d:integer;
begin
if t=0 then begin
d:=random(3);
t:=random(30);
end;
if (d=1) and (t<>0) then begin
dec(t);
ty2:=ty2-5;
circle(tx2,ty2,10);
setcolor(black);
circle(tx2,ty2+5,10);
end;
if (d=2) and (t<>0) then begin
dec(t);
ty2:=ty2+5;
circle(tx2,ty2,10);
setcolor(black);
circle(tx2,ty2-5,10);
end;
if (b=0) and (t<>0) then
begin
dec(t);
circle(tx2,ty2,10);
end;
if ty2=0 then ty2:=300;
setcolor(15);
end;
begin
d:=detect;
initgraph(d,m,'e:\tp7.1\bgi');
x:=30;
y:=120;
tx2:=300;
ty2:=320;
{kab}
t:=0;
circle(x,y,10);
repeat
if keypressed then
begin
ch:=readkey;
case ch of
#72:q:=1;
#75:q:=2;
#77:q:=3;
#80:Q:=4;
#27:halt;
end;{case}
end;
move1;
move2;
delay(5000);
until ch=#27;
readln;
closegraph;
end.
 Оффлайн  Профиль  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

 





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