Commit 96fefbef authored by Boris Mühmer's avatar Boris Mühmer
Browse files

moved cmd to own repository and finshed re-structuring of project



Signed-off-by: default avatarBoris Mühmer <boris@muehmer.de>
parent 86c98f20
Loading
Loading
Loading
Loading
+0 −0

File moved.

cmd/wator/main.go

deleted100644 → 0
+0 −106
Original line number Diff line number Diff line
package main

import (
	"fmt"
	"strconv"
	"time"

	"repositories.muehmer.net/bsmrgo/wator/pkg/wator"
)

func main() {
	// setup environment
	w := &wator.Wator{
		Debug:             false, //true,
		Width:             72,    //32,
		Height:            36,    //14,
		InitialFishes:     400,   //200,
		InitialSharks:     40,    //20,
		BreedFish:         3,
		BreedShark:        30,
		StarveShark:       2,
		SleepMilliseconds: 50 * time.Millisecond,
	}

	initialize(w)
	print(w)
	repl(w)
}

func repl(w *wator.Wator) {
	cycles := read()
	if cycles == 0 {
		return
	}
	for i := 0; i < cycles; i++ {
		if i > 0 {
			time.Sleep(w.SleepMilliseconds)
		}
		evaluate(w)
		print(w)
	}
	repl(w)
}

func initialize(w *wator.Wator) {
	if err := w.Populate(); err != nil {
		panic(err)
	}
}

func print(w *wator.Wator) {
	fmt.Printf("\033[H\033[2J") // TBD: remove this hack
	if err := w.Display(); err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", w)
}

func evaluate(w *wator.Wator) {
	if err := w.Next(); err != nil {
		panic(err)
	}
}

func read() int {
	cycles := 1
	done := false
	for !done {
		fmt.Printf("Command: ")
		var s string
		n, err := fmt.Scanf("%s", &s)
		if n == 0 {
			s = "n"
			err = nil
		}
		if err != nil {
			panic(err)
		}
		if num, err := strconv.Atoi(s); (err == nil) && (num > 0) && (num <= 100000) {
			done = true
			cycles = num
		}
		if !done {
			switch s {
			case "?", "h", "help":
				usage()
			case "n", "next":
				done = true
			case "q", "quit":
				cycles = 0
				done = true
			default:
				fmt.Printf("Unknown command \"%s\"\n", s)
			}
		}
	}
	return cycles
}

func usage() {
	fmt.Println("--- Commands ---")
	fmt.Println("?, h, help: show this usage information")
	fmt.Println("n, next   : calculate next iteration")
	fmt.Println("<number>  : do <number> iterations")
	fmt.Println("q, quit   : terminate wator")
}
+0 −0

File moved.

+0 −0

File moved.

+0 −0

File moved.

Loading