package game import ( "lcthw.dev/go/ttarpit/config" "lcthw.dev/go/ttarpit/data" "lcthw.dev/go/ttarpit/builder" . "lcthw.dev/go/ttarpit/debug" "time" "fmt" ) type Game struct { settings config.Config HP int Errors int StartTime time.Time EndTime time.Time ErrorLog []data.ErrInfo ErrorsSeen map[string]int } func New(settings config.Config) *Game { game := new(Game) game.settings = settings game.HP = settings.StartingHP game.StartTime = time.Now() time_out, err := time.ParseDuration(settings.Deadline) if err != nil { panic(err) } game.EndTime = time.Now().Add(time_out) game.ErrorsSeen = make(map[string]int, 10) return game } func (game *Game) ClearLog() { clear(game.ErrorsSeen) game.ErrorLog = game.ErrorLog[:0] } func (game *Game) SeenError(errinfo data.ErrInfo) int { key := fmt.Sprintf("%s:%d", errinfo.File, errinfo.Line) game.ErrorsSeen[key]++ return game.ErrorsSeen[key] } func (game *Game) TakeHit(build *builder.Builder, errinfo data.ErrInfo) { if game.SeenError(errinfo) > 1 && game.settings.OneErrorPerLine { return } game.Errors++ game.HP-- game.ErrorLog = append(game.ErrorLog, errinfo) Log.Println("============== PROCESS EXIT") Log.Printf("==== HP: %d Errors: %d =====\n", game.HP, game.Errors) if game.HP <= 0 { Log.Println("!!!!!! YOU DIED !!!!!!!") } Log.Println("===========================") }