Minesweeper
Jeg sidder og forsøger at lave grundarbejdet til et lille minestryger spil. Jeg er løbet ind i et problem i forbindelse med fylder mit "board". På hver "node" på boardet har jeg en liste (Relations) med de op til 8 naboer til den pågældende node(tile). Jeg har vedlagt koden til både node og til boardet, problemet opstår i de nestede for-loop i PopulateBoard()-metoden, jeg kan ikke helt overskue hvor det går galt, men det er jo nok mine if-statements som skal revideres.Håber nogen kan hjælpe :)
public enum FieldState
{
Free = 0,
One = 1,
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
Seven = 7,
Eight = 8,
Mine = 9
}
class BoardNode
{
public FieldState State { get; set; }
public int Y { get; private set; }
public int X { get; private set; }
public List<BoardNode> Relations { get; set; }
public BoardNode(int x, int y)
{
Y = y;
X = x;
Relations = new List<BoardNode>();
}
}
public class Board
{
private readonly int length;
private readonly int width;
private BoardNode[,] board;
static Random rnd = new Random();
public Board(int length, int width)
{
this.length = length;
this.width = width;
board = new BoardNode[width,length];
PopulateBoard();
PlaceMines(1);
}
public void ShowBoard()
{
for (int i = 0; i < board.GetLength(0); i++)
{
for (int j = 0; j < board.GetLength(1); j++)
{
Console.Write("{0}", (int)board[i,j].State);
}
Console.WriteLine();
}
}
public void PlaceMines(int numOfMines)
{
for (int y = 0; y < numOfMines; y++)
{
int rndX = rnd.Next(0, width);
int rndY = rnd.Next(0, length);
board[rndY, rndX].State = FieldState.Mine;
for (int i = 0; i < board[rndY, rndX].Relations.Count; i++)
{
board[rndY, rndX].Relations[i].State++;
}
}
}
public void PopulateBoard()
{
for (int y = 0; y < board.GetLength(0); y++)
{
for (int x = 0; x < board.GetLength(1); x++)
{
board[y,x] = new BoardNode(y,x);
}
}
for (int y = 0; y < board.GetLength(0); y++)
{
for (int x = 0; x < board.GetLength(1); x++)
{
for (int y1 = x-1; y1 <= x+1; y1++)
{
for (int x1 = y-1; x1 <= y+1; x1++)
{
if (x != x1 || y != y1)
{
if ((y1 >= 0 && y1 < board.GetLength(0)) && (x1 >= 0 && x1 < board.GetLength(1)))
{
board[y,x].Relations.Add(board[y1,x1]);
}
}
}
}
}
}
}