sqrid provides square grid coordinates and related operations, in a single-file create, with no dependencies.
Qa
: absolute coordinates, positionThe [Qa
] type represents an absolute position in a square
grid. The type itself receives the height and width of the grid as
const generic parameter.
We should usually create a type alias for the grid size we are using:
```rust use sqrid;
type Qa = sqrid::Qa<6, 7>; ```
We can get [Qa
] instances by:
- Using one of the const associated items:
rust
type Qa = sqrid::Qa<6, 7>;
const MyFirst : Qa = Qa::FIRST;
const MyLast : Qa = Qa::LAST;
- Using try_from
with a (i16, i16)
tuple or a tuple reference:
```rust
use std::convert::TryFrom;
use std::error::Error;
type Qa = sqrid::Qa<6, 7>; const MyFirst : Qa = Qa::FIRST;
fn main() -> Result<(), Box
println!("qa1: {}", qa1);
Ok(())
}
- Calling [`Qa::new`], which checks the bounds in const contexts:
rust
type Qa = sqrid::Qa<6, 7>;
const MYFIRST : Qa = Qa::new::<3, 4>();
The following, for instance, doesn't compile:
rust
type Qa = sqrid::Qa<6, 7>;
const MYFIRST : Qa = Qa::new::<12, 4>();
- Calling [`Qa::iter`] to iterate all coordinates in the grid:
rust
type Qa = sqrid::Qa<6, 7>;
for qa in Qa::iter() {
println!("{}", qa);
}
```
Qr
: relative coordinates, direction, movementThis type represents a relative movement of one square. It can
only be one of the 4 cardinal directions (N, E, S, W) if the
DIAG
argument is false, or one of the 8 directions when it's
true.
It's a building block for paths, iterating on a [Qa
] neighbors,
etc. It effectively represents the edges in a graph where the
[Qa
] type represents nodes.
We can get [Qr
] instances by:
- Using one of the const associated items that represent all
cardinal directions (recommended):
rust
use sqrid::Qr;
const Right : Qr<false> = Qr::E;
const Down : Qr<false> = Qr::S;
- Using try_from
with a (i16, i16)
tuple or a tuple reference:
```rust
use std::convert::TryFrom;
use std::error::Error;
use sqrid::Qr;
fn main() -> Result<(), Box
- Calling [`Qr::new`], which checks the bounds in const contexts:
rust
use sqrid::Qr;
const DOWNRIGHT : Qr
The following, for instance, doesn't compile due to the argument
being false, which means that diagonals are not supported:
rust
use sqrid::Qr;
const DOWNRIGHT : Qr
- Calling [`Qr::iter`] to iterate all directions:
rust
for qr in sqrid::Qr::