Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 13:16   #11
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Виталий Желтяков
Почему:
Цитата:
$map_cell['1']['1'] = 2;
$map_cell['1']['2'] = 10;
Не вижу связь..

Вспоминаю работу в графическом редакторе. К примеру когда проводишь линию с одной точки в другую линия как то по пикселям рассчитывает по каким именно пикселям пройти ей нужно...

Последний раз редактировалось Abuhamed; 04.02.2011 в 13:26.
Abuhamed вне форума Ответить с цитированием
Старый 04.02.2011, 13:33   #12
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Не вижу связь..
Расшифрую:
Код:
$map_cell['1']['1'] = 2; // Ячейка 1 связана с ячейкой 2 
$map_cell['1']['2'] = 10;  // Ячейка 1 связана с ячейкой 10 
$map_cell['1']['3'] = 9;  // Ячейка 1 связана с ячейкой 9
Можно заменить на следующие:
Код:
$map_cell['1']['a'] = 2; // Ячейка 1 связана с ячейкой 2 
$map_cell['1']['b'] = 10;  // Ячейка 1 связана с ячейкой 10 
$map_cell['1']['c'] = 9;  // Ячейка 1 связана с ячейкой 9
Второй параметр - это не координата, а порядок перебора направлений.

Цитата:
Вспоминаю работу в графическом редакторе. К примеру когда проводишь линию с одной точки в другую линия как то по пикселям рассчитывает по каким именно пикселям пройти ей нужно...
Она тоже условно рассчитывается. На больших расстояниях такая последовательности выглядит как линия, а на малых могут быть большие вариации.
Единственного и точного решения нет. Тут всё зависит от направления обхода, определённого в связях. В нашем примере обход организован по часовой стрелке, поэтому будет выбрана траектория прижимающиеся к нижнему краю поля.
Виталий Желтяков вне форума Ответить с цитированием
Старый 04.02.2011, 13:44   #13
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Для уменьшения вариаций можно использовать ячейки с меньшим количеством возможных направлений ходов. Этого можно достигнуть двумя способами:
- сменить квадраты ячеек на шестиугольники или треугольники,
- добавить значительное количество препятствий.

Лучше объясните для чего Вам нужны ячейки по которым полетит пуля?

Последний раз редактировалось Виталий Желтяков; 04.02.2011 в 13:52. Причина: Дополнение
Виталий Желтяков вне форума Ответить с цитированием
Старый 04.02.2011, 14:22   #14
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Ячейки нужны что бы игрок видел каким путем летит пуля. И если что проверить на этих ячейках препятствии.
Abuhamed вне форума Ответить с цитированием
Старый 04.02.2011, 14:28   #15
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

И вариантов полета не так и много а точнее одна. Точки А и Б лежат на одной прямой. Исходя из всей кашы получим функцию. У нас есть 2 точки на координатной прямой, за ними можем найти саму функцию. Для этого решаем системой уравнений и отнимаем и получаем число k а потом получаем число b. Т.к. линейную функцию можно представить так : y=kx+b. И потом попросту подставляем значения х и получаем значения y. И у нас будут координаты квадратиков(точек,линии) на которой лежат две наши точки А и Б(игроки) и потом просто берем отрезок на между ними. Не зря я в школе учился
P.S. скинул 100р на счет форума.
Abuhamed вне форума Ответить с цитированием
Старый 04.02.2011, 14:48   #16
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Ячейки нужны что бы игрок видел каким путем летит пуля. И если что проверить на этих ячейках препятствии.
Здесь нужно поступать следующим способом:

- Описанный выше алгоритм реализуется также на JS (естественно, дублируясь на сервере). Менять в нём, кроме названий переменных, ничего не нужно.
В результате мы получим некий массив ячеек с разметкой пути (рисунок 4) на клиенте.
- Строим возможную траекторию движения пули, используя массив связей от начальной точки. Например:
+ до цели 7 шагов,
+ находим первую попавшуюся ячейку прилегающую к ячейке с path = 100 (у нас это игрок А) с номером 7-1 = 6 (например, ячейка 42) и выделяем её,
+ находим первую попавшуюся ячейку прилегающую к ячейке с path = 6 (ячейка 42) с номером 6-1 = 5 (например, ячейка 43) и выделяем её,
+ повторяем процедуру пока не достигнем цели.

Что бы путь был близок к прямой, надо уменьшить число возможных переходов с ячейки (см. выше). Также можно выбрать подходящую последовательность перебора направлений связей.

По поводу препятствий:
- Вычислить, какое препятствие находиться по прямой можно, рассчитав расстояние от начала до препятствия, от препятствия до цели. Если сумма будет равна пути на прямую (без препятствий), то препятствие находится на прямой линии и мешает. Вычисляется всё это по тому же алгоритму.
Это достаточно громоздко, поэтому лучше обозначить факт нахождения на выбранном пути препятствия (алгоритм описан в начале) и как-нибудь его выделить. Этот подход приемлем - пусть игроки немного думают.
Виталий Желтяков вне форума Ответить с цитированием
Старый 04.02.2011, 14:51   #17
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

Виталий Желтяков
Я уже нашел математическое решение своей задачи. И продолжаю писать супер пупер бои для своей игрушки)
Abuhamed вне форума Ответить с цитированием
Старый 04.02.2011, 14:57   #18
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
И вариантов полета не так и много а точнее одна. Точки А и Б лежат на одной прямой. Исходя из всей кашы получим функцию. У нас есть 2 точки на координатной прямой, за ними можем найти саму функцию. Для этого решаем системой уравнений и отнимаем и получаем число k а потом получаем число b. Т.к. линейную функцию можно представить так : y=kx+b. И потом попросту подставляем значения х и получаем значения y. И у нас будут координаты квадратиков(точек,линии) на которой лежат две наши точки А и Б(игроки) и потом просто берем отрезок на между ними. Не зря я в школе учился
Мда... Для данного случая это прокатит и наверное будет по-проще чем мой алгоритм.
Что-то Я увлёкся с универсальностью алгоритма... Хотя Я думаю, мой вариант Вам тоже понадобится - игроки же будут ходить.
Виталий Желтяков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бд + расчет в % Dev1 БД в Delphi 2 12.05.2010 13:19
Алгоритм прохождения лабиринта PAVEL315 Общие вопросы Delphi 13 02.01.2010 01:22
Расчет из 3 листов maksvas Microsoft Office Excel 6 18.11.2009 10:11
Сложный расчет З/П VictorM Microsoft Office Excel 7 08.11.2009 16:51
Кредит, расчет. valerij Microsoft Office Excel 6 14.04.2009 23:15