From 490ff1d6d4e05a69738b99b2d1d315759dd7be78 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Fri, 26 May 2017 14:26:59 +0200 Subject: [PATCH 1/2] Funzione stampa matrice --- element.go | 2 +- main.go | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/element.go b/element.go index cceb27a..673c8ef 100644 --- a/element.go +++ b/element.go @@ -9,5 +9,5 @@ type Element struct { //struttura che contiene sia cibo sia amebe } func (e Element) String() string { - return fmt.Sprintf("E'Cibo=%t Salute=%d Eta=%d", e.IsFood, e.Health, e.Age) + return fmt.Sprintf("", e.IsFood, e.Health, e.Age) } diff --git a/main.go b/main.go index 8cbf675..894beb6 100644 --- a/main.go +++ b/main.go @@ -46,10 +46,10 @@ func main() { } } } + fmt.Println("Situazione iniziale: ") + stampaMatrice() - fmt.Println(Matrix) - - go aggiorna() + //go aggiorna() } func aggiorna() { @@ -61,7 +61,7 @@ func aggiorna() { func muovi(h int, w int) { // h verticale, w orizzontale elemento := Matrix[h][w] - if elemento == nil && elemento.IsFood { + if elemento == nil || elemento.IsFood { return } direzCasOriz := rand.Intn(2) @@ -91,3 +91,19 @@ func muovi(h int, w int) { // h verticale, w orizzontale Matrix[h][w] = nil } } + +func stampaMatrice() { + 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) + } + } +} From e703781c5b3849414e516f3f6fcefa0218fce4a8 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Fri, 26 May 2017 14:44:11 +0200 Subject: [PATCH 2/2] Fix bug --- main.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/main.go b/main.go index 549b6f8..e01a05f 100644 --- a/main.go +++ b/main.go @@ -14,9 +14,12 @@ var Altezza int var Larghezza int var SaluteIniziale int var Clock uint +var NumClock uint func main() { //FUNZIONE MAIN SaluteIniziale = 50 + Clock = 1 + NumClock = 0 height, err := strconv.Atoi(os.Args[1]) if err != nil { panic("height not valid") @@ -50,38 +53,41 @@ func main() { //FUNZIONE MAIN fmt.Println("Situazione iniziale: ") stampaMatrice() - //go aggiorna() + aggiorna() } func aggiorna() { //FUNZIONE AGGIORNA: chiama la funzione muovi for { + time.Sleep(time.Second * time.Duration(Clock)) + NumClock++ for i := 0; i < Altezza; i++ { for j := 0; j < Larghezza; j++ { muovi(i, j) } } - time.Sleep(time.Second * time.Duration(Clock)) + fmt.Printf("\nSituazione dopo %d movimenti:\n", NumClock) + stampaMatrice() } } func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli oggetti in tabella // h verticale, w orizzontale elemento := Matrix[h][w] //assegnamente del contenuto della cella in 'elemento' - if elemento == nil && elemento.IsFood { //controllo se 'elemento' è cibo o un altro essere + if elemento == nil || elemento.IsFood { //controllo se 'elemento' è cibo o un altro essere return } direzCasOriz := rand.Intn(2) direzCasOriz-- direzCasVert := rand.Intn(2) direzCasVert-- - nuovaPosizioneH := h + direzCasVert //aggiornamento posiozione verticale - nuovaPosizioneW := w + direzCasOriz //aggiornamento posizione orizzontale - if nuovaPosizioneH > Altezza || nuovaPosizioneH < 0 { //se esce dai bordi verticali - muovi(h, w) + nuovaPosizioneH := h + direzCasVert //aggiornamento posiozione verticale + nuovaPosizioneW := w + direzCasOriz //aggiornamento posizione orizzontale + + if nuovaPosizioneH >= Altezza || nuovaPosizioneH < 0 || + nuovaPosizioneW >= Larghezza || nuovaPosizioneW < 0 { //se esce dai bordi + return } - if nuovaPosizioneW > Larghezza || nuovaPosizioneW < 0 { //se esce dai bordi orizzontali - muovi(h, w) - } + fmt.Println(nuovaPosizioneH, nuovaPosizioneW) if tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW]; tmpNewElem != nil { if tmpNewElem.IsFood || tmpNewElem.Health < elemento.Health { // se e' cibo o un insetto piu debole