A kind of Augmented Reality programming game that makes you a better programmer.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
ttarpit/game/engine.go

71 lines
1.4 KiB

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("===========================")
}