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/Tetrominoe.cs

138 lines
3 KiB
C#
Raw Normal View History

2022-04-06 11:15:55 +02:00
using System.ComponentModel;
using System.Drawing;
2022-04-06 11:15:55 +02:00
namespace Tetris.Models;
2022-04-06 11:15:55 +02:00
public class Tetrominoe
{
private Color _color;
private Point _coordinates;
private readonly Grid _grid;
2022-04-06 11:15:55 +02:00
private short _orientation;
private readonly bool[,] _shape;
public Tetrominoe(Grid grid, bool[,] shape, Point coordinates, short orientation, Color color)
{
_grid = grid;
_shape = shape;
_coordinates = coordinates;
_orientation = orientation;
_color = color;
// ToDo: UML: Sequand, classe, déploiement
// ToDo: pb techniques
// ToDO: ascpect technique test
}
public bool[,] Shape
{
get
{
var shape = (bool[,])_shape.Clone();
for (var i = 0; i < _orientation; i++)
shape = _rotateLeft(shape);
return shape;
}
}
2022-04-06 11:15:55 +02:00
public Point Coordinates
{
get => _coordinates;
2022-04-06 11:15:55 +02:00
set
{
if (!_grid.CanGo(this, value))
return;
_coordinates = value;
OnPropertyChanged("Coordinates");
}
}
2022-04-06 11:15:55 +02:00
public short Orientation
{
get => _orientation;
2022-04-06 11:15:55 +02:00
set
{
if (value > 3)
value = 0;
else if (value < 0)
value = 3;
2022-04-06 11:15:55 +02:00
var oldOrientation = _orientation;
_orientation = value;
2022-04-06 11:15:55 +02:00
var newCoords = _coordinates;
//ToDo edit position ?
//ToDo move position when hot a wall
2022-04-06 11:15:55 +02:00
if (!_grid.CanGo(this, newCoords))
_orientation = oldOrientation;
2022-04-06 11:15:55 +02:00
else
OnPropertyChanged("Orientation");
}
}
2022-04-06 11:15:55 +02:00
public Color Color { get; }
2022-04-06 11:15:55 +02:00
public event PropertyChangedEventHandler PropertyChanged;
2022-04-06 11:15:55 +02:00
private bool[,] _rotateLeft(bool[,] shape)
{
var rotatedArr = new bool[shape.GetLength(1), shape.GetLength(0)];
for (var i = shape.GetLength(0) - 1; i >= 0; --i)
for (var j = 0; j < shape.GetLength(1); ++j)
rotatedArr[j, shape.GetLength(0) - 1 - i] = shape[i, j];
return rotatedArr;
}
2022-04-06 11:15:55 +02:00
public void RotateLeft()
{
Orientation -= 1;
}
2022-04-06 11:15:55 +02:00
public void RotateRight()
{
Orientation += 1;
}
2022-04-06 11:15:55 +02:00
public void GoRight()
{
Coordinates += new Size(1, 0);
}
2022-04-06 11:15:55 +02:00
public void GoLeft()
{
Coordinates -= new Size(1, 0);
}
2022-04-06 11:15:55 +02:00
public void GoDown()
{
Coordinates += new Size(0, 1);
}
2022-04-06 11:15:55 +02:00
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
2022-04-06 11:15:55 +02:00
public override string ToString()
{
var s = "";
for (uint y = 0; y < Shape.GetLength(1); y++)
{
for (uint x = 0; x < Shape.GetLength(0); x++)
if (Shape[x, y])
s += "x";
else
s += " ";
s += "\n";
}
2022-04-06 11:15:55 +02:00
return s;
}
2022-04-06 11:15:55 +02:00
}