# gntag gntag (from German »Guten Tag«: »good day«, roughly equivalent to »g'day«) is an agent-based simulation of [tag](https://en.wikipedia.org/wiki/Tag_(game)) implemented in rust. ## Running ```sh git clone https://git.adrianheine.de/adrian/gntag.git cd gntag cargo run ``` To exit the simulation, press q, ESC or Ctrl+c. ## Using as a library `src/main.rs` is a pretty minimal example of the currently exposed high-level functionality. `gntag::agent` includes simpler agent iplementations and all the types, `gntag::world` contains `ActualWorld` and `WorldState`. ## Tests A few tests can be run with: ```sh cargo test ``` ## Benchmarks `cargo bench` runs benchmarks. Their results are available under `target/criterion/report/index.html`. ## Simulation * The world is a simple two-dimensional rectangle with integer positions * Agents can occupy the same space * Agents can make one move per simulation step, either by trying to move by at most one unit in both directions or by trying to tag another agent * Agents need to be at most one unit away in both directions from others in order to tag them * Agents act at the same time and their actions are validated against the previous state