diff --git a/element.go b/element.go index c82d997..e3035b1 100644 --- a/element.go +++ b/element.go @@ -6,7 +6,7 @@ type Element struct { //struttura che contiene sia cibo sia amebe IsFood bool //se il contenuto della cella è cibo Health int //la sua vita Age int //la sua età - Razza string //per distiguere amici da nemici + Razza int //per distiguere amici da nemici Evoluzione int //se evolve in positivo avrà un bonus in attacco che viene sommato a Health CostoMov int //quanta energia spende per muoversi CostoSex int //quanto spende per riprodursi @@ -14,18 +14,18 @@ type Element struct { //struttura che contiene sia cibo sia amebe } func (e Element) String() string { - return fmt.Sprintf("", e.IsFood, e.Health, e.Age) + return fmt.Sprintf("E'Cibo=%t Salute=%d Eta=%d", e.IsFood, e.Health, e.Age) } -func Costruttore(razza string, evoluzione int, costomov int, costosex int, premura int, salute int) *Element { +func Costruttore(razza int, evoluzione int, costomov int, costosex int, premura int, salute int) *Element { nuovo := new(Element) - nuovo.IsFood=false - nuovo.Health=salute - nuovo.Age=0 - nuovo.Razza=razza - nuovo.Evoluzione=evoluzione - nuovo.CostoMov=costomov - nuovo.CostoSex=costosex - nuovo.Premura=premura + nuovo.IsFood = false + nuovo.Health = salute + nuovo.Age = 0 + nuovo.Razza = razza + nuovo.Evoluzione = evoluzione + nuovo.CostoMov = costomov + nuovo.CostoSex = costosex + nuovo.Premura = premura return nuovo } diff --git a/hackathon.png b/hackathon.png new file mode 100644 index 0000000..0c9a696 Binary files /dev/null and b/hackathon.png differ diff --git a/html.go b/html.go index a0a2e1b..6246df6 100644 --- a/html.go +++ b/html.go @@ -5,20 +5,27 @@ import ( "net/http" ) +var varmap map[string]interface{} + // ServiHTML fa partire il server html func ServiHTML() { - http.HandleFunc("/", handlerRoot) + varmap = map[string]interface{}{ + "matrice": Matrix, + "tempoAggiorna": Clock, + "larghezza": Larghezza, + "altezza": Altezza, + } + http.HandleFunc("/tabella", handlerRoot("template/tabella.html")) + http.HandleFunc("/", handlerRoot("template/Interfaccia.html")) http.ListenAndServe(":3000", nil) } -func handlerRoot(w http.ResponseWriter, r *http.Request) { - templ, err := template.ParseFiles("template/Interfaccia.html") - if err != nil { - panic(err.Error()) +func handlerRoot(path string) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + templ, err := template.ParseFiles(path) + if err != nil { + panic(err.Error()) + } + templ.Execute(w, varmap) } - varmap := map[string]interface{}{ - "matrice": Matrix, - "tempoAggiorna": Clock, - } - templ.Execute(w, varmap) } diff --git a/main.go b/main.go index 3603a99..990fd80 100644 --- a/main.go +++ b/main.go @@ -12,12 +12,15 @@ import ( var Matrix [][]*Element var Altezza int var Larghezza int -var SaluteIniziale int +var SaluteIniziale int = 50 +var CostoMovIniziale int = 5 +var CostoSexIniziale int = 100 +var EvoluzioneIniziale int = 0 +var PremuraIniziale int = 100 var Clock uint var NumClock uint func main() { //FUNZIONE MAIN - SaluteIniziale = 50 Clock = 1 NumClock = 0 rand.Seed(time.Now().UTC().UnixNano()) //inizializzazione rand @@ -42,6 +45,11 @@ func main() { //FUNZIONE MAIN Matrix[i][j].IsFood = false Matrix[i][j].Age = 0 Matrix[i][j].Health = SaluteIniziale + Matrix[i][j].CostoMov = CostoMovIniziale + Matrix[i][j].CostoSex = CostoSexIniziale + Matrix[i][j].Evoluzione = EvoluzioneIniziale + Matrix[i][j].Premura = PremuraIniziale + Matrix[i][j].Razza = rand.Intn(2) case 1: Matrix[i][j] = nil //vuota case 2: @@ -79,6 +87,11 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli if elemento == nil || elemento.IsFood { //controllo se 'elemento' è cibo o un altro essere return } + + if elemento.Health<=0 { + Matrix[h][w] = nil + return + } direzCasOriz := rand.Intn(3) //numero da 0 a 2 direzCasOriz-- direzCasVert := rand.Intn(3) @@ -91,14 +104,16 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli return } - if tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW]; tmpNewElem != nil { - if tmpNewElem.Razza != elemento.Razza { //se non è dalla stessa razza - if tmpNewElem.IsFood || (tmpNewElem.Health+tmpNewElem.Evoluzione) < (elemento.Health+elemento.Evoluzione) { // se e' cibo o un insetto piu debole - elemento.Health += tmpNewElem.Health //prelevamento energia essere fagocitato - Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento //inglobamento essere peritos - } else { - Matrix[h][w] = nil //perdita nel combattimento per la sopravvivenza - tmpNewElem.Health += elemento.Health //il nemico prende l'energia + if Matrix[nuovaPosizioneH][nuovaPosizioneW] != nil { + if Matrix[nuovaPosizioneH][nuovaPosizioneW].Razza != Matrix[h][w].Razza { //se non è dalla stessa razza + if Matrix[nuovaPosizioneH][nuovaPosizioneW].IsFood || (Matrix[nuovaPosizioneH][nuovaPosizioneW].Health+Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione) < (Matrix[h][w].Health+elemento.Evoluzione) { // se e' cibo o un insetto piu debole + Matrix[h][w].Health += Matrix[nuovaPosizioneH][nuovaPosizioneW].Health //prelevamento energia essere fagocitato + Matrix[nuovaPosizioneH][nuovaPosizioneW] = Matrix[h][w] //inglobamento essere perito + Matrix[h][w] = nil + Matrix[nuovaPosizioneH][nuovaPosizioneW].Health -= Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoMov + } else { //perdita nel combattimento per la sopravvivenza + Matrix[nuovaPosizioneH][nuovaPosizioneW].Health += Matrix[h][w].Health //il nemico prende l'energia + Matrix[h][w] = nil } } else { //se sono amici if nuovaPosizioneH == h && nuovaPosizioneW == w { //se cerca di mangiare il suo amico @@ -106,51 +121,35 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli } } } else { //si muove sulla nuova casella - Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento + Matrix[nuovaPosizioneH][nuovaPosizioneW] = Matrix[h][w] + Matrix[nuovaPosizioneH][nuovaPosizioneW].Health -= Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoMov Matrix[h][w] = nil - elemento.Health -= elemento.CostoMov if rand.Intn(10) == 0 { //se ha fortuna (o sfortuna) si evolve if rand.Intn(3) == 0 { - elemento.Evoluzione-- + Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione-- } else { - elemento.Evoluzione++ + Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione++ } } - if (elemento.Health-elemento.Premura)>elemento.CostoSex { //se ha energia a sufficienza per riprodursi - Matrix[h][w] = Costruttore(elemento.Razza, elemento.Evoluzione, elemento.CostoMov, elemento.CostoSex, elemento.Premura, SaluteIniziale) + if (Matrix[nuovaPosizioneH][nuovaPosizioneW].Health-Matrix[nuovaPosizioneH][nuovaPosizioneW].Premura)>Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoSex { //se ha energia a sufficienza per riprodursi + //Matrix[nuovaPosizioneH][nuovaPosizioneW] = Costruttore(Matrix[h][w].Razza, Matrix[h][w].Evoluzione, Matrix[h][w].CostoMov, Matrix[h][w].CostoSex, Matrix[h][w].Premura, SaluteIniziale) } } } -/*func stampaMatrice2() { - for i := 0; i < Altezza; i++ { - fmt.Printf("Riga %d:\n", i) - for j := 0; j < Larghezza; j++ { - var stringa string - elem := Matrix[i][j] - if elem == nil { - stringa = "Vuota" - } else { - stringa = elem.String() - } - fmt.Printf(" Colonna %d: %s\n", j, stringa) - } - } -}*/ - func stampaMatrice() { for i := 0; i < Altezza; i++ { for j := 0; j < Larghezza; j++ { if Matrix[i][j] == nil { - fmt.Printf("-- ") + fmt.Printf(" -- ") } else { if Matrix[i][j].IsFood { - fmt.Printf("CC ") + fmt.Printf(" CC ") } else { - fmt.Printf("%d ", Matrix[i][j].Health) + fmt.Printf("%d %d ",Matrix[i][j].Razza, Matrix[i][j].Health) } } } diff --git a/template/Interfaccia.html b/template/Interfaccia.html index 0af4feb..1819401 100644 --- a/template/Interfaccia.html +++ b/template/Interfaccia.html @@ -1,93 +1,113 @@ GoBug - + + -

Go bug

-
- {{range $riga := .matrice}} - - {{range $cella := $riga}} - {{ $cella }} - {{ end }} - - {{ end }} - -
-
-
+

Go bug

+
+
+

legenda

-
-

Food

-
-
-

Razza1

-
-
-

Razza2

+
 Cibo
+
 Razza 1
+
 Razza 2
-
+ diff --git a/template/tabella.html b/template/tabella.html new file mode 100644 index 0000000..773fae2 --- /dev/null +++ b/template/tabella.html @@ -0,0 +1,17 @@ + +{{range $riga := .matrice}} + + {{range $cella := $riga}} + + {{ else }} + {{ if $cella.IsFood }} + class="cibo" + {{ else }} + class="razza1" + {{ end }}>{{ $cella.Health }} + {{ end }} + {{ end }} + +{{ end }} +