From 09e9b9d80674da2aa9c14a31a413af1d55889ddb Mon Sep 17 00:00:00 2001 From: Robert Lowry Date: Tue, 19 Nov 2024 18:49:36 -0600 Subject: [PATCH] add demo warriors when no arguments are given --- .gitignore | 4 ++-- cmd/vmars/game.go | 14 -------------- cmd/vmars/main.go | 40 +++++++++++++++++++++++++++------------- cmd/vmars/sim.go | 15 +++++++++++++++ embed.go | 9 ++++++--- load_test.go | 4 ++-- sim_test.go | 4 ++-- 7 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 cmd/vmars/sim.go diff --git a/.gitignore b/.gitignore index d6a9255..30b0338 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -vmars -gmars +/vmars +/gmars diff --git a/cmd/vmars/game.go b/cmd/vmars/game.go index b66df49..d1a1748 100644 --- a/cmd/vmars/game.go +++ b/cmd/vmars/game.go @@ -74,20 +74,6 @@ func (g *Game) handleInput() { } } -func (g *Game) runCycle() { - if g.finished { - return - } - - count := g.sim.WarriorCount() - living := g.sim.WarriorLivingCount() - if ((count > 1 && living > 1) || living > 0) && g.sim.CycleCount() < g.sim.MaxCycles() { - g.sim.RunCycle() - } else { - g.finished = true - } -} - func (g *Game) Update() error { speed := speeds[g.speedStep] diff --git a/cmd/vmars/main.go b/cmd/vmars/main.go index 87b4b5a..f2a209d 100644 --- a/cmd/vmars/main.go +++ b/cmd/vmars/main.go @@ -92,24 +92,38 @@ func main() { if len(args) > 2 { fmt.Fprintf(os.Stderr, "only 2 warrior battles supported") os.Exit(1) + } else if len(args) == 0 { + fmt.Fprintf(os.Stderr, "loading demo warriors") } warriors := make([]gmars.WarriorData, 0) - for _, arg := range args { - in, err := os.Open(arg) - if err != nil { - fmt.Printf("error opening warrior file '%s': %s\n", arg, err) - os.Exit(1) + if len(args) == 0 { + for _, data := range [][]byte{gmars.BombSpiral_94_red, gmars.SimpleShot_94_red} { + warrior, err := gmars.CompileWarrior(bytes.NewReader(data), config) + if err != nil { + fmt.Printf("error compiling build-in warrior file: %s\n", err) + os.Exit(1) + } + + warriors = append(warriors, warrior) } - defer in.Close() - - warrior, err := gmars.CompileWarrior(in, config) - if err != nil { - fmt.Fprintf(os.Stderr, "error parsing warrior file '%s': %s\n", arg, err) - os.Exit(1) + } else { + for _, arg := range args { + in, err := os.Open(arg) + if err != nil { + fmt.Printf("error opening warrior file '%s': %s\n", arg, err) + os.Exit(1) + } + defer in.Close() + + warrior, err := gmars.CompileWarrior(in, config) + if err != nil { + fmt.Fprintf(os.Stderr, "error parsing warrior file '%s': %s\n", arg, err) + os.Exit(1) + } + + warriors = append(warriors, warrior) } - - warriors = append(warriors, warrior) } sim, err := gmars.NewReportingSimulator(config) diff --git a/cmd/vmars/sim.go b/cmd/vmars/sim.go new file mode 100644 index 0000000..8631f41 --- /dev/null +++ b/cmd/vmars/sim.go @@ -0,0 +1,15 @@ +package main + +func (g *Game) runCycle() { + if g.finished { + return + } + + count := g.sim.WarriorCount() + living := g.sim.WarriorLivingCount() + if ((count > 1 && living > 1) || living > 0) && g.sim.CycleCount() < g.sim.MaxCycles() { + g.sim.RunCycle() + } else { + g.finished = true + } +} diff --git a/embed.go b/embed.go index 724fd7f..998b9d0 100644 --- a/embed.go +++ b/embed.go @@ -6,11 +6,14 @@ import ( var ( //go:embed warriors/88/imp.red - imp_88_red []byte + Imp_88_red []byte //go:embed warriors/94/imp.red - imp_94_red []byte + Imp_94_red []byte //go:embed warriors/94/simpleshot.red - simpleshot_94_red []byte + SimpleShot_94_red []byte + + //go:embed warriors/94/bombspiral.red + BombSpiral_94_red []byte ) diff --git a/load_test.go b/load_test.go index 5c74e3f..ebc03f1 100644 --- a/load_test.go +++ b/load_test.go @@ -18,7 +18,7 @@ type instructionParseTestCase struct { func TestLoadImp88(t *testing.T) { config := ConfigKOTH88 - reader := bytes.NewReader(imp_88_red) + reader := bytes.NewReader(Imp_88_red) data, err := ParseLoadFile(reader, config) require.NoError(t, err) require.Equal(t, "Imp", data.Name) @@ -32,7 +32,7 @@ func TestLoadImp88(t *testing.T) { func TestLoadImp94(t *testing.T) { config := ConfigNOP94 - reader := bytes.NewReader(imp_94_red) + reader := bytes.NewReader(Imp_94_red) data, err := ParseLoadFile(reader, config) require.NoError(t, err) require.Equal(t, "Imp", data.Name) diff --git a/sim_test.go b/sim_test.go index cefeac6..f8897c1 100644 --- a/sim_test.go +++ b/sim_test.go @@ -46,7 +46,7 @@ func TestSimDwarf(t *testing.T) { } func TestRunImp(t *testing.T) { - reader := bytes.NewReader(imp_88_red) + reader := bytes.NewReader(Imp_88_red) config := ConfigKOTH88 impdata, err := ParseLoadFile(reader, config) require.NoError(t, err) @@ -66,7 +66,7 @@ func TestRunImp(t *testing.T) { } func TestRunTwoImps(t *testing.T) { - reader := bytes.NewReader(imp_88_red) + reader := bytes.NewReader(Imp_88_red) config := ConfigKOTH88 impdata, err := ParseLoadFile(reader, config) require.NoError(t, err)