public Board(Game game, ref Texture2D textures, Rectangle[] rectangles)
: base(game)
{
sBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));
// Load textures for blocks
this.textures = textures;
// Rectangles to draw figures
this.rectangles = rectangles;
// Create tetris board
boardFields = new FieldState[width, height];
BoardColor = new int[width, height];
#region Creating figures
// Figures[figure's number, figure's modification, figure's block number] = Vector2
// At all figures is 7, every has 4 modifications (for cube all modifications the same)
// and every figure consists from 4 blocks
Figures = new Vector2[7, 4, 4];
// O-figure
for (int i = 0; i < 4; i++)
{
Figures[0, i, 0] = new Vector2(1, 0);
Figures[0, i, 1] = new Vector2(2, 0);
Figures[0, i, 2] = new Vector2(1, 1);
Figures[0, i, 3] = new Vector2(2, 1);
}
// I-figures
for (int i = 0; i < 4; i += 2)
{
Figures[1, i, 0] = new Vector2(0, 0);
Figures[1, i, 1] = new Vector2(1, 0);
Figures[1, i, 2] = new Vector2(2, 0);
Figures[1, i, 3] = new Vector2(3, 0);
Figures[1, i + 1, 0] = new Vector2(1, 0);
Figures[1, i + 1, 1] = new Vector2(1, 1);
Figures[1, i + 1, 2] = new Vector2(1, 2);
Figures[1, i + 1, 3] = new Vector2(1, 3);
}
// J-figures
Figures[2, 0, 0] = new Vector2(0, 0);
Figures[2, 0, 1] = new Vector2(1, 0);
Figures[2, 0, 2] = new Vector2(2, 0);
Figures[2, 0, 3] = new Vector2(2, 1);
Figures[2, 1, 0] = new Vector2(2, 0);
Figures[2, 1, 1] = new Vector2(2, 1);
Figures[2, 1, 2] = new Vector2(1, 2);
Figures[2, 1, 3] = new Vector2(2, 2);
Figures[2, 2, 0] = new Vector2(0, 0);
Figures[2, 2, 1] = new Vector2(0, 1);
Figures[2, 2, 2] = new Vector2(1, 1);
Figures[2, 2, 3] = new Vector2(2, 1);
Figures[2, 3, 0] = new Vector2(1, 0);
Figures[2, 3, 1] = new Vector2(2, 0);
Figures[2, 3, 2] = new Vector2(1, 1);
Figures[2, 3, 3] = new Vector2(1, 2);
// L-figures
Figures[3, 0, 0] = new Vector2(0, 0);
Figures[3, 0, 1] = new Vector2(1, 0);
Figures[3, 0, 2] = new Vector2(2, 0);
Figures[3, 0, 3] = new Vector2(0, 1);
Figures[3, 1, 0] = new Vector2(2, 0);
Figures[3, 1, 1] = new Vector2(2, 1);
Figures[3, 1, 2] = new Vector2(1, 0);
Figures[3, 1, 3] = new Vector2(2, 2);
Figures[3, 2, 0] = new Vector2(0, 1);
Figures[3, 2, 1] = new Vector2(1, 1);
Figures[3, 2, 2] = new Vector2(2, 1);
Figures[3, 2, 3] = new Vector2(2, 0);
Figures[3, 3, 0] = new Vector2(1, 0);
Figures[3, 3, 1] = new Vector2(2, 2);
Figures[3, 3, 2] = new Vector2(1, 1);
Figures[3, 3, 3] = new Vector2(1, 2);
// S-figures
for (int i = 0; i < 4; i += 2)
{
Figures[4, i, 0] = new Vector2(0, 1);
Figures[4, i, 1] = new Vector2(1, 1);
Figures[4, i, 2] = new Vector2(1, 0);
Figures[4, i, 3] = new Vector2(2, 0);
Figures[4, i + 1, 0] = new Vector2(1, 0);
Figures[4, i + 1, 1] = new Vector2(1, 1);
Figures[4, i + 1, 2] = new Vector2(2, 1);
Figures[4, i + 1, 3] = new Vector2(2, 2);
}
// Z-figures
for (int i = 0; i < 4; i += 2)
{
Figures[5, i, 0] = new Vector2(0, 0);
Figures[5, i, 1] = new Vector2(1, 0);
Figures[5, i, 2] = new Vector2(1, 1);
Figures[5, i, 3] = new Vector2(2, 1);
Figures[5, i + 1, 0] = new Vector2(2, 0);
Figures[5, i + 1, 1] = new Vector2(1, 1);
Figures[5, i + 1, 2] = new Vector2(2, 1);
Figures[5, i + 1, 3] = new Vector2(1, 2);
}
// T-figures
Figures[6, 0, 0] = new Vector2(0, 1);
Figures[6, 0, 1] = new Vector2(1, 1);
Figures[6, 0, 2] = new Vector2(2, 1);
Figures[6, 0, 3] = new Vector2(1, 0);
Figures[6, 1, 0] = new Vector2(1, 0);
Figures[6, 1, 1] = new Vector2(1, 1);
Figures[6, 1, 2] = new Vector2(1, 2);
Figures[6, 1, 3] = new Vector2(2, 1);
Figures[6, 2, 0] = new Vector2(0, 0);
Figures[6, 2, 1] = new Vector2(1, 0);
Figures[6, 2, 2] = new Vector2(2, 0);
Figures[6, 2, 3] = new Vector2(1, 1);
Figures[6, 3, 0] = new Vector2(2, 0);
Figures[6, 3, 1] = new Vector2(2, 1);
Figures[6, 3, 2] = new Vector2(2, 2);
Figures[6, 3, 3] = new Vector2(1, 1);
#endregion
nextFigures.Enqueue(random.Next(7));
nextFigures.Enqueue(random.Next(7));
nextFigures.Enqueue(random.Next(7));
nextFigures.Enqueue(random.Next(7));
nextFiguresModification.Enqueue(random.Next(4));
nextFiguresModification.Enqueue(random.Next(4));
nextFiguresModification.Enqueue(random.Next(4));
nextFiguresModification.Enqueue(random.Next(4));
}