Archived
1
0
Fork 0
This repository has been archived on 2024-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
Tetris/Models/Grid.cs

66 lines
1.9 KiB
C#

using System;
using System.Drawing;
using System.Windows.Media;
using Pastel;
using Color = System.Drawing.Color;
namespace Tetris.Models;
public class Grid {
private Color[,] _grid;
public Color[,] CGrid => (Color[,])_grid.Clone();
public Point MinGrid => new Point(0,0);
public Point MaxGrid => new Point(_grid.GetLength(0)-1, _grid.GetLength(1)-1);
public Grid(Color[,] grid) {
_grid = grid;
}
public bool CanGo(Tetrominoe tetrominoe, Point point) {
bool[,] shape = tetrominoe.Shape;
if (point.X < MinGrid.X || point.Y < MinGrid.Y)
return false;
else if ((point.X + tetrominoe.Shape.GetLength(0)-1) > MaxGrid.X || (point.Y + tetrominoe.Shape.GetLength(1)-1) > MaxGrid.Y)
return false;
for (uint x = 0; x < shape.GetLength(0); x++)
for (uint y = 0; y < shape.GetLength(1); y++) {
Point s = point + new Size((int) x, (int) y);
if (shape[x, y] && _grid[s.X, s.Y] != Color.Empty)
return false;
}
return true;
}
public void PrintTetrominoe(Tetrominoe t) {
bool[,] shape = t.Shape;
for (uint x = 0; x < shape.GetLength(0); x++)
for (uint y = 0; y < shape.GetLength(1); y++) {
Point s = t.Coordinates + new Size((int) x, (int) y);
if (shape[x, y])
_grid[s.X, s.Y] = t.Color;
}
}
public override string ToString() {
String s = "";
for (uint y = 0; y < _grid.GetLength(1); y++) {
for (uint x = 0; x < _grid.GetLength(0); x++) {
s += "x".Pastel(_grid[x, y]);
}
s += "\n";
}
return s;
}
public string ToString(Tetrominoe t) {
Grid g = new((Color[,]) _grid.Clone());
g.PrintTetrominoe(t);
return g.ToString();
}
}