Jumper (日本語)

Jumper は一定対価 2D 格子に基づいたゲーム向けに設計された経路探索ライブラリです。それは電光石火のような高速性および軽量性を目標としています。さらに明瞭な公開インタフェースにより非常に親しみやすく簡単に使える機能を特徴としています。

技術面の注釈

Jumper は多数の探索アルゴリズムを実装しています: A-star (A・スター), Dijkstra (ダイクストラ)、第一幅探索、第一深度探索および跳躍地点探索(すべての中で最も高速です)。

コンソールにて実行するベンチマーク・プログラムは Github にて提供されています。それは 2012 Grid-based Path Planning Competition (2012年 格子に基づく経路探索大会) による 132 枚のマップ一式を特徴としています。

使用方法

Jumper の使用は簡単です。こちらは利用可能な最新版を使用した基本的な用例です。

-- 使用方法の用例
-- 最初に、衝突マップを設定します
local map = {
    {0,1,0,1,0 },
    {0,1,0,1,0 },
    {0,1,1,1,0 },
    {0,0,0,0,0 },
}
-- 歩行可能なタイルの値
local walkable = 0

-- ライブラリの設定
local Grid = require ("jumper.grid") -- grid (格子) クラス
local Pathfinder = require ("jumper.pathfinder") -- 経路探索者の恋人

-- grid オブジェクトの作成
local grid = Grid(map)
-- 跳躍地点探索 (JPS: Jump Point Search) を使用して pathfinder オブジェクトを作成
local myFinder = Pathfinder('JPS', grid, walkable)

-- 出発点と到達点の座標位置を定義します
local startx, starty = 1,1
local endx, endy = 5,1

-- 経路、およびその距離を計算します
local path, length = myFinder:getPath(startx, starty, endx, endy)
if path then
  print(('Path found! Length: %.2f'):format(length))
    for node, count in path:iter() do
      print(('Step: %d - x: %d - y: %d'):format(count, node.x, node.y))
    end
end

--> 出力:
--> Path found! Length: 8.83
--> Step: 1 - x: 1 - y: 1
--> Step: 2 - x: 1 - y: 3
--> Step: 3 - x: 2 - y: 4
--> Step: 4 - x: 4 - y: 4
--> Step: 5 - x: 5 - y: 3
--> Step: 6 - x: 5 - y: 1

Jumper は経路探索の動作をカスタマイズするために非常に豊富なオプションを提供します。それらを理解するためには善意の Readme を読んで確認してください。

ご意見

なんらかの質問、提案、改善案、またはプロジェクトにて Jumper を使用している場合は、開発者は反響を聞くことを必要としています。問題/提案は 電子メール または GitHub にあるプロジェクトの問題追跡所へ投稿することができます。

リンク