Skip to content

Commit 006f394

Browse files
authored
New Island and Bridges variations (#107)
* Adding two new variations with hazards along the edges * Implementing code review feedback
1 parent 0061425 commit 006f394

File tree

2 files changed

+143
-15
lines changed

2 files changed

+143
-15
lines changed

maps/rivers_and_bridges.go

Lines changed: 141 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ func init() {
88
globalRegistry.RegisterMap("hz_rivers_bridges", RiverAndBridgesMediumHazardsMap{})
99
globalRegistry.RegisterMap("hz_rivers_bridges_lg", RiverAndBridgesLargeHazardsMap{})
1010
globalRegistry.RegisterMap("hz_rivers_bridges_xl", RiverAndBridgesExtraLargeHazardsMap{})
11+
globalRegistry.RegisterMap("hz_islands_bridges", IslandsAndBridgesMediumHazardsMap{})
12+
globalRegistry.RegisterMap("hz_islands_bridges_lg", IslandsAndBridgesLargeHazardsMap{})
1113
}
1214

1315
func setupRiverAndBridgesBoard(startingPositions [][]rules.Point, hazards []rules.Point, lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
@@ -103,11 +105,7 @@ func (m RiverAndBridgesMediumHazardsMap) SetupBoard(lastBoardState *rules.BoardS
103105
return rules.RulesetError("This map can only be played on a 11x11 board")
104106
}
105107

106-
err := setupRiverAndBridgesBoard(riversAndBridgesMediumStartPositions, riversAndBridgesMediumHazards, lastBoardState, settings, editor)
107-
if err != nil {
108-
return err
109-
}
110-
return nil
108+
return setupRiverAndBridgesBoard(riversAndBridgesMediumStartPositions, riversAndBridgesMediumHazards, lastBoardState, settings, editor)
111109
}
112110

113111
func (m RiverAndBridgesMediumHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
@@ -178,11 +176,7 @@ func (m RiverAndBridgesLargeHazardsMap) SetupBoard(lastBoardState *rules.BoardSt
178176
return rules.RulesetError("This map can only be played on a 19x19 board")
179177
}
180178

181-
err := setupRiverAndBridgesBoard(riversAndBridgesLargeStartPositions, riversAndBridgesLargeHazards, lastBoardState, settings, editor)
182-
if err != nil {
183-
return err
184-
}
185-
return nil
179+
return setupRiverAndBridgesBoard(riversAndBridgesLargeStartPositions, riversAndBridgesLargeHazards, lastBoardState, settings, editor)
186180
}
187181

188182
func (m RiverAndBridgesLargeHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
@@ -281,11 +275,7 @@ func (m RiverAndBridgesExtraLargeHazardsMap) SetupBoard(lastBoardState *rules.Bo
281275
return rules.RulesetError("This map can only be played on a 25x25 board")
282276
}
283277

284-
err := setupRiverAndBridgesBoard(riversAndBridgesExtraLargeStartPositions, riversAndBridgesExtraLargeHazards, lastBoardState, settings, editor)
285-
if err != nil {
286-
return err
287-
}
288-
return nil
278+
return setupRiverAndBridgesBoard(riversAndBridgesExtraLargeStartPositions, riversAndBridgesExtraLargeHazards, lastBoardState, settings, editor)
289279
}
290280

291281
func (m RiverAndBridgesExtraLargeHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
@@ -374,3 +364,139 @@ var riversAndBridgesExtraLargeHazards = []rules.Point{
374364
{X: 8, Y: 12},
375365
{X: 12, Y: 16},
376366
}
367+
368+
type IslandsAndBridgesMediumHazardsMap struct{}
369+
370+
func (m IslandsAndBridgesMediumHazardsMap) ID() string {
371+
return "hz_islands_bridges"
372+
}
373+
374+
func (m IslandsAndBridgesMediumHazardsMap) Meta() Metadata {
375+
return Metadata{
376+
Name: "hz_islands_bridges",
377+
Description: `Creates fixed maps that have a lake of hazard in the middle with rivers going in the cardinal directions and around the edges of the map. Bridges across the rivers are provided at key points`,
378+
Author: "Battlesnake",
379+
Version: 1,
380+
MinPlayers: 1,
381+
MaxPlayers: 4,
382+
BoardSizes: FixedSizes(Dimensions{11, 11}),
383+
Tags: []string{TAG_FOOD_PLACEMENT, TAG_HAZARD_PLACEMENT, TAG_SNAKE_PLACEMENT},
384+
}
385+
}
386+
387+
func (m IslandsAndBridgesMediumHazardsMap) SetupBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
388+
if !m.Meta().BoardSizes.IsAllowable(lastBoardState.Width, lastBoardState.Height) {
389+
return rules.RulesetError("This map can only be played on a 11x11 board")
390+
}
391+
392+
return setupRiverAndBridgesBoard(islandsAndBridgesMediumStartPositions, islandsAndBridgesMediumHazards, lastBoardState, settings, editor)
393+
}
394+
395+
func (m IslandsAndBridgesMediumHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
396+
return placeRiverAndBridgesFood(lastBoardState, settings, editor)
397+
}
398+
399+
var islandsAndBridgesMediumStartPositions = [][]rules.Point{
400+
{
401+
{X: 3, Y: 1}, {X: 1, Y: 3},
402+
},
403+
{
404+
{X: 9, Y: 7}, {X: 7, Y: 9},
405+
},
406+
{
407+
{X: 3, Y: 9}, {X: 1, Y: 7},
408+
},
409+
{
410+
{X: 7, Y: 1}, {X: 9, Y: 3},
411+
},
412+
}
413+
414+
var islandsAndBridgesMediumHazards = []rules.Point{
415+
{X: 5, Y: 10},
416+
{X: 5, Y: 9},
417+
{X: 5, Y: 7},
418+
{X: 5, Y: 6},
419+
{X: 5, Y: 5},
420+
{X: 5, Y: 4},
421+
{X: 5, Y: 3},
422+
{X: 5, Y: 0},
423+
{X: 5, Y: 1},
424+
{X: 6, Y: 5},
425+
{X: 7, Y: 5},
426+
{X: 9, Y: 5},
427+
{X: 10, Y: 5},
428+
{X: 4, Y: 5},
429+
{X: 3, Y: 5},
430+
{X: 1, Y: 5},
431+
{X: 0, Y: 5},
432+
{X: 1, Y: 10},
433+
{X: 9, Y: 10},
434+
{X: 1, Y: 0},
435+
{X: 9, Y: 0},
436+
{X: 10, Y: 1},
437+
{X: 10, Y: 0},
438+
{X: 10, Y: 10},
439+
{X: 10, Y: 9},
440+
{X: 0, Y: 10},
441+
{X: 0, Y: 9},
442+
{X: 0, Y: 1},
443+
{X: 0, Y: 0},
444+
{X: 0, Y: 6},
445+
{X: 0, Y: 4},
446+
{X: 10, Y: 6},
447+
{X: 10, Y: 4},
448+
{X: 6, Y: 10},
449+
{X: 4, Y: 10},
450+
{X: 6, Y: 0},
451+
{X: 4, Y: 0},
452+
}
453+
454+
type IslandsAndBridgesLargeHazardsMap struct{}
455+
456+
func (m IslandsAndBridgesLargeHazardsMap) ID() string {
457+
return "hz_islands_bridges_lg"
458+
}
459+
460+
func (m IslandsAndBridgesLargeHazardsMap) Meta() Metadata {
461+
return Metadata{
462+
Name: "hz_islands_bridges_lg",
463+
Description: `Creates fixed maps that have a lake of hazard in the middle with rivers going in the cardinal directions and around the edges of the map. Bridges across the rivers are provided at key points`,
464+
Author: "Battlesnake",
465+
Version: 1,
466+
MinPlayers: 1,
467+
MaxPlayers: 16,
468+
BoardSizes: FixedSizes(Dimensions{19, 19}),
469+
Tags: []string{TAG_FOOD_PLACEMENT, TAG_HAZARD_PLACEMENT, TAG_SNAKE_PLACEMENT},
470+
}
471+
}
472+
473+
func (m IslandsAndBridgesLargeHazardsMap) SetupBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
474+
if !m.Meta().BoardSizes.IsAllowable(lastBoardState.Width, lastBoardState.Height) {
475+
return rules.RulesetError("This map can only be played on a 19x19 board")
476+
}
477+
478+
return setupRiverAndBridgesBoard(islandsAndBridgesLargeStartPositions, islandsAndBridgesLargeHazards, lastBoardState, settings, editor)
479+
}
480+
481+
func (m IslandsAndBridgesLargeHazardsMap) UpdateBoard(lastBoardState *rules.BoardState, settings rules.Settings, editor Editor) error {
482+
return placeRiverAndBridgesFood(lastBoardState, settings, editor)
483+
}
484+
485+
var islandsAndBridgesLargeStartPositions = [][]rules.Point{
486+
{
487+
{X: 2, Y: 2}, {X: 2, Y: 6}, {X: 6, Y: 2}, {X: 6, Y: 6},
488+
},
489+
{
490+
{X: 12, Y: 2}, {X: 16, Y: 2}, {X: 16, Y: 6}, {X: 12, Y: 6},
491+
},
492+
{
493+
{X: 16, Y: 16}, {X: 16, Y: 12}, {X: 12, Y: 12}, {X: 12, Y: 16},
494+
},
495+
{
496+
{X: 2, Y: 16}, {X: 6, Y: 16}, {X: 6, Y: 12}, {X: 2, Y: 12},
497+
},
498+
}
499+
500+
var islandsAndBridgesLargeHazards = []rules.Point{
501+
{X: 9, Y: 18}, {X: 9, Y: 0}, {X: 9, Y: 1}, {X: 9, Y: 2}, {X: 9, Y: 3}, {X: 9, Y: 5}, {X: 9, Y: 6}, {X: 9, Y: 8}, {X: 9, Y: 7}, {X: 9, Y: 9}, {X: 9, Y: 10}, {X: 9, Y: 11}, {X: 9, Y: 12}, {X: 9, Y: 13}, {X: 9, Y: 15}, {X: 9, Y: 16}, {X: 9, Y: 17}, {X: 2, Y: 9}, {X: 1, Y: 9}, {X: 0, Y: 9}, {X: 3, Y: 9}, {X: 5, Y: 9}, {X: 6, Y: 9}, {X: 7, Y: 9}, {X: 8, Y: 9}, {X: 10, Y: 9}, {X: 16, Y: 9}, {X: 15, Y: 9}, {X: 13, Y: 9}, {X: 12, Y: 9}, {X: 11, Y: 9}, {X: 17, Y: 9}, {X: 18, Y: 9}, {X: 10, Y: 8}, {X: 8, Y: 8}, {X: 8, Y: 10}, {X: 10, Y: 10}, {X: 18, Y: 8}, {X: 18, Y: 7}, {X: 18, Y: 6}, {X: 18, Y: 10}, {X: 18, Y: 11}, {X: 18, Y: 12}, {X: 0, Y: 10}, {X: 0, Y: 11}, {X: 0, Y: 12}, {X: 0, Y: 8}, {X: 0, Y: 7}, {X: 0, Y: 6}, {X: 6, Y: 0}, {X: 7, Y: 0}, {X: 8, Y: 0}, {X: 10, Y: 0}, {X: 11, Y: 0}, {X: 12, Y: 0}, {X: 10, Y: 18}, {X: 11, Y: 18}, {X: 12, Y: 18}, {X: 8, Y: 18}, {X: 7, Y: 18}, {X: 6, Y: 18}, {X: 0, Y: 18}, {X: 0, Y: 17}, {X: 0, Y: 16}, {X: 0, Y: 15}, {X: 1, Y: 18}, {X: 2, Y: 18}, {X: 3, Y: 18}, {X: 1, Y: 17}, {X: 15, Y: 18}, {X: 16, Y: 18}, {X: 17, Y: 18}, {X: 18, Y: 18}, {X: 18, Y: 17}, {X: 18, Y: 16}, {X: 18, Y: 15}, {X: 17, Y: 17}, {X: 18, Y: 3}, {X: 18, Y: 2}, {X: 18, Y: 1}, {X: 18, Y: 0}, {X: 17, Y: 0}, {X: 16, Y: 0}, {X: 15, Y: 0}, {X: 17, Y: 1}, {X: 0, Y: 0}, {X: 1, Y: 0}, {X: 2, Y: 0}, {X: 3, Y: 0}, {X: 0, Y: 1}, {X: 0, Y: 2}, {X: 0, Y: 3}, {X: 1, Y: 1}, {X: 10, Y: 1}, {X: 8, Y: 1}, {X: 8, Y: 17}, {X: 10, Y: 17}, {X: 17, Y: 10}, {X: 17, Y: 8}, {X: 1, Y: 8}, {X: 1, Y: 10},
502+
}

maps/rivers_and_bridges_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ func TestRiversAndBridgetsHazardsMap(t *testing.T) {
2727
{maps.RiverAndBridgesMediumHazardsMap{}, 11, 11},
2828
{maps.RiverAndBridgesLargeHazardsMap{}, 19, 19},
2929
{maps.RiverAndBridgesExtraLargeHazardsMap{}, 25, 25},
30+
{maps.IslandsAndBridgesMediumHazardsMap{}, 11, 11},
31+
{maps.IslandsAndBridgesLargeHazardsMap{}, 19, 19},
3032
}
3133

3234
// check all the supported sizes

0 commit comments

Comments
 (0)