Skip to content

Java library for pretty printing hexagonal grids to the command line using ASCII art.

License

Notifications You must be signed in to change notification settings

cmelchior/asciihexgrid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ascii Hexagonal Grid Pretty Printer

Ascii Hexagonal Grid Pretty Printer is a Java based tool that can output a hexagonal grid to the commandline. This enables a visual inspection of the state of a hex grid which can be usefull for eg. debugging hexagonal grid states.

The tool supports flat and pointed hexes, 2 lines of text, a custom filler char as well as different hex sizes.

1. Usage

Add the following dependency (requires that the library has been built and deployed):

repositories {
    mavenLocal()
}

dependencies {
    implementation 'dk.ilios.asciihexgrid:asciihexgrid:1.0`
}

Build a hex grid like this:

AsciiBoard board = new AsciiBoard(0, 2, 0, 1, new SmallFlatAsciiHexPrinter());
board.addHex("HX1","-B-", '#', 0, 0);
board.addHex("HX2","-W-", '+', 1, 0);
board.addHex("HX3","-W-", '-', 2, 0);
board.addHex("HX3","-B-", '•', 2, 1);
board.prettyPrint(true);

output will look like this:

| = = = = = = = = = = = = |
|    _ _                  |
|  /# # #\                |
| /# HX1 #\ _ _           |
| \# -A- #/+ + +\         |
|  \#_#_#/+ HX2 +\ _ _    |
|        \+ -B- +/- - -\  |
|         \+_+_+/- HX3 -\ |
|               \- -C- -/ |
|                \-_-_-/  |
|                /• • •\  |
|               /• HX4 •\ |
|               \• -D- •/ |
|                \•_•_•/  |
|                         |
| = = = = = = = = = = = = |

2. Coordinate system

The hex grids uses a trapezoidal/axial coordinate system. The axis' look a little different depending on flat or pointed orientation.

Flat orientation:

          _ _
        /     \
   _ _ /(0,-1) \ _ _
 /     \  -R   /     \
/(-1,0) \ _ _ /(1,-1) \
\  -Q   /     \       /
 \ _ _ / (0,0) \ _ _ /
 /     \       /     \
/(-1,1) \ _ _ / (1,0) \
\       /     \  +Q   /
 \ _ _ / (0,1) \ _ _ /
       \  +R   /
        \ _ _ /

Pointy orientation:

       / \     / \
     /     \ /     \
    | -1,-1 |  1,-1 |
    |   -R  |       |
   / \     / \     / \
 /     \ /     \ /     \
| -1,0  |  0,0  |  1,0  |
|  -Q   |       |   +Q  |
 \     / \     / \     /
   \ /     \ /     \ /
    | -1,1  |  0,1  |
    |       |   +R  |
     \     / \     /
       \ /     \ /

Negative coordinates are currently not supported, ie. (0,0) is the top-left corner. If you hex grid have negative coordinates, they can be shifted correctly by the following algorithm (pseducode):

int adjustQ = hexes.getMinQ();
int adjustR = hexes.getMinR();
board.addHex("HX1","-A-", hex.getQ() - adjustQ, hex.getR() - adjust);

3. Examples

Currently, 4 types of hexes are supported: Small/large flat and small/large pointed. Examples can be seen below:

Small flat:

   _ _
 /• • •\
/• HX1 •\ _ _
\• -B- •/- - -\
 \•_•_•/- HX2 -\ _ _
       \- -W- -/- - -\
        \-_-_-/- HX3 -\
              \- -W- -/
               \-_-_-/
               /• • •\
              /• HX4 •\
              \• -B- •/
               \•_•_•/

Large flat:

   _ _ _ _
  / • • • \
 /• • • • •\
/•   HX1   •\_ _ _ _
\•   -B-   •/ - - - \
 \• • • • •/- - - - -\
  \_•_•_•_/-   HX2   -\_ _ _ _
          \-   -W-   -/ - - - \
           \- - - - -/- - - - -\
            \_-_-_-_/-   HX3   -\
                    \-   -W-   -/
                     \- - - - -/
                      \_-_-_-_/
                      / • • • \
                     /• • • • •\
                    /•   HX4   •\
                    \•   -B-   •/
                     \• • • • •/
                      \_•_•_•_/

Small pointy:

   /•\     /-\     /-\
 /• • •\ /- - -\ /- - -\
|• HX1 •|- HX2 -|- HX3 -|
|• -B- •|- -W- -|- -W- -|
 \• • •/ \- - -/ \- - -/•\
   \•/     \-/     \-/• • •\
                    |• HX4 •|
                    |• -B- •|
                     \• • •/
                       \•/

Large pointy:

     /•\         /-\         /-\
   /• • •\     /- - -\     /- - -\
 /• • • • •\ /- - - - -\ /- - - - -\
|•   HX1   •|-   HX2   -|-   HX3   -|
|•   -B-   •|-   -W-   -|-   -W-   -|
|• • • • • •|- - - - - -|- - - - - -|
 \• • • • •/ \- - - - -/ \- - - - -/•\
   \• • •/     \- - -/     \- - -/• • •\
     \•/         \-/         \-/• • • • •\
                              |•   HX4   •|
                              |•   -B-   •|
                              |• • • • • •|
                               \• • • • •/
                                 \• • •/
                                   \•/

4. Build

For building and publishing the library. Run

> ./gradlew publishToMavenLocal

from the command line. The jar can now be found in ~/.m2/repository/dk/ilios/asciihexgrid and can be included using the mavenLocal() repository.

5. Credit

For an incredible useful and thorough guide on all things hexagonal grid related, see this excellent blog post by Red Blob Games:

http://www.redblobgames.com/grids/hexagons/

About

Java library for pretty printing hexagonal grids to the command line using ASCII art.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages