using System;
using System.Collections.Generic;
using Windows.UI.Xaml.Controls;
namespace StrixMusic.Shells.ZuneDesktop.Helpers
{
///
/// A class for generating a randomized tile layout
///
public class TileGenerator
{
private readonly bool[,] _tiles;
private int _currentColumn;
private int _currentRow;
private int _size;
private Random _rand;
///
/// Initializes a new instance of the class.
///
///
public TileGenerator(int size)
{
this._size = size;
_tiles = new bool[this._size, this._size];
_rand = new Random();
}
///
/// Gets a list of objects representing tiles.
///
/// A list of s.
public List GetTiles()
{
List borders = new List();
_currentColumn = 0;
_currentRow = 0;
while (_currentRow != _size && _currentColumn != _size)
{
int maxSize = CheckSize(3);
if (maxSize != 0)
{
borders.Add(MakeTile(_currentColumn, _currentRow, maxSize, 1));
}
// Increments position
_currentColumn++;
if (_currentColumn == _size)
{
_currentColumn = 0;
_currentRow++;
}
}
return borders;
}
private Border MakeTile(int x, int y, int max, int min)
{
Border border = new Border();
int size = _rand.Next(min, max + 1);
border.Tag = size;
Grid.SetColumn(border, x);
Grid.SetRow(border, y);
Grid.SetColumnSpan(border, size);
Grid.SetRowSpan(border, size);
FillTiles(
x,
size,
y,
size,
true);
return border;
}
private int CheckSize(int max)
{
max = Math.Min(max, _size - _currentRow);
int i = _currentColumn;
for (; i < _size && i < _currentColumn + max; i++)
{
if (_tiles[_currentRow, i])
{
return i - _currentColumn;
}
}
return i - _currentColumn;
}
private void FillTiles(int x1, int xSize, int y1, int ySize, bool value)
{
for (int i = y1; i < y1 + ySize; i++)
{
for (int j = x1; j < x1 + xSize; j++)
{
_tiles[i, j] = value;
}
}
}
}
}