diff --git a/main.go b/main.go index 4998aa9..990fd80 100644 --- a/main.go +++ b/main.go @@ -90,6 +90,7 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli if elemento.Health<=0 { Matrix[h][w] = nil + return } direzCasOriz := rand.Intn(3) //numero da 0 a 2 direzCasOriz-- @@ -103,18 +104,16 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli return } - tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW] - - if 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 - tmpNewElem = elemento //inglobamento essere perito - elemento = nil - tmpNewElem.Health -= tmpNewElem.CostoMov + 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 - tmpNewElem.Health += elemento.Health //il nemico prende l'energia - elemento = nil + 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 @@ -122,41 +121,25 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli } } } else { //si muove sulla nuova casella - tmpNewElem = elemento - elemento = nil - tmpNewElem.Health -= tmpNewElem.CostoMov + Matrix[nuovaPosizioneH][nuovaPosizioneW] = Matrix[h][w] + Matrix[nuovaPosizioneH][nuovaPosizioneW].Health -= Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoMov + Matrix[h][w] = nil - /*if rand.Intn(10) == 0 { //se ha fortuna (o sfortuna) si evolve + if rand.Intn(10) == 0 { //se ha fortuna (o sfortuna) si evolve if rand.Intn(3) == 0 { - tmpNewElem.Evoluzione-- + Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione-- } else { - tmpNewElem.Evoluzione++ + Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione++ } - }*/ + } - if (tmpNewElem.Health-tmpNewElem.Premura)>tmpNewElem.CostoSex { //se ha energia a sufficienza per riprodursi - //tmpNewElem = 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++ {