Ejemplo n.º 1
0
        private void Undo()
        {
            lock (_lockObject)
            {
                undoToolStripMenuItem.Enabled = false;
                foreach (Block b in _settingsPack.Blocks)
                {
                    float  rad        = 1.5f * Math.Max(painterControl1.Width, painterControl1.Height);
                    float  renderSize = _cellSize * b.ScaleCoefficient;
                    PointF center     = new PointF(1f * painterControl1.Width / 2, 1f * painterControl1.Height / 2);
                    float  x          = b.X - center.X + renderSize / 2;
                    float  y          = b.Y - center.Y + renderSize / 2;

                    PointF to = new PointF();

                    if (Math.Abs(x) > Math.Abs(y))
                    {
                        to.Y = y / Math.Abs(x) * rad + center.X - renderSize / 2;
                        to.X = rad * Math.Sign(x) + center.X - renderSize / 2;
                    }
                    else
                    {
                        to.X = x / Math.Abs(y) * rad + center.X - renderSize / 2;
                        to.Y = rad * Math.Sign(y) + center.X - renderSize / 2;
                    }


                    b.TargetPoint = to;
                }

                _disappearingBlocks.AddRange(_settingsPack.Blocks);
                _settingsPack.Blocks = Fun.CloneList(_settingsPack.PreviousStep, false);
                foreach (Block item in _settingsPack.Blocks)
                {
                    item.Location         = CoordOfCell(item.TargetCell);
                    item.ScaleCoefficient = 0;
                    item.RenderIndex      = item.Index;
                }

                _settingsPack.Score        = _settingsPack.PreviousScore;
                _settingsPack.PreviousStep = null;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Обработчик нажатия клавиш
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            bool         moved;
            List <Block> prStep  = Fun.CloneList(_settingsPack.Blocks, false);
            long         prScore = _settingsPack.Score;

            lock (_lockObject)
            {
                //Update(0.01);;
                moved = false;
                foreach (Block b in _settingsPack.Blocks)
                {
                    if (!b.Processed && b.IsMain)
                    {
                        moved |= MoveBlock(b, Fun.ConvertKeyToDirection(e.KeyCode));
                    }
                }

                foreach (Block b in _settingsPack.Blocks)
                {
                    b.Processed = b.NowMerged = false;
                }

                _settingsPack.Blocks.Sort();
            }

            if (moved)
            {
                GenerateNew();
                _settingsPack.PreviousScore   = prScore;
                _settingsPack.PreviousStep    = prStep;
                undoToolStripMenuItem.Enabled = true;
            }

            UpdateCaption();
        }