Skip to content

Commit

Permalink
Aufgabe 4: PAcman laufen lassen
Browse files Browse the repository at this point in the history
  • Loading branch information
gustda committed Feb 11, 2018
1 parent 9e71f44 commit 24feffe
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 28 deletions.
104 changes: 80 additions & 24 deletions Pacman-Uebungsserie/Pacman-Uebungsserie/Pacman.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ class Pacman
/// </summary>
public int Size { get { return 40; } }

/// <summary>
/// Gibt den Winkel an, in welche Richtung Pacman läuft
/// </summary>
public int Angle { get; private set; }

/// <summary>
/// Gibt an, wie schnell sich PAcman bewegt
/// </summary>
public int Speed { get; private set; }

/// <summary>
/// Dies ist die aktuelle Position (in Pixeln) des Mittelpunktes von Pacman in X-Richtung
/// </summary>
Expand Down Expand Up @@ -53,46 +63,92 @@ public Pacman()
// Festlegen der Startposition von Pacman
X = 300;
Y = 300;
Speed = 5;
}

/// <summary>
/// Berechnet die neue Position von Pacman anhand eines Tastendrucks
/// Verarbeitet Tastendrücke unbd ändert entsprechend die Richtung
/// </summary>
/// <param name="key">Die Taste die verarbeitet werden soll</param>
public void MoveToNewPosition(Keys key)
/// <param name="key">´Betätigte Taste</param>
public void ProcessKey(Keys key)
{
// Pacman bewegt sich durch drücken der Pfeiltasten.
// Passt den Winkel entsprechend der gedrückte Taste an
switch (key)
{
case Keys.Down:
// Pacman darf nur nach unten gehen, wenn er nicht vom Spielfeld fällt!
if (Y + Step < 600 - Size / 2)
{
Y = Y + Step;
}
Angle = 90;
break;
case Keys.Up:
// Pacman darf nur nach oben gehen, wenn er nicht vom Spielfeld fällt!
if (Y - Step > 0 + Size / 2)
{
Y = Y - Step;
}
Angle = 270;
break;
case Keys.Left:
// Pacman darf nur nach links gehen, wenn er nicht vom Spielfeld fällt!
if (X - Step > 0 + Size / 2)
{
X = X - Step;
}
Angle = 180;
break;
case Keys.Right:
// Pacman darf nur nach rechts gehen, wenn er nicht vom Spielfeld fällt!
if (X + Step < 600 - Size / 2)
{
X = X + Step;
}
Angle = 0;
break;
}
}

/// <summary>
/// Frame zähler zur Geschwindigkeitskontrolle
/// </summary>
private int frames = 0;

/// <summary>
/// Ein Schritt von PAcman wird verarbeitet
/// </summary>
public void ProcessPackmanStep()
{
// Pacman wird nur bewegt, wenn eine Bewegung an der Reihe ist
if (frames == 0)
{
// Position von Pacman wird entsprechend des Winkels verändert
switch (Angle)
{
case 90:
Y = Y + Step;
break;
case 270:
Y = Y - Step;
break;
case 180:
X = X - Step;
break;
case 0:
X = X + Step;
break;
}

// Packman kann un von einem Rand zum nächste springen, solange dort keine Wand ist
// siehe dazu Kollisionskontrolle
if (X >= 600 || Y >= 600)
{
if (Y >= 600)
Y = 5;
if (X >= 600)
X = 5;
}
else
{
if (Y <= 0)
Y = 595;
if (X <= 0)
X = 595;
}

// in diesem Frame wurde bewegt, deshalb wird frames um 1 erhöht.
frames++;
}
else
{
// Um die Geschwindigkeit zu begrenzen wird nur in manchen Frames eine Bewegung durchgeführt.
// Wie viele Frames keine Bewegung durchgeführt wird, wird mit dem Wert von Speed definiert.
// So viele Frames wie in Speed definiert ist, wird keine Bewegung durchgeführt.
frames++;
if (frames == Speed)
{ frames = 0; }
}
}
}
}
10 changes: 6 additions & 4 deletions Pacman-Uebungsserie/Pacman-Uebungsserie/PacmanController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public PacmanController(CsharpCanvas _canvas)

IsRunningGame = true;
}

/// <summary>
/// Draw Eventhandler, hier wird gezeichnet
/// </summary>
Expand All @@ -63,9 +63,11 @@ private void DrawPacmanAtItsCurrentPositionAndRedrawMaze()
canvas.SetForegroundColor(System.Drawing.Color.Brown);
canvas.AddRectangle(wall.LeftCornerX, wall.LeftCornerY, wall.Width, wall.Height, Fill.Fill);
}


// Pacman bewegen
pacman.ProcessPackmanStep();
// Zeichne Pacman auf den CsharpCanvas
canvas.AddPicture(pacman.ImagePath, pacman.LeftCornerX, pacman.LeftCornerY, pacman.Size, pacman.Size, 0);
canvas.AddPicture(pacman.ImagePath, pacman.LeftCornerX, pacman.LeftCornerY, pacman.Size, pacman.Size, pacman.Angle);

// Überprüfen, ob Pacman an der neuen Position mit der Wand kollidiert.
if (maze.CheckCollision(pacman))
Expand All @@ -82,7 +84,7 @@ private void CheckKeys()
{
if (canvas.LastPressedKey != System.Windows.Forms.Keys.None)
{
pacman.MoveToNewPosition(canvas.LastPressedKey);
pacman.ProcessKey(canvas.LastPressedKey);

if (canvas.LastPressedKey == System.Windows.Forms.Keys.N)
{
Expand Down

0 comments on commit 24feffe

Please sign in to comment.