package strategies import ( "fmt" "git.kleiax.de/homepage/board" ) // ────────────────────────────────────────────────────────────────────────────── // // STRATEGY INTERFACE // // ────────────────────────────────────────────────────────────────────────────── // type Strategy interface { Init(f *board.Field) ApplyAll() []board.ExternalChange ApplyNext() board.ExternalChange Name() string SearchProgressableCells() int } // ────────────────────────────────────────────────────────────────────────────── // // VISUALITION INTERFACE // // ────────────────────────────────────────────────────────────────────────────── // type StrategyVisualization interface { pointOut(f *board.Field) []board.Mark } // ────────────────────────────────────────────────────────────────────────────── // // BASE STRUCTURE // // ────────────────────────────────────────────────────────────────────────────── // type Base struct { name string field *board.Field changes []board.ExternalChange } func (b *Base) Init(f *board.Field) { b.field = f } func (b *Base) ApplyAll() []board.ExternalChange { changesCopy := make([]board.ExternalChange, len(b.changes)) copy(changesCopy, b.changes) for _, change := range b.changes { b.field.AddChange(&change) } b.changes = b.changes[:0] return changesCopy } func (b *Base) ApplyNext() board.ExternalChange { if len(b.changes) < 1 { return board.ExternalChange{} } changeCopy := b.changes[0] b.field.AddChange(&b.changes[0]) b.changes = b.changes[1:] return changeCopy } func (b *Base) getName() string { return "Unkown" } func (b *Base) Name() string { return fmt.Sprintf("Diese Strategie heißt: %s", b.getName()) }