Commit graph

190 commits

Author SHA1 Message Date
Rob O'Dwyer
25dc404493
DEV 1364: Allow solo games with all rulesets through the CLI (#80)
* add support for automatic solo through RulesetBuilder

* allow solo games with all modes in CLI
2022-06-08 15:45:20 -07:00
Rob O'Dwyer
426da8ac5e
reorder built-in ruleset stages so game over is checked first (#79) 2022-06-01 15:21:27 -07:00
Torben
f0dc0bcb38
DEV-1313: Add additional map types (#76)
* add helper to draw a ring of hazards

* refactor tests to not be internal tests

* add "hz_inner_wall" map

* add "hz_rings" map

* fix map registry

* fix: edge case bugs in drawRing

* remove println

* add "hz_columns"

* add "hz_rivers_bridges" map

* WIP: implementing spiral hazards map

* finish basic testing of 'hz_spiral'

* include first turn

* add "hz_hazards" map

* remove incorrect author

* add "hz_grow_box" map

* add "hz_expand_box" map

* add "hz_expand_scatter" map

* remove debug

* document the new "Range" method

* - use rules.RulesetError instead of generic error
- use a rules.Point for map rivers and bridgets map key

* use rules.RulesetError instead of errors.New

* provide more detail about boundar conditions

* fix documentation (max can be == min)

* add unit tests
2022-06-01 11:39:31 -07:00
Rob O'Dwyer
aa38bcd0eb
DEV 1283: Arcade maze map (#77)
* add "namcap" map

* adjust hazards and starting food positions

* add food randomly, not on top of hazards

* add exits on the top and bottom

* rename to arcade_maze

* add maps README

* test for ArcadeMazeMap

* adjustments to hazards in arcade_maze
2022-05-31 07:29:34 -07:00
Max Thomson
fff551599a
Json output isDraw correctly (#78) 2022-05-30 15:16:06 -07:00
Rob O'Dwyer
1adbc79168
DEV 953: Add basic maps support to CLI (#74)
* remove squad support and switch to using pipelines only in RulesBuilder

* remove spawn_food.standard from legacy ruleset definitions

* bugfix: Royale map generates Standard food

* add maps support to CLI

* add automated tests for all registered GameMap implementations

* update README
2022-05-25 11:24:27 -07:00
Torben
3bd1e47bb4
change all "int32" types to "int" (#75) 2022-05-25 11:17:41 -07:00
Rob O'Dwyer
2d8342018e
add map to snake request body (#73) 2022-05-19 12:43:03 -07:00
Rob O'Dwyer
e94d758a9b
DEV 1303: Add empty and royale maps and update game map interface (#72)
* move random generator into Settings

* add empty and royale maps

* place snakes on either cardinal or corner positions first
2022-05-17 15:45:56 -07:00
Rob O'Dwyer
6fa2da2f01 tests for SetupBoard and UpdateBoard and a bugfix 2022-05-11 16:30:08 -07:00
Rob O'Dwyer
1dcc1352cc add RegisterMap for testing convenience 2022-05-11 08:28:50 -07:00
Rob O'Dwyer
dab9178a55
DEV 1247: Add a new map generator interface (#71)
* reorganize code

* first draft of map generator interfaces

* add explicit random interface to board helpers

* implement standard map

* rename Generator to GameMap

* allow initializing snakes separately from placing them

* add random number generator to Settings

* updates to GameMap interface

* add helpers for creating and updating BoardState with maps
2022-05-11 08:26:28 -07:00
Rob O'Dwyer
1c3f434841
DEV 1253: Upgrade to Go 1.18.1 (#70)
* fix dependency that breaks on go 1.18.1

* upgrade to go 1.18.1

* upgrade golangci-lint to a version that works with go 1.18
2022-05-02 13:57:07 -07:00
Torben
d378759d58
DEV-1096 - add a new "pipeline" concept (#67)
* add a new "pipeline" concept

- added new Pipeline type which is a series of stages
- added a global registry to facilitate plugin architecture
- 100% test coverage

* Refactor rulesets to provide and use Pipeline

* fix copypasta comments

* fix lint for unused method

* include game over stages in ruleset pipelines

* clean up unused private standard methods

* remove unused private methods in squad ruleset

* remove unused private methods in royale ruleset

* refactor: pipeline clone + return next board state

* YAGNI: remove unused Append

* refactor: improve stage names

* add no-op behavior to stages for initial state

* refactor: no-op decision within stage functions

* remove misleading comment that isn't true

* dont bother checking for init in gameover stages

* remove redundant test

* refactor: provide a combined ruleset/pipeline type

* fix: movement no-op for GameOver check

IsGameOver needs to run pipeline, move snakes needs to no-op for that

* add test coverage

* refactor: improve stage names and use constants

* add Error method

Support error checking before calling Execute()

* update naming to be American style

* panic when overwriting stages in global registry

* rename "Error" method and improve docs

* use testify lib for panic assertion

* remove redundant food stage

* use ruleset-specific logic for game over checks

* re-work Pipeline errors

* rework errors again

* add defensive check for zero length snake

* use old logic which checks current state, not next

* add warning about how PipelineRuleset checks for game over
2022-04-19 15:52:57 -07:00
Josh LaFayette
86ef6ad068
Update CLI documentation (#69)
- Update usage section in the README with the latest flags.
- Update default sample output (BoardState fields have changed,
  OutOfBounds has been removed).
- Add section describing options for getting JSON output with the
  `--output` and `--debug-requests` flag.
2022-04-11 09:13:22 -07:00
Brad Van Vugt
573a93fa30
Stop spawning food in corners in competitive play. (#68) 2022-04-07 07:59:21 -07:00
BelowAverageDeveloper
762c94caf9
added TurnDuration option to cli (#62) 2022-03-28 10:22:51 -07:00
Rob O'Dwyer
447cbba8c0 add tests for convertRulesSnakes 2022-03-22 12:00:45 -07:00
Demin Dmitriy
d7d888e326 fix invalid request to /end when game ended in a draw
In `board.snakes` there would be `null` instead of `[]`.
2022-03-21 02:37:56 +03:00
Torben
397d925110
DEV-765 pipeline refactor (#64)
Refactor rulesets into smaller composable operations

In order to mix up the functionality from different rulesets like Solo, Royale, etc. the code in these classes needs to be broken up into small functions that can be composed in a pipeline to make a custom game mode.
2022-03-16 16:58:05 -07:00
Torben
5e629e9e93
DEV-765 add some additional tests (#65)
Adds additional test coverage. Re-uses standard test cases where possible and added a few additional cases specific to some modes.
2022-03-15 16:41:39 -07:00
Rob O'Dwyer
9cf20bb8ab
Add hazardMap and hazardMapAuthor to RulesetSettings (#63)
* add HazardMap and HazardMapAuthor to RulesetSettings

* test for format of hazard map properties
2022-03-03 12:21:09 -08:00
Ebbe Steenhoudt
09aa6e01f9
Fixed constrictor and wrapped names (#61) 2022-01-31 09:43:10 -08:00
bvanvugt
6e01793750 Remove equidistant food spawns that are closer to center. 2022-01-18 20:51:01 +00:00
bvanvugt
4df2c65432 Restrict fixed food spawns to only locations further from center. 2022-01-18 20:21:21 +00:00
bvanvugt
020303a8dd Isolate and improve logic to determine default move. 2022-01-11 22:44:37 +00:00
bvanvugt
a1ee890dde Update golangci-lint to 1.43.0 2022-01-10 22:26:45 +00:00
bvanvugt
e1ab986486 Bump to Go 1.17 2022-01-10 22:25:46 +00:00
Ebbe Steenhoudt
ba855a8ab1
Colored board (#59)
* New flag -c to use colors in the cli board view

* Error handeling

* Fix formatting

* Extracted ANSI escape codes into a different file

* Fixed formatting
2021-12-08 10:43:40 -08:00
Simon Agius Muscat
142a5a6ecf
Add export to file (#58)
* Initial addition of a game exporter

* Fix snake state bug, remove test logs, fix final output line being empty

* Ignore test JSONL file

* Added explanation for design decision on the you key in SnakeResponse

* Adjust gitignore to be more generic

* Retain consistency in usage of pointer

* Re-word explanation to refer to requests instead of responses

* Remove unnecessary nil check

* Check error returned by WriteString

* Change file permissions for output file

* Initialise gameexporter regardless of whether output is requested

* Print error and exit if export to file fails

* Added another comment explaining reasoning around export checks

* Fixed broken test due to changed return type
2021-12-02 09:59:20 -08:00
Rob O'Dwyer
4a9dbbcaef
DEV 559: Refactor CLI and add customizations (#57)
* move snake API structs into a new client package

* add customizations to snake objects

* refactor and add support for passing snake customizations in games
2021-11-25 14:07:56 -08:00
Aurora Walker
6140f232c2
Create CONTRIBUTING.md 2021-10-01 15:33:48 -07:00
Rob O'Dwyer
31faba642c
Add missing ruleset params to request body and --debug-requests option (#55)
* fix sending of new params

* add royale and squad settings to requests

* add --debug-requests option

* update test for request body and add helper

Co-authored-by: Penelope Phippen <penelope@hey.com>
2021-09-07 14:58:10 -07:00
Brad Van Vugt
0cba5eff59
Update CODEOWNERS 2021-09-07 09:46:35 -07:00
Brad Van Vugt
85a0edcf74
Update CODEOWNERS 2021-09-07 09:46:17 -07:00
Rob O'Dwyer
2d57653d46
add CLI flags for ruleset settings and update hazardDamagePerTurn (#53) 2021-09-02 15:32:46 -07:00
Rob O'Dwyer
e9f408cdbb
add turn to BoardState and remove it from RoyaleRuleset (#52) 2021-08-27 13:28:12 -07:00
John Oram
17556e15c1
wrapped ruleset (#30)
* wrapped ruleset

* resurrect like brad suggested

* introduce mode to binary

* go fmt

* address edge crossing collision and eating bugs

* Update board_state.go

* removed binary

* rename variable
2021-08-24 12:11:36 -07:00
Rob O'Dwyer
015b681f14
DEV-280: Extract board generation out of rules.Ruleset (#51)
* extract board generation out of rules.Ruleset

* update comment and remove redundant interface check

* clone boardState in constrictor to respect the ModifyBoardState interface
2021-08-23 17:13:58 -07:00
Rob O'Dwyer
e416384007
Refactor RoyaleRuleset and move hazard damage into StandardRuleset (#50)
* move hazard damage into StandardRuleset

* OutOfBounds -> Hazards

* remove "out of bounds" in comment

* add cases for eating food to hazard damage test
2021-08-17 16:47:06 -07:00
Nettogrof
dabbe7dfb5
Remove Eliminated Snake from the send payload (#49) 2021-07-17 13:18:43 -07:00
Luke Mitchell
97fbcb3376
Add new arg "delay" to delay board updates by x milliseconds (#48)
Co-authored-by: Brad Van Vugt <1531419+bvanvugt@users.noreply.github.com>
2021-07-04 13:48:56 -07:00
bvanvugt
d42f5f46cc CLI: Persist hazards in royale games. 2021-07-04 13:41:44 -07:00
Jiri Novotny
0331ea65f8
fixed panic when printing snake out of bounds (#46)
Co-authored-by: Jiri Novotny <hello@jiricodes.com>
2021-07-02 20:42:16 -07:00
bvanvugt
f65f6d65d7 CLI: No longer send /move requests to eliminated snakes. 2021-07-02 20:36:37 -07:00
bvanvugt
bae7a5083c CLI - Send /end request to all Battlesnakes. 2021-07-02 20:12:39 -07:00
bvanvugt
72a74a9628 Remove ruleset versions for GitHub release version (future). 2021-07-02 20:09:55 -07:00
bvanvugt
9dba91619a Fix latency string in unit test. 2021-07-02 20:08:58 -07:00
John Oram
f31bdff4b8
add ruleset data to the calls made by the cli (name and version) (#32)
* add ruleset data to the cli (name and version)
* remove double ruleset tracking with royale mode
2021-07-02 20:00:19 -07:00
Hunter Freyer
d750b08317
Change SnakeResponse.Latency to be a string. (#45)
Convert CLI Latency value from int to string, to match what the current game engine does.
2021-06-21 14:25:31 -07:00