OurGamesForCourse
65 строк · 1.2 Кб
1namespace PauchiaUkladka;
2
3public abstract class Block
4{
5protected abstract Position[][] Tiles
6{
7get;
8}
9
10protected abstract Position StartOffset
11{
12get;
13}
14
15public abstract int Id
16{
17get;
18}
19
20private int rotationState;
21private Position offset;
22
23public Block()
24{
25offset = new Position(StartOffset.Row, StartOffset.Column);
26}
27
28public IEnumerable<Position> TilePositions()
29{
30foreach (Position p in Tiles[rotationState])
31{
32yield return new Position(p.Row + offset.Row, p.Column + offset.Column);
33}
34}
35
36public void RoatateCW()
37{
38rotationState = (rotationState + 1) % Tiles.Length;
39}
40
41public void RoatateCCW()
42{
43if (rotationState == 0)
44{
45rotationState = Tiles.Length - 1;
46}
47else
48{
49rotationState--;
50}
51}
52
53public void Move(int rows, int columns)
54{
55offset.Row += rows;
56offset.Column += columns;
57}
58
59public void Reset()
60{
61rotationState = 0;
62offset.Row = StartOffset.Row;
63offset.Column = StartOffset.Column;
64}
65}