expand gamelogic

This commit is contained in:
Tim Wundenberg
2018-05-25 10:34:07 +02:00
parent 0461177708
commit d11258d3ed
2 changed files with 68 additions and 0 deletions

View File

@@ -37,5 +37,65 @@ namespace CoopSweeper.GameTypes
GenerateGame(x, y, 10);
}
private void CheckMap()
{
if (Map == null)
throw new ArgumentNullException("The Map isn't created yet!");
}
public delegate void GameFinishedHandler(bool isGameWon);
public event GameFinishedHandler GameFinished;
private bool CheckGameFinished()
{
for (int i = 0; i < Map.GetLength(0); i++)
{
for (int j = 0; j < Map.GetLength(1); j++)
{
var field = Map[i, j];
if (!field.ContainsBomb && field.State != FieldState.REVEALED)
return false;
}
}
return true;
}
public void Reveal(int x, int y)
{
var field = Map[x, y];
if (field.State != FieldState.REVEALED)
{
field.State = FieldState.REVEALED;
if (field.ContainsBomb)
GameFinished?.Invoke(false);
}
if (CheckGameFinished())
GameFinished?.Invoke(true);
}
public void SetQuestionMark(int x, int y)
{
Map[x, y].State = FieldState.QUESTIONMARK;
}
public void SetFlag(int x, int y)
{
Map[x, y].State = FieldState.FLAG;
}
public void ResetField(int x, int y)
{
var field = Map[x, y];
if (field.State == FieldState.REVEALED)
throw new Exception("A Revealed Field can't be resetet!");
field.State = FieldState.FLAG;
}
}
}

View File

@@ -7,5 +7,13 @@ namespace CoopSweeper.GameTypes
interface IGame
{
IField[][] Map { get; }
void Reveal(int x, int y);
void SetQuestionMark(int x, int y);
void SetFlag(int x, int y);
void ResetField(int x, int y);
}
}