# Jumper

## What's this ?

Jumper is a pathfinding library designed for uniform-cost 2D grid-based games. It aims to be lightning fast and lightweight. It also features a clean public interface with chaining features which makes it very friendly and easy to use.

## Technical notes

Jumper implements a lots if search algorithms: A-star, Dijkstra, Breadth-First search, Depth First search and Jump Point search (the fastest amongst all).

A benchmark program running in console is available on Github. It features a set of 132 maps from the 2012 Grid-based Path Planning Competition.

## Usage

Jumper is easy to use. Here is a basic example using the latest version available.

    -- Usage Example-- First, set a collision maplocal map = {
        {0,1,0,1,0 },
        {0,1,0,1,0 },
        {0,1,1,1,0 },
        {0,0,0,0,0 },
    }
    -- Value for walkable tiles
    local walkable = 0

    -- Library setup
    local Grid = require ("jumper.grid") -- The grid class
    local Pathfinder = require ("jumper.pathfinder") -- The pathfinder lass

    -- Creates a grid object
    local grid = Grid(map)
    -- Creates a pathfinder object using Jump Point Search
    local myFinder = Pathfinder('JPS', grid, walkable)

    -- Define start and goal locations coordinates
    local startx, starty = 1,1
    local endx, endy = 5,1

    -- Calculates the path, and its length
    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

    --> Output:
    --> 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 offers a lot more options to customize the pathfinding behavior. Please, kindly check out the Readme to figure them out.

## Feedback

If you have any question, proposal, idea to improve, or if you are just using Jumper in a project, I would love to hear your feedback. Issues/suggestions can be posted on the project issue tracker on Github, or by e-mail.

## Links

- Source
- Forum thread
- README.md
- Demos

Category:

- Libraries