---
# System prepended metadata

title: Projekt Snake!
tags: [Programmierung, Projekt]

---

# Projekt Snake!

## UML Diagramm

```plantuml
skinparam style strictuml
skinparam class {
    BackgroundColor white
    ArrowColor gray
    BorderColor black
}

class SnakeSpiel {
    - spielfeld[x_max, y_max]
    - score_Erhöhen
    
    + Spielstart()
    + IstSpielVorbei()
    + spielvorbei (1)(2)(3)
}

class Schlange {
    - 2D-Array
    - Bewegungsrate
    - Wurdegefressen Boolean
    
    + Bewegen()
    + Fressen()
    + StandortSenden()
    + IstSpielVorbei()
    + Schlangespawnt()   
}

class Frucht {
    - Position[x,y]
    
    + Spawn()
    + Entfernen()
}

SnakeSpiel -- Frucht
SnakeSpiel -- Schlange

```

## Umsetzung in PHP

```php=
<?php>
    
$spielfeld[0][0] = 0;
$spielfeld[0][1] = 1;
$spielfeld[0][2] = 1;
$spielfeld[0][3] = 1;
$spielfeld[0][4] = 0;
$spielfeld[0][5] = 0;
$spielfeld[1][0] = 0;
$spielfeld[1][1] = 0;
...
$spielfeld[5][4] = 0;
$spielfeld[5][5] = 2;

class SnakeSpiel {
    $spielfeld = array();

    function ausgeben() {

        foreach ($spielfeld as $x => $zeile) {
            foreach ($zeile as $y => $element) 
                echo $element. " ";
        }
        echo "<br>";
    }
}

class Schlange {
    $MoveX = 1;
    $MoveY = 0;
    $body = array();

    $body[0] = array(1,1);
    $body[1] = array(2,1);
    $body[2] = array(3,1);

    var_dump($body);
    }    

    Move() {
    
    $body

    }
}

$snakespiel = new Snakespiel();
$snakespiel->ausgeben()
```

### Klasse Schlange

Bewegen()

* 2D-Array letzten Index Wert kopieren
* Wert + Bewegungsrate
  * Bewegungsrate ist x/y
  * Input W,A,S,D verändert x/y
  * Fressen(Neuer Wert)
* Neuer Wert an Ende des 2D-Arrays
* Wenn Wurdegefressen == false
  * Wert an erster Stelle in 2D-Array löschen
* IstSpielVorbei(Neuer Wert)

IstSpielVorbei()

* return false
  * StandortSenden(2D-Array)

Fressen(pos)

* Frage an Frucht: treffer(pos)
  * return true?
    * Wurdegefressen = true

IstSpielVorbei(NW)

* Ist NW in dem 2D-Array
  * return true
    * GameOver(2)
  * Ist NW > max_Größe
    * return true
      * GameOver(3)
    * else
      * StandortSenden()

StandortSenden()

* An Spiel: neuepos(2D-Array)
  * //Zur Aktualiserung der Grafik

### Klasse Frucht

Position[x,y]

* Position einer Frucht im Spielfeld

Spawn()

* um Frucht zu "Spawnen"
  * welches Feld frei ist(0)?
  * Frucht in zufälliges (freies) Feld spawnen

Entfernen()

* diese Aktion wird nach der Aktion Fressen() ausgeführt
* nachdem diese funktion aktiviert wurde wird die Frucht gelöscht und danach die Funktion Spawnen aktiviert
