利用C#编写象棋棋盘

刚开始用新的编程环境设计一个项目,需要学习和不断积累,通过这些过程不断的汲取经验教训。下面是我们小组做的一个关于中国象棋棋盘的项目。

 

1.设计思路与分析

首先规定一个起始点(*,*),水平方向长度用x表示(共分为8格),垂直方向的宽度用h表示(共分为9格),象棋的每个小格都是正方形的。长和宽的比例为8:9,可以规定长度a=(1/8)x,同理宽度为h的1/9,然后可以利用公式计算行列的坐标*+na。以及兵格和炮格的位置设计思路在下图标出。(其中楚河汉界字也是通过坐标调好位置)

利用C#编写象棋棋盘_第1张图片

2.若是追求设计的美观,可以给棋盘设计一个背景板。

利用C#编写象棋棋盘_第2张图片

3.棋盘的初步设计代码
Graphics g = e.Graphics;
            g.Clear(Color.Coral);
            Image img = Image.FromFile("33.jpg");
            double x = 400;
            double h = 1.125 * x;
            g.DrawImage(img, 10, 10, 700, 700);
            g.DrawRectangle(new Pen(Color.Black, 3), new Rectangle(new Point(20, 20), new Size((int)(x + 10), (int)(h + 10))));
            Pen pen = new Pen(Color.Black, 1);
            for (int i = 0; i < 10; i++)
            {
                g.DrawLine(pen, new Point(25, 25 + (i * (int)(h / 9))), new Point((int)(x + 25), 25 + (i * (int)(h / 9))));
            }
            for (int j = 0; j < 9; j++)
            {
                g.DrawLine(pen, new Point(25 + (j * (int)(x / 8)), 25), new Point(25 + (j * (int)(x / 8)), 25 + (int)((h / 9) * 4)));
            }
            for (int j = 0; j < 9; j++)
            {
                g.DrawLine(pen, new Point(25 + (j * (int)(x/8)), 25 + (int)((h / 9) * 5)), new Point(25 + (j * (int)(x / 8)), ((int)(25 + h))));
            }
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 3), 25), new Point(25 + (int)((x / 8) * 5), 25 + (int)((h / 9) * 2)));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 5), 25), new Point(25 + (int)((x / 8) * 3), 25 + (int)((h / 9) * 2)));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 3), 25 + (int)((h / 9) * 7)), new Point(25 + (int)((x / 8) * 5), ((int)(25 + h))));
            g.DrawLine(pen, new Point(25 + (int)((x / 8) * 5), 25 + (int)((h / 9) * 7)), new Point(25 + (int)((x / 8) * 3), ((int)(25 + h))));
            Font font = new Font("黑体", (int)(x / 20));
            g.DrawString("楚  河", font, Brushes.Black, new Point(25 + (int)((x / 16)), 25 + (int)((h / 9) * 4 + 10)));
            g.DrawString("汉  界", font, Brushes.Black, new Point(25 + (int)((x / 8) * 5 + (x / 16)), 25 + (int)((h / 9) * 4 + 10)));
            g.ResetTransform();
            this.DrawAngle(g, pen, new Point(25, 25 + (int)(h / 9 * 3)), "right");
            this.DrawAngle(g, pen, new Point(25 + (2 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (4 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (6 * (int)(x / 8)), 25 + (int)(h / 9 * 3)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 3)), "left");
            this.DrawAngle(g, pen, new Point(25 + (1 * (int)(x / 8)), 25 + (int)(h / 9 * 2)), "all");
            this.DrawAngle(g, pen, new Point(25 + (7 * (int)(x / 8)), 25 + (int)(h / 9 * 2)), "all");
 
            this.DrawAngle(g, pen, new Point(25, 25 + (int)(h / 9 * 6)), "right");
            this.DrawAngle(g, pen, new Point(25 + (2 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (4 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (6 * (int)(x / 8)), 25 + (int)(h / 9 * 6)), "all");
            this.DrawAngle(g, pen, new Point(25 + (int)x, 25 + (int)(h / 9 * 6)), "left");
            this.DrawAngle(g, pen, new Point(25 + (1 * (int)(x / 8)), 25 + (int)(h / 9 * 7)), "all");
            this.DrawAngle(g, pen, new Point(25 + (7 * (int)(x / 8)), 25 + (int)(h / 9 * 7)), "all");
            g.Dispose();
        }
        private void DrawAngle(Graphics g, Pen pen, Point point, string str)
        {
            double x = 400;
            Point p1 = new Point(point.X + (int)x / 80, point.Y + (int)x / 80);
            Point p2 = new Point(point.X - (int)x / 80, point.Y + (int)x / 80);
            Point p3 = new Point(point.X - (int)x / 80, point.Y - (int)x / 80);
            Point p4 = new Point(point.X + (int)x / 80, point.Y - (int)x / 80);
            if (str == "right" || str == "all")
            {
                //p1  p4
                g.DrawLine(pen, p1, new Point(p1.X + (int)x / 40, p1.Y));
                g.DrawLine(pen, p1, new Point(p1.X, p1.Y + (int)x / 40));
                g.DrawLine(pen, p4, new Point(p4.X + (int)x / 40, p4.Y));
                g.DrawLine(pen, p4, new Point(p4.X, p4.Y - (int)x / 40));
            }
            if (str == "left" || str == "all")
            {
                //p2  p3
                g.DrawLine(pen, p2, new Point(p2.X - (int)x / 40, p2.Y));
                g.DrawLine(pen, p2, new Point(p2.X, p2.Y + (int)x / 40));
                g.DrawLine(pen, p3, new Point(p3.X - (int)x / 40, p3.Y));
                g.DrawLine(pen, p3, new Point(p3.X, p3.Y - (int)x / 40));
 
 
            }
        }
 

你可能感兴趣的:(c#)