Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

2Д исходник   Найти похожие ветки 

 
KiberKot ©   (2006-04-05 19:49) [40]

Чесно говоря у меня щас нету времени основательно учить математику. Я щас сдаю диплом, и делаю на него эту стрелялку, здать мне его надо завтра :)
Щас я пытаюсь по быстрому переделать прогу из книги "DirectX графика в проектах  Delphi. Щас мне надо что нибудь показать, что бы отцепились, типо 50% игры, а потом уже займусь основательно. Всегда хотел игры делать.
Так вот, может есть способ полегче, а то что то не очень понятно, как с этим работать. А я потом буду разберать то что ты предлагаеш.


 
XProger ©   (2006-04-05 20:29) [41]

KiberKot, больно стукни этого "кое кто" ибо играл он в Need For Kill в которой и 50% того, что в нашей Time For Kill нету...

"Всегда хотел игры делать."..."здать мне его надо завтра" ну зачем же надо было "хотеть" до крайнего срока? ;)


 
Cash ©   (2006-04-05 20:35) [42]

Хм, если надо простые хаотические движения, то нет ничего лучше
генератора случайных чисел! Random так сказать рулит! :)
Если у тебя есть момент поворота объекта на определенный угол,
то делай просто: один раз в секунду или в милли- микросекунду или в
тик, запускай примрно такой генератор:

Изменить угол поворота на (+/-)random(...) градусов;
можно перемещаться:=(random(...)=...);

Или что нибудь в этом духе. Прояви свое творчесое начало.
Изобрети "динаму". И с ее помощью задинамь, что это есть AI! :)

А там уж в полную силу за материал и писать свой AI-шник!


 
KiberKot ©   (2006-04-05 21:14) [43]


> KiberKot, больно стукни этого "кое кто" ибо играл он в Need
> For Kill в которой и 50% того, что в нашей Time For Kill
> нету...

Да забей на всех, игра реальная и два года потрачено не зря. А этот кое кто, говорит что игра не плохая, а просто не верит что ее можно написать (или что то типо таго)


> "Всегда хотел игры делать."..."здать мне его надо завтра"
> ну зачем же надо было "хотеть" до крайнего срока? ;)

Просто затянул курсовую по VBA которуя , во первых не хотелось делать, во вторых у нас не одной пары в этом семестре небыло, на всех парах перней страдали, так что я вобщем и не знал как ее делать, но всетаки добил и сам написал БД.


> Cash


Да нет у меня никаких углов, кроме стрельбы побокам, в верх, низ и под углом 45 градусов.
Боты будут появлятбся после открытия определенных участков карты, а дальше что нибудь делать (наверно буду проверять растояние между героем и ботом, и исходя из этого, бот будет отбегать или подходить ближе).


 
Cash ©   (2006-04-06 09:04) [44]

KiberKot ©   (05.04.06 21:14) [43]:
А перемещаются боты как? То есть только в 4 стороны (вверх, вниз, влево
и вправо)?

Если так, то и сюда можно прикрутить угол поворота. Так просто легче
поворачивать бота.
Конечно, следует проверять близость плеера к ботам, а каждый бот пусть
решает переть к плееру или от него. Да да, все верно!

Во! у тебя же на карте есть всякие препятствия, и наверняк они где нибудь
в виде матрицы записаны. Так заставь бота просчитывать свой маршрут с
учетом этой карты препятствий. Такую вещь можно сделать с
использованием While цыкла:

while not((WpX=Ex)and(WpY=Ey)) do begin
  Изменяем WpX и WpY на те, что поближе к плееру;
  Проверяем, нет ли препятствия по этим координатам;
  Если есть, то приближаем к боту самую близкую из WpX и WpY координат;
  Записываем эти координаты в очередь маршрута;
end;

Это так, набросок. На практике там еще куча наворотов.
Ex и Ey - это положения плеера в этой матрице препятствий.
WpX и WpY - это положение осматриваемой ячейки матрицы на предмет
препятствий и, если оных нет, точка маршрута.

Тем самым бот прокладывает свой маршрут и прется на то место, где
заметил плеера.


 
KiberKot ©   (2006-04-07 03:27) [45]


> А перемещаются боты как?


Перемещаются влево, право и подпрыгивают. Тоесть прыжок это тоже перемещение, но к проверке пути, я так понимаю его ненужно подключать


> Так заставь бота просчитывать свой маршрут с
> учетом этой карты препятствий

А какой вид будет иметь матрица , ведь двух координат будет не достаточно для описания объекта. В матрицу получается нужно засунуть координаты хотябы двух углов, верхнего левого и правого нижнего, а это чеырех мерный массив


> Во! у тебя же на карте есть всякие препятствия,


На карте у меня еще толком ничего нет, только герой, который стреляет и прыгает и куча врагов, которые бестолково носятся по земле оталкиваясь друг от друга и от границ экрана


 
Cash ©   (2006-04-07 09:29) [46]

KiberKot ©   (07.04.06 03:27) [45]:
Sorry men, я что то с дуру подумал, что у тебя вид сверху.
а из:... влево, право и подпрыгивают ...
ясно, что вид сбоку.

Эти выше описанные методы хороши для вида сверху, а тут - не применимы.

Тут наверное за советом надо к Darth XProger-у, по TFK.


 
KiberKot ©   (2006-04-08 00:55) [47]


> Cash ©


>  я что то с дуру подумал, что у тебя вид сверху.
> а из:... влево, право и подпрыгивают ...

Я в самом начале писал что вид с боку, правда не в описании игры

> Эти выше описанные методы хороши для вида сверху, а тут
> - не применимы.

ну почему не применимы, мне кажется из этого может что то толковое получиться, ну на крайняк, в матрице хранить не координаты обьектов, а действия бота в определенной месности. К примеру: бот идет на встречу к плееру, перед ходом проверяет точку на которой стоит, если данные координаты указаны в матрице, то делает нужные действия. Матрицу представить в виде (x1,y1,x2,y2,действие). Действие обозначить цифрой, к примеру 1-прыгать, 2-прохода нет повяртай назад. Если же по данной области нет особых указаний, смотреть по месту положения пользователя
Ну вот примерно так. Че думаеш про это ?


> Тут наверное за советом надо к Darth XProger-у, по TFK.

XProger, общетвенность (нас двое пока :) ) требует твоего вмешательства в данный вопрос. Помоги плииз


 
XProger ©   (2006-04-08 08:06) [48]

// представление карты - блоки (в графике 16х16 каждый)
// 0 - занято, > 0 - свободно
// 1 - пустая клетка
// для бота
// BK_LEFT = 2 - идти влево
// BK_RIGHT = 4 - идти вправо
// BK_JUMP = 8 - прыгать
// BK_CROUCH = 16 - присесть
// BK_STAY = 32 - стоять (ждать врага)
map : array [0..39, 0..29] of WORD;
...
// обработка ввода для расчёта ускорения при движении
with Player, Acc do
begin
 // Player.Keys : array
 // Player.Acc : TVector
 if Keys[Left] then X := -Horiz_Accel;
 if Keys[Right] then X := +Horiz_Accel;
 if Keys[Up] then Y := -JumpSpeed;
 if Keys[Down] then X := X * chouch_k; // замедление в сидячем положении
end;

// если игрок не стоит на земле - на его ускорение действует гравитация
if not map[X div 16, Y div 16] then
 Acc.Y := Acc.Y + gravity
else
 Acc.Y := 0;

// Расчёт столкновений (кривой)
if map[(X + Acc.X) div 16, Y div 16] > 0 then X := X + Acc.X;
if map[X div 16, (Y + Acc.Y) div 16] > 0 then Y := Y + Acc.X;


Для ботов будет отличаться только взятие состояния клавиш
k := map[X div 16, Y div 16];
if k > 1 then // если блок-действие для бота
begin
 if k and BK_LEFT > 0 then Keys[Left] := True;
 if k and BK_RIGHT > 0 then Keys[Right] := True;
 if k and BK_JUMP > 0 then Keys[Up] := True;
 if k and BK_CROUCH > 0 then Keys[Down] := True;
 if k and BK_STAY > 0 then
 begin
    Keys[Left] := False;
    Keys[Right] := False;
    Keys[Up] := False;
    Keys[Down] := False;
 end;
end;

Ошибки в коде не исключены, но общая логика должна быть понятна :)


 
KiberKot ©   (2006-04-08 12:54) [49]


> XProger ©

Все понятно, кроме одного, как бот будет узнавать что ему делать, то есть
как будут задаваться флаги

>  if k and BK_LEFT > 0 then Keys[Left] := True;
>  if k and BK_RIGHT > 0 then Keys[Right] := True;
>  if k and BK_JUMP > 0 then Keys[Up] := True;
>  if k and BK_CROUCH > 0 then Keys[Down] := True;
>  if k and BK_STAY<b/> > 0 then

я так понял, что каждый из них надо будет задать вручную в массиве

> map : array [0..39, 0..29] of WORD;

а если так, то зачем делить экран на пустые и заполненные клетки


 
XProger ©   (2006-04-08 13:36) [50]

Игровая карта представляется в виде набора клеток занятых и свободных. Помимо этого свободные клетки могут давать некие указания боту.

Задавать вручную или динамически (придумай алгоритм ;)
map[i, j] := BK_LEFT or BK_JUMP; - прыгнуль влево
map[i, j] := BK_RIGHT or BK_CROUCH; - ползти гуськом вправо

и т.п.

Вообще, задачу расстановки подобных флагов рациональнее реализовать в редакторе уровней.


 
KiberKot ©   (2006-04-08 14:26) [51]

Ну в принцепе по игре все понятно, если возникнут какие вопросы, буду
спрашивать. Спасибо всем за помощь, пошол делать мега игру :))


 
WillRock ©   (2006-10-19 13:07) [52]

Классную дискуссию развели.
Спасибо вам всем за данные ответы..они мне помогут..
У меня остался один тупой вопрос ))
Как проверять столконвения м/у прямоугольником и окружностью? ))
просьба ногами не пинать ))
Просто я ни разу как то этим не занимался )


 
Shirson ©   (2006-10-19 14:39) [53]

http://www.gamedev.ru/articles/?id=70124


 
@!!ex ©   (2006-10-19 19:48) [54]

Эх... неуспел поучавствовать... :\

Но все равно вставлю свое ИМХО!
Программер без математики, как свадьба без невесты...
НЕзная математики ниче толвокого не напишеш, тем более в играх.



Страницы: 1 2 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.036 c
2-1189240396
Дядя
2007-09-08 12:33
2007.10.07
График


15-1189185382
delphiForever
2007-09-07 21:16
2007.10.07
просьба не ржать...


4-1175766573
Степан Журавлев
2007-04-05 13:49
2007.10.07
GetParent


2-1189439590
новичёк
2007-09-10 19:53
2007.10.07
Добавление форматированного куска в TRichEdit


15-1188941829
Германн
2007-09-05 01:37
2007.10.07
Скорость анимации. Глупый, но интересный для меня вопрос.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский