Пишу тетрис, испытываю проблемы, оборачивая голову вокруг функции вращающегося блока. Любая помощь будет оценена - PullRequest
0 голосов
/ 26 апреля 2020
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();

    }

Я отключил функцию поворота, но, похоже, я не могу заставить что-либо работать. Если кто-то - волшебник, который мог бы дать мне предложение. Хотелось бы это. ИЛИ если у вас также есть конструктивная критика.

...