利用C#编写象棋棋盘
剛開始用新的編程環境設計一個項目,需要學習和不斷積累,通過這些過程不斷的汲取經驗教訓。下面是我們小組做的一個關于中國象棋棋盤的項目。
?
1.設計思路與分析
首先規定一個起始點(*,*),水平方向長度用x表示(共分為8格),垂直方向的寬度用h表示(共分為9格),象棋的每個小格都是正方形的。長和寬的比例為8:9,可以規定長度a=(1/8)x,同理寬度為h的1/9,然后可以利用公式計算行列的坐標*+na。以及兵格和炮格的位置設計思路在下圖標出。(其中楚河漢界字也是通過坐標調好位置)
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#编写象棋棋盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内存管理 - slab分配器和
- 下一篇: K12在线教育小班模式带动行业新动向