tanks/docs/running.md

74 lines
1.7 KiB
Markdown

---
title: Running Tanks
---
Unfortunately, it's kind of a mess right now.
I know there are a few forks of this code,
and I would love it if someone proposed a merge to clearly illustrate how to run tanks.
When I spin up a new tanks game,
typically I run something like:
while sleep 60; do ./round.sh */; done
This assumes all your tanks directories are in the same place as `round.sh`.
Included programs
-----------------
I tried to stick with the Unix philosophy of one program per task. I
also tried to avoid doing any string processing in C. The result is a
hodgepodge of C, Bourne shell, and awk, but at least each piece is
fairly simple to audit.
### round.sh tank1 tank2 ...
Runs a single round, awards points with rank.awk, and creates a new
summary.html with summary.awk. This is the main interface that you want
to run from cron or whatever.
### forftanks tank1 tank2 ...
A program to run a round of tanks and output a JSON description of the
game. This is what tanks.js uses to render a game graphically.
The object printed contains:
[[game-width, game-height],
[[tank1-color,
[[sensor1range, sensor1angle, sensor1width, sensor1turret],
...]],
...],
[[
[tank1x, tank1y, tank1angle, tank1sensangle,
tank1flags, tank1sensors],
...],
...]]
If file descriptor 3 is open for writes, it also outputs the results of
the round to fd3.
### rank.awk
Processes the fd3 output of forftanks to award points and output an
HTML results table.
### summary.awk tank1 tank2
Creates summary.html, linking to all rounds and showing overall
standing.
### designer.cgi
Accepts form input and writes a tank.