private void DrawExample() { Graphics g = painterControl1.Graphics; GraphicsPath p = new GraphicsPath(); float l, t; RenderStyle rs = (RenderStyle)comboBox1.SelectedIndex; switch (rs) { case RenderStyle.Squares: p = _testBlock.GetSquareShape(_settingsPack.Coefficient); break; case RenderStyle.Stars: p = _testBlock.GetStarShape(_settingsPack.JagCount); break; } g.Clear(_settingsPack.BackCol); g.FillRectangle(new SolidBrush(_settingsPack.FieldCol), new Rectangle(50, 50, 120, 120)); g.DrawLine(new Pen(_settingsPack.GridCol), 50, 50, 50, 170); g.DrawLine(new Pen(_settingsPack.GridCol), 150, 50, 150, 170); g.DrawLine(new Pen(_settingsPack.GridCol), 50, 50, 170, 50); g.DrawLine(new Pen(_settingsPack.GridCol), 50, 150, 170, 150); g.FillPath(new SolidBrush(_testBlock.Color), p); FontInfo fi = Fun.GetFontInfo(_testBlock.Text, _testBlock.Width, _settingsPack.FontName, g); Font f = new Font(_settingsPack.FontName, fi.Size); l = t = 50; if (fi.Width > fi.Height) { t += (_testBlock.Width - fi.Height) / 2; } else { l += (_testBlock.Width - fi.Width) / 2; } g.DrawString(_testBlock.Text, f, Brushes.Black, l, t); painterControl1.RazorPaint(); }
/// <summary> /// Здесь происходит отрисовка всего в игре. /// </summary> /// <param name="g"></param> private void Draw(Graphics g) { lock (_lockObject) { g.Clear(_settingsPack.BackCol); g.FillRectangle(new SolidBrush(_settingsPack.FieldCol), _fieldLeft, _fieldTop, _settingsPack.FieldSize * _cellSize, _settingsPack.FieldSize * _cellSize); for (int i = 0; i <= _settingsPack.FieldSize; i++) { g.DrawLine(new Pen(_settingsPack.GridCol), _fieldLeft + i * _cellSize, _fieldTop, _fieldLeft + i * _cellSize, _fieldTop + _settingsPack.FieldSize * _cellSize); } for (int i = 0; i <= _settingsPack.FieldSize; i++) { g.DrawLine(new Pen(_settingsPack.GridCol), _fieldLeft, _fieldTop + i * _cellSize, _fieldLeft + _cellSize * _settingsPack.FieldSize, _fieldTop + i * _cellSize); } float l, t, renderSize, centerX, centerY; foreach (Block b in _settingsPack.Blocks) { int opacity = 255; renderSize = _cellSize * b.ScaleCoefficient; centerX = b.X + _cellSize / 2; centerY = b.Y + _cellSize / 2; l = centerX - renderSize / 2; t = centerY - renderSize / 2; Color col; if (!b.IsMain) { double dist = Math.Sqrt(Math.Pow(b.X - b.TargetBlock.X, 2) + Math.Pow(b.Y - b.TargetBlock.Y, 2)); double targ = dist / _cellSize + 0.5f; b.ScaleCoefficient = (float)Math.Min(1, targ); opacity = (int)Math.Min(255, targ * 255); col = Color.FromArgb(opacity, b.Color); } else { col = b.Color; } g.FillPath(new SolidBrush(col), b.GetShape(l, t, renderSize)); FontInfo fi = Fun.GetFontInfo(b.Text, renderSize, _settingsPack.FontName, g); Font f = new Font(_settingsPack.FontName, fi.Size); if (fi.Width > fi.Height) { t += (renderSize - fi.Height) / 2; } else { l += (renderSize - fi.Width) / 2; } g.DrawString(b.Text, f, new SolidBrush(Color.FromArgb(opacity, Color.Black)), l, t); } foreach (Block b in _disappearingBlocks) { renderSize = _cellSize * b.ScaleCoefficient; centerX = b.X + _cellSize / 2; centerY = b.Y + _cellSize / 2; l = centerX - renderSize / 2; t = centerY - renderSize / 2; g.FillPath(new SolidBrush(b.Color), b.GetShape(l, t, renderSize)); FontInfo fi = Fun.GetFontInfo(b.Text, renderSize, _settingsPack.FontName, g); Font f = new Font(_settingsPack.FontName, fi.Size); if (fi.Width > fi.Height) { t += (renderSize - fi.Height) / 2; } else { l += (renderSize - fi.Width) / 2; } g.DrawString(b.Text, f, Brushes.Black, l, t); } } }