예제 #1
0
        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;
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }