Карта в игре - двумерный массив, где координаты x и y - соответствующие индексы. Каждая клетка характеризируется типом клетки ( лес, вода, дорога и т.п.) и доступностью. Алгоритм должен просчитывать поиск пути только по доступным клеткам. Расстояние между клетками одинаковое. В принципе, можно было преобразовать матрицу в элементарный граф, и работать с графом, но это только дополнительные затраты. Вместо проверок типа С[i,j] == ∞, я создал функцию, которая проверяет на смежность две ячейки матрицы. Кстати, с помощью этой функции можно регулировать, можно ли ходить по диагонали или нет ( путем правильных проверок ). И вот, после двух вечеров готова реализация поиска кратчайшего пути. Поступил по алгоритму Флойда, где сначала просчитываются пути от любой к любой ячейки, а потом с легкостью может быть получен кратчайший путь конкретных вершин. Это выгодно, потому как вычисления проводятся только при инициализации движка. Вчера просто скопировал алгоритм, подставив нужные данные - не заработал ( заработал, но на половину ). Не просчитывал пути, между которыми более одной ячейки. Пришлось все таки вникать в алгоритм, и делать под себя. Но зато сейчас - полностью рабочий алгоритм. В результате два двумерных массива размерами [x*y][x*y], где x и y - размеры карты ( матрицы ). В одном хранятся короткие пути, в другом - длинна между вершинами. В изучении этого вопроса очень помогла статья www.dtf.ru/articles/read.php.
Кстати, если разрешить ходить по диагонали, то алгоритм этим злоупотребляет. И вместо прямой линии предпочитает ходить по диагонали из стороны в сторону. При этом длинна между вершинами не меняется.
Если кому надо, то могу выложить свою реализацию с комментариями.
Сегодня пару часов занимался онлайн игрой ( пора бы уже придумать название, чтобы не называть игру игрой, а по названии ). В ходе разработки структуру базы пришлось изрядно поменять. Все идеи, которые были актуальны вчера, сегодня заменились новыми, более подходящими. Реализовал базовые классы игрока, npc и их характеристики. Продумал наследования. При загрузке сервера он размещает несколько мобов на карту. За это время очень устал, поэтому, продолжать сегодня разработку наверное не буду. Пока просру проведу с пользой время, в поисках новых идей и решений.
Недавно начал работу над собственным проектом ( якобы хобби ). Это будет онлайн-игра ( каких сейчас как говна ). Но я постараюсь реализовать ее на мобильный ( J2ME ). Причем здесь ЖЖ? Я здесь планирую писать о прогрессе развития игры. Будет самоконтролем, большей мотивацией, для уменьшения желания просто "забить", узнать мнение других, да и, думаю, другим будет интересно почитать. И еще я хотел вести свой блог ).
Сразу предупреждаю - будет много технической информации связанной с программированием ( ну а о чем еще писать, как не о приемах, которые я заюзал в своей практике ). Сервер игры будет написан на Яве ( Java ), используя базу данных MySQL, клиент на J2ME. В будущем возможен клиент и для PC. ( или сначала будет для PC, а потом для J2ME - хз ).
Про игру. Т.к. на мобильных телефона часто будет дубовый GPRS ( нужно охватить наибольшую часть аудитории ), поэтому особого экшна в игре не добиться ( представляю реакцию игрока, которого убили из-за задержки в сети ). Планирую сделать смешанный игровой процесс. Весь игровой мир будет в реальном времени, а бой будет пошаговой. При этом в бой могут присоединиться другие участники ( игроки или мобы ). Такое поведение спижжено придумано по мотивам игры Fallout. Элементы игры, такие как персонажи, локации, предметы и т.п. еще не придумал, да и пока не надо - тружусь над реализацией логики. Но это будет игра не о гномах и орках или космических баталиях ( уж очень это банально просто ). Нужно какую-то особую идею.. Думаю появится в процессе разработки.
За два дня еще особо ничего не готово:
создан проект в NetBeans'е ( это уже залог успеха );
сервер на самой ранней стадии ( пока только грузит и держит в памяти локацию );
спроектирована БД.
Ну это пока все, что можно сказать. Еще немного расскажу про себя: Звать меня ..., а впрочем никого не волнует как меня звать. Здесь я просто kukunin (кстати читается как "Кукунин", от моей фамилии). Не звучит, но зато писать просто. Мне 17 лет, но свое знакомство с интернетом начал еще в далеком 7 классе. С тех пор научился хорошо верстать странички, девелопить на PHP с MySQL, а с недавних пор практикуюсь в прикладном программировании ( начинал с С++ и Qt, закончил Java'ой ). Ярый линуксоид. Венду не употребляю. Уже полгода как вместо учебы, хожу на роботу. Вот так и живу.
P.S. Раньше опыта блоговедения не имел, если что не по теме пишу - говорите, не стесняйтесь.
Это СуперТукс: религиозный идол и покровитель линуксоидов ( людей, которые используют Linux вместо венды ). Существует древнее пророчество, что однажды настанет Вендокапец, и тогда именно СуперТукс…
Для моей головы если говорят "Не хочешь купить молока"? Я принципиально скажу "НЕТ".Отрицание, оно и в Африке отрицание. Еще меня бесить когда говорят: Извиняюсь и убираюсь. Получается,что человек…
Comments
да будет с тобой сила :-)