# 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