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
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'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.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
}

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"
)
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)
}

69
main.go
View file

@ -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)
}
}
}

View file

@ -1,93 +1,113 @@
<html>
<head>
<title>GoBug</title>
<meta http-equiv="refresh" content="{{ .tempoAggiorna }}">
<meta charset="UTF-8">
<link href="https://fonts.googleapis.com/css?family=Hammersmith+One" rel="stylesheet">
<style type="text/css">
body {
font-family: 'Hammersmith One', sans-serif;
}
h1,h2,h3,h4 {
color: white;
text-align: center;
font-size:2.4em;
}
p {
color: white;
font-size:2em;
color: white;
}
body {
background: #009999;
}
table {
border: 1px solid white;
table-layout: fixed;
empty-cells: show;
background: white;
padding: 0px;
width:100%;
height: 100%;
font-size: .6em;
}
div {
width:20%;
height: 89%;
background-color:#006666;
float: left;
}
td,tr {
.clearfix:after {
content: "";
display: table;
clear: both;
}
main {
background-color: #00bbbb;
}
tr, td {
}
td {
background: white;
padding: 0px
text-align: center;
vertical-align: middle;
width: calc((70vw / {{.larghezza}}) - 3px);
height: calc(((100vh - 8em) / {{.altezza}}) - 8px);
}
td.cibo {
.cibo {
background: #FFFF33;
padding: 0px
padding: 0px;
}
td.razza1 {
.razza1 {
background: #00ff00;
padding: 0px
padding: 0px;
}
td.razza2 {
.razza2 {
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>
<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>
<body>
<h1>Go bug</h1>
<div style="float:left; display:block; width:70%; height:89%; ">
{{range $riga := .matrice}}
<tr>
{{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>Go bug</h1>
<main class="clearfix">
<div id="tb" class="tabella"></div>
<div class="legenda">
<h1>legenda</h1>
<div style="float:left; display:block; width:30%; height:20%; background-color:#FFFF33;"></div>
<div style="float:right; display:block; width:65%; height:20%; "><p>Food</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:#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 class="colorsample" style="background-color:#FFFF33"></div>&nbsp;Cibo<br>
<div class="colorsample" style="background-color:#00ff00"></div>&nbsp;Razza 1<br>
<div class="colorsample" style="background-color:#F00"></div>&nbsp;Razza 2
</div>
</div>
</main>
</body>
</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>