abstract class Tetromino
{
// Static Fields - Shared between all
public static CDrawer _canvas { get; set; }
// Field Members - Unique to all
public List<Point> _points { get; set; }
public Color _color { get; private set; }
// Constructors
public Tetromino(Color color)
{
_color = color;
}
static Tetromino()
{
_canvas = new CDrawer(10 * 30, 24 * 30);
_canvas.Scale = 30;
_canvas.Position = new Point(400, 100);
}
public void MoveRight()
{
foreach (Point p in _points)
if (p.X + 1 > _canvas.ScaledWidth - 1)
return;
for (int i = 0; i < _points.Count; i++)
_points[i] = new Point(_points[i].X + 1, _points[i].Y);
}
public void MoveDown()
{
foreach (Point p in _points)
if (p.Y + 1 > _canvas.ScaledHeight - 1)
return;
for (int i = 0; i < _points.Count; i++)
_points[i] = new Point(_points[i].X, _points[i].Y + 1);
}
public void MoveLeft()
{
foreach (Point p in _points)
if (p.X - 1 < 0)
return;
for (int i = 0; i < _points.Count; i++)
_points[i] = new Point(_points[i].X - 1, _points[i].Y);
}
public void Show()
{
foreach (Point pt in _points)
_canvas.AddRectangle(pt.X, pt.Y, 1, 1, _color, 1, Color.White);
}
}
class RickyO : Tetromino
{
public RickyO() : base(Color.Orange)
{
_points = new List<Point>() { new Point(0, 1), new Point(1, 1), new Point(2, 1), new Point(2, 0) };
}
}
вот мои классы (не собираюсь помещать остальные производные классы для экономии места)
пространство имен Tetris {publi c частичный класс Form1: Form {
Tetromino t = new RickyO();
public Form1()
{
Shown += Form1_Shown;
KeyDown += Form1_KeyDown;
InitializeComponent();
t.Show();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Right:
t.MoveRight();
break;
case Keys.Left:
t.MoveLeft();
break;
case Keys.Space:
t.MoveDown();
break;
case Keys.Up:
{
}
break;
}
Tetromino._canvas.Clear();
t.Show();
}
Я отключил функцию поворота, но, похоже, я не могу заставить что-либо работать. Если кто-то - волшебник, который мог бы дать мне предложение. Хотелось бы это. ИЛИ если у вас также есть конструктивная критика.