This commit is contained in:
Davide999 2017-05-26 17:58:29 +02:00
commit 8765472005
6 changed files with 158 additions and 115 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
@ -14,18 +14,18 @@ type Element struct { //struttura che contiene sia cibo sia amebe
} }
func (e Element) String() string { 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
nuovo.Age=0 nuovo.Age = 0
nuovo.Razza=razza nuovo.Razza = razza
nuovo.Evoluzione=evoluzione nuovo.Evoluzione = evoluzione
nuovo.CostoMov=costomov nuovo.CostoMov = costomov
nuovo.CostoSex=costosex nuovo.CostoSex = costosex
nuovo.Premura=premura nuovo.Premura = premura
return nuovo return nuovo
} }

BIN
hackathon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

27
html.go
View File

@ -5,20 +5,27 @@ import (
"net/http" "net/http"
) )
var varmap map[string]interface{}
// ServiHTML fa partire il server html // ServiHTML fa partire il server html
func ServiHTML() { 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) http.ListenAndServe(":3000", nil)
} }
func handlerRoot(w http.ResponseWriter, r *http.Request) { func handlerRoot(path string) func(w http.ResponseWriter, r *http.Request) {
templ, err := template.ParseFiles("template/Interfaccia.html") return func(w http.ResponseWriter, r *http.Request) {
if err != nil { templ, err := template.ParseFiles(path)
panic(err.Error()) if err != nil {
panic(err.Error())
}
templ.Execute(w, varmap)
} }
varmap := map[string]interface{}{
"matrice": Matrix,
"tempoAggiorna": Clock,
}
templ.Execute(w, varmap)
} }

69
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,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 if elemento == nil || elemento.IsFood { //controllo se 'elemento' è cibo o un altro essere
return return
} }
if elemento.Health<=0 {
Matrix[h][w] = nil
return
}
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)
@ -91,14 +104,16 @@ func muovi(h int, w int) { //FUNZIONE MUOVI: aggiorna la posizione di tutti gli
return return
} }
if tmpNewElem := Matrix[nuovaPosizioneH][nuovaPosizioneW]; tmpNewElem != nil { if Matrix[nuovaPosizioneH][nuovaPosizioneW] != nil {
if tmpNewElem.Razza != elemento.Razza { //se non è dalla stessa razza if Matrix[nuovaPosizioneH][nuovaPosizioneW].Razza != Matrix[h][w].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 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
elemento.Health += tmpNewElem.Health //prelevamento energia essere fagocitato Matrix[h][w].Health += Matrix[nuovaPosizioneH][nuovaPosizioneW].Health //prelevamento energia essere fagocitato
Matrix[nuovaPosizioneH][nuovaPosizioneW] = elemento //inglobamento essere peritos Matrix[nuovaPosizioneH][nuovaPosizioneW] = Matrix[h][w] //inglobamento essere perito
} else { Matrix[h][w] = nil
Matrix[h][w] = nil //perdita nel combattimento per la sopravvivenza Matrix[nuovaPosizioneH][nuovaPosizioneW].Health -= Matrix[nuovaPosizioneH][nuovaPosizioneW].CostoMov
tmpNewElem.Health += elemento.Health //il nemico prende l'energia } 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 } else { //se sono amici
if nuovaPosizioneH == h && nuovaPosizioneW == w { //se cerca di mangiare il suo amico 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 } 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 Matrix[h][w] = nil
elemento.Health -= elemento.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[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() { 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)
} }
} }
} }

View File

@ -1,93 +1,113 @@
<html> <html>
<head> <head>
<title>GoBug</title> <title>GoBug</title>
<meta http-equiv="refresh" content="{{ .tempoAggiorna }}">
<meta charset="UTF-8"> <meta charset="UTF-8">
<link href="https://fonts.googleapis.com/css?family=Hammersmith+One" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body {
font-family: 'Hammersmith One', sans-serif;
}
h1,h2,h3,h4 { h1,h2,h3,h4 {
color: white; color: white;
text-align: center; text-align: center;
font-size:2.4em;
} }
p { p {
color: white; color: white;
font-size:2em;
} }
body { body {
background: #009999; background: #009999;
} }
table { table {
border: 1px solid white; table-layout: fixed;
empty-cells: show; empty-cells: show;
background: white; font-size: .6em;
padding: 0px;
width:100%;
height: 100%;
} }
div { div {
width:20%; float: left;
height: 89%;
background-color:#006666;
} }
.clearfix:after {
td,tr { content: "";
display: table;
clear: both;
}
main {
background-color: #00bbbb;
}
tr, td {
}
td {
background: white; background: white;
padding: 0px text-align: center;
vertical-align: middle;
width: calc((70vw / {{.larghezza}}) - 3px);
height: calc(((100vh - 8em) / {{.altezza}}) - 8px);
} }
.cibo {
td.cibo {
background: #FFFF33; background: #FFFF33;
padding: 0px padding: 0px;
} }
.razza1 {
td.razza1 {
background: #00ff00; background: #00ff00;
padding: 0px padding: 0px;
} }
.razza2 {
td.razza2 {
background: #FF0000; background: #FF0000;
padding: 0px padding: 0px;
} }
div.tabella {
float:left;
display:block;
width: 70vw;
}
div.legenda {
margin-left: 1em;
float:left;
display:block;
width: calc(100% - 70vw - 1em);
}
@media screen and (max-width: 800px) {
div.tabella, div.legenda {
margin-left: 0;
width: 100%;
}
td {
width: calc((100vw / {{.larghezza}}) - 3px);
}
}
div.colorsample {
width: 1em;
height: 1em;
display: inline-block;
}
</style> </style>
<script>
reload = function() {
var xhr = new XMLHttpRequest()
xhr.open('GET', '/tabella')
xhr.send(null)
xhr.onreadystatechange = function () {
var DONE = 4, OK = 200
if (xhr.readyState === DONE) {
if (xhr.status === OK)
document.getElementById("tb").innerHTML = xhr.responseText
else console.log('Error: ' + xhr.status)
}
}
}
window.setInterval(reload, 1000 * {{ .tempoAggiorna }})
reload()
</script>
</head> </head>
<body> <body>
<h1>Go bug</h1> <h1>Go bug</h1>
<div style="float:left; display:block; width:70%; height:89%; "> <main class="clearfix">
{{range $riga := .matrice}} <div id="tb" class="tabella"></div>
<tr> <div class="legenda">
{{range $cella := $riga}}
<td {{ if not $cella }}
class="vuoto"
{{ else }}
{{ if $cella.IsFood }}
class="cibo"
{{ else }}
class="razza1"
{{ end }}
{{ end }}
>{{ $cella }}</td>
{{ end }}
</tr>
{{ end }}
</table>
</div>
<div style="float:left; display:block; width:1%; height:89%; "></div>
<div style="float:left; display:block; width:29%; height:89%; ">
<h1>legenda</h1> <h1>legenda</h1>
<div style="float:left; display:block; width:30%; height:20%; background-color:#FFFF33;"></div> <div class="colorsample" style="background-color:#FFFF33"></div>&nbsp;Cibo<br>
<div style="float:right; display:block; width:65%; height:20%; "><p>Food</p></div> <div class="colorsample" style="background-color:#00ff00"></div>&nbsp;Razza 1<br>
<div style="float:right; display:block; width:100%; height:2%; "></div> <div class="colorsample" style="background-color:#F00"></div>&nbsp;Razza 2
<div style="float:left; display:block; width:30%; height:20%; background-color:#00ff00;"></div>
<div style="float:right; display:block; width:65%; height:20%; "><p>Razza1</p></div>
<div style="float:right; display:block; width:100%; height:2%;"></div>
<div style="float:left; display:block; width:30%; height:20%; background-color:#F00;"></div>
<div style="float:right; display:block; width:65%; height:20%; "><p>Razza2</p></div>
</div> </div>
</div> </main>
</body> </body>
</html> </html>

17
template/tabella.html Normal file
View File

@ -0,0 +1,17 @@
<table>
{{range $riga := .matrice}}
<tr>
{{range $cella := $riga}}
<td {{ if not $cella }}
class="vuoto"> </td>
{{ else }}
{{ if $cella.IsFood }}
class="cibo"
{{ else }}
class="razza1"
{{ end }}>{{ $cella.Health }}</td>
{{ end }}
{{ end }}
</tr>
{{ end }}
</table>