protected override void OnPaint(PaintEventArgs e) { //base.OnPaint(e); if (Board == null) { return; } // нарисовать поле ArrangeCells(); // сглаживание var oldMode = e.Graphics.SmoothingMode; e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // ячейки using (var brushes = new BrushStorage()) using (var pens = new PenStorage()) { for (var i = 0; i < Board.cells.Count(); i++) { DrawCell(i, e.Graphics, brushes, pens); } // стата DrawSpielerStat(e.Graphics, brushes, pens); } e.Graphics.SmoothingMode = oldMode; }
private void DrawSpielerStat(Graphics g, BrushStorage brushes, PenStorage pens) { var top = Height - StatusStripHeight + 3; var left = 20; var spieler = Board.spielers[Board.currentSpielerIndex]; var text = "Spieler: " + spieler.Name + ", carrots: " + spieler.CarrotsSpare + ", cabbages: " + spieler.CabbageSpare; g.DrawString(text, cellFont, brushes.GetBrush(Color.Black), left, top); var textSize = g.MeasureString(text, cellFont); top += (int)textSize.Height + 3; // выбор маркера var tokens = Board.GetSpielerTokens(); tokenSelectors = tokens.Select((t, i) => new Point(left + i * (TokenSelectorSpan + TokenSelectorSz) + TokenSelectorSpan / 2, top + TokenSelectorSz / 2)).ToArray(); for (var i = 0; i < tokens.Length; i++) { var isSelected = Board.selectedTokenIndex >= 0 && Board.tokens[Board.selectedTokenIndex] == tokens[i]; var color = Token.TokenColor[tokens[i].ColorIndex]; var coords = tokenSelectors[i]; var rect = new Rectangle(coords.X - TokenSelectorSz / 2, coords.Y - TokenSelectorSz / 2, TokenSelectorSz, TokenSelectorSz); g.FillEllipse(brushes.GetBrush(color), rect); if (isSelected) { g.DrawEllipse(pens.GetPen(Color.Black, 3), rect); } } // нужно моркови / послед. ошибка var notes = new List <string>(); if (carrotsNeeded != 0) { notes.Add(carrotsNeeded > 0 ? carrotsNeeded.ToString() : "+" + (-carrotsNeeded).ToString()); } if (!string.IsNullOrEmpty(lastError)) { notes.Add(lastError); } if (notes.Count > 0) { top += TokenSelectorSz + 3; left = 20; g.DrawString(string.Join(", ", notes), Font, brushes.GetBrush(Color.Black), left, top); } }
private void DrawCell(int cellIndex, Graphics g, BrushStorage brushes, PenStorage pens) { var cell = Board.cells[cellIndex]; var ellipseRect = new Rectangle(cell.Location.X - cellShapeSz / 2, cell.Location.Y - cellShapeSz / 2, cellShapeSz, cellShapeSz); // залить фон g.FillEllipse(brushes.GetBrush(Color.White), ellipseRect); // граница g.DrawEllipse(pens.GetPen(Color.Black, cellShapeSz > 22 ? 3 : 2, cellIndex == selectedCellIndex ? DashStyle.Dot : DashStyle.Solid), ellipseRect); // содержимое int imageIndex; if (imageByCellType.TryGetValue(cell.CellType, out imageIndex)) { var bmp = pictures[imageIndex]; g.DrawImage(bmp, ellipseRect); } else { var textColor = cell.CellType == CellType.Cabbage ? Color.DarkGreen : cell.CellType == CellType.Carrot ? Color.Brown : Color.Black; var text = cell.CellType == CellType.Cabbage ? "CB" : cell.CellType == CellType.Carrot ? "Cr" : cell.CellType == CellType.Finish ? "fin" : cell.CellType == CellType.Hare ? "H" : cell.CellType == CellType.Hedgehog ? "Ig" : cell.CellType == CellType.Number ? cell.Points.ToString() : "St"; g.DrawString(text, cellFont, brushes.GetBrush(textColor), cell.Location.X, cell.Location.Y, new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); } // индекс g.DrawString(cellIndex.ToString(), indexFont, brushes.GetBrush(Color.Black), cell.NumberLocation.X, cell.NumberLocation.Y, new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center }); // фишка var tokenOnCell = Board.tokens.FirstOrDefault(t => t.Position == cellIndex); if (tokenOnCell != null) { g.FillEllipse(brushes.GetBrush(Color.FromArgb(128, Token.TokenColor[tokenOnCell.ColorIndex])), ellipseRect); } }