This commit is contained in:
Giorgio Croci 2017-05-26 16:54:51 +02:00
parent 2d6a0b72a6
commit e6f1404083
2 changed files with 29 additions and 16 deletions

View File

@ -6,7 +6,7 @@ type Element struct { //struttura che contiene sia cibo sia amebe
IsFood bool //se il contenuto della cella è cibo IsFood bool //se il contenuto della cella è cibo
Health int //la sua vita Health int //la sua vita
Age int //la sua età 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 Evoluzione int //se evolve in positivo avrà un bonus in attacco che viene sommato a Health
CostoMov int //quanta energia spende per muoversi CostoMov int //quanta energia spende per muoversi
CostoSex int //quanto spende per riprodursi CostoSex int //quanto spende per riprodursi
@ -17,7 +17,7 @@ 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'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 := new(Element)
nuovo.IsFood=false nuovo.IsFood=false
nuovo.Health=salute nuovo.Health=salute

41
main.go
View File

@ -12,12 +12,15 @@ import (
var Matrix [][]*Element var Matrix [][]*Element
var Altezza int var Altezza int
var Larghezza 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 Clock uint
var NumClock uint var NumClock uint
func main() { //FUNZIONE MAIN func main() { //FUNZIONE MAIN
SaluteIniziale = 50
Clock = 1 Clock = 1
NumClock = 0 NumClock = 0
rand.Seed(time.Now().UTC().UnixNano()) //inizializzazione rand rand.Seed(time.Now().UTC().UnixNano()) //inizializzazione rand
@ -42,6 +45,11 @@ func main() { //FUNZIONE MAIN
Matrix[i][j].IsFood = false Matrix[i][j].IsFood = false
Matrix[i][j].Age = 0 Matrix[i][j].Age = 0
Matrix[i][j].Health = SaluteIniziale 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: case 1:
Matrix[i][j] = nil //vuota Matrix[i][j] = nil //vuota
case 2: case 2:
@ -79,6 +87,10 @@ 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 if elemento == nil || elemento.IsFood { //controllo se 'elemento' è cibo o un altro essere
return return
} }
if elemento.Health<=0 {
Matrix[h][w] = nil
}
direzCasOriz := rand.Intn(3) //numero da 0 a 2 direzCasOriz := rand.Intn(3) //numero da 0 a 2
direzCasOriz-- direzCasOriz--
direzCasVert := rand.Intn(3) direzCasVert := rand.Intn(3)
@ -90,12 +102,13 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli
nuovaPosizioneW >= Larghezza || nuovaPosizioneW < 0 { //se esce dai bordi nuovaPosizioneW >= Larghezza || nuovaPosizioneW < 0 { //se esce dai bordi
return return
} }
tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW]
if tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW]; tmpNewElem != nil { if tmpNewElem != nil {
if tmpNewElem.Razza != elemento.Razza { //se non è dalla stessa razza 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 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 elemento.Health += tmpNewElem.Health //prelevamento energia essere fagocitato
Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento //inglobamento essere peritos Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento //inglobamento essere perito
elemento.Health -= elemento.CostoMov
} else { } else {
Matrix[h][w] = nil //perdita nel combattimento per la sopravvivenza Matrix[h][w] = nil //perdita nel combattimento per la sopravvivenza
tmpNewElem.Health += elemento.Health //il nemico prende l'energia tmpNewElem.Health += elemento.Health //il nemico prende l'energia
@ -106,20 +119,20 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli
} }
} }
} else { //si muove sulla nuova casella } else { //si muove sulla nuova casella
Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento Matrix[nuovaPosizioneH][nuovaPosizioneW] = Matrix[h][w]
Matrix[h][w] = nil Matrix[h][w] = nil
elemento.Health -= elemento.CostoMov Matrix[nuovaPosizioneH][nuovaPosizioneW].Health -= Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoMov
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 { if rand.Intn(3) == 0 {
elemento.Evoluzione-- Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione--
} else { } else {
elemento.Evoluzione++ Matrix[nuovaPosizioneH][nuovaPosizioneW].Evoluzione++
} }
} }
if (elemento.Health-elemento.Premura)>elemento.CostoSex { //se ha energia a sufficienza per riprodursi if (Matrix[nuovaPosizioneH][nuovaPosizioneW].Health-Matrix[nuovaPosizioneH][nuovaPosizioneW].Premura)>Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoSex { //se ha energia a sufficienza per riprodursi
Matrix[h][w] = Costruttore(elemento.Razza, elemento.Evoluzione, elemento.CostoMov, elemento.CostoSex, elemento.Premura, SaluteIniziale) //Matrix[h][w] = Costruttore(elemento.Razza, elemento.Evoluzione, elemento.CostoMov, elemento.CostoSex, elemento.Premura, SaluteIniziale)
} }
} }
@ -145,12 +158,12 @@ func stampaMatrice() {
for i := 0; i < Altezza; i++ { for i := 0; i < Altezza; i++ {
for j := 0; j < Larghezza; j++ { for j := 0; j < Larghezza; j++ {
if Matrix[i][j] == nil { if Matrix[i][j] == nil {
fmt.Printf("-- ") fmt.Printf(" -- ")
} else { } else {
if Matrix[i][j].IsFood { if Matrix[i][j].IsFood {
fmt.Printf("CC ") fmt.Printf(" CC ")
} else { } else {
fmt.Printf("%d ", Matrix[i][j].Health) fmt.Printf("%d %d ",Matrix[i][j].Razza, Matrix[i][j].Health)
} }
} }
} }