c#编写中国象棋棋盘的思想-创新互联

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Windows.Forms;

创新互联基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器机柜租用报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

namespace Chess
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private const int _outterStartLeft = 25;//棋盘的外框距离panel的左边距
       private const int _outterStartTop = 25;//棋盘的外框距离panel的上边距
       private const int _distance = 6;//棋盘的内框与外框的距离
       private const int _riverFontFromBorder = 40;//“楚河”或“汉界”距离边框的长度
       private const int _locationLength = 10;//标示“炮”“卒”位置的线长度
       private const int _locationFromBorder = 2;//标示“炮”“卒”位置的线

       //画笔
       Pen drawOutterRecPen = new Pen(Color.Black, 4);//棋盘外边框用到的画笔黑色4pt
       Pen drawInnerRecPen = new Pen(Color.Black, 2);//棋盘内边框用黑色2pt画笔
       Pen drawBasicLine = new Pen(Color.Black, 1);//棋盘基线用黑色1pt画笔
       Pen drawOutterR = new Pen(Color.Red,2);

       //字体
       Font drawRiverFont = new Font("幼圆", 25);

       private void panel1_Paint(object sender, PaintEventArgs e)
       {

           Graphics gh = e.Graphics;//获取绘制图形对象
           //画棋盘边框

           int _chessBoardWidth = panel1.Width - 2 * _outterStartLeft - 2 * _distance;//棋盘的宽度
           int _chessBoardHeight = panel1.Height - 2 * _outterStartTop - 2 * _distance;//棋盘的高度
           //画棋盘外边框
           gh.DrawRectangle(drawOutterRecPen, new Rectangle(new Point(_outterStartLeft, _outterStartTop), new Size(_chessBoardWidth + 2 * _distance, _chessBoardHeight + 2 * _distance)));
           //画棋盘内边框
           gh.DrawRectangle(drawInnerRecPen, new Rectangle(new Point(_outterStartLeft + _distance, _outterStartTop + _distance), new Size(_chessBoardWidth, _chessBoardHeight)));

           //画棋盘

           //画棋盘线
           int _xStart = _outterStartLeft + _distance;//线的起始x坐标
           int _yStart = _outterStartTop + _distance;//线的起始y坐标
           int gridWidth = (panel1.Width - 2 * _outterStartLeft - 2 * _distance) / 8;
           int gridHeight = (panel1.Height - 2 * _outterStartTop - 2 * _distance) / 9;
           //画竖线(8列7条线)
           for (int i = 1; i <= 7; i++)
           {
               //分开画,避开“楚河汉界”一行的竖线
               gh.DrawLine(drawBasicLine, new Point(_xStart + i * gridWidth, _yStart), new Point(_xStart + i * gridWidth, _yStart + 4 * gridHeight));
               gh.DrawLine(drawBasicLine, new Point(_xStart + i * gridWidth, _yStart + 5 * gridHeight), new Point(_xStart + i * gridWidth, _yStart + _chessBoardHeight));
           }
           //画横线(9行8条线)
           for (int i = 1; i <= 8; i++)
           {
               gh.DrawLine(drawBasicLine, new Point(_xStart, _yStart + i * gridHeight), new Point(_xStart + _chessBoardWidth, _yStart + i * gridHeight));
           }
           //画“楚河汉界”
           SizeF fRiver = gh.MeasureString("楚 河", drawRiverFont);
           SizeF fBound = gh.MeasureString("汉 界", drawRiverFont);
           gh.DrawString("楚 河", drawRiverFont, Brushes.Red, new PointF(_xStart + _chessBoardWidth - _riverFontFromBorder - fRiver.Width, _yStart + 4 * gridHeight + (float)(gridHeight - fRiver.Height) / 2));
           gh.DrawString("汉 界", drawRiverFont, Brushes.Red, new PointF(_xStart + _riverFontFromBorder, _yStart + 4 * gridHeight + (float)(gridHeight - fBound.Height) / 2));
           //gh.DrawString("楚 河", drawRiverFont, Brushes.Red, new PointF((_xStart + _chessBoardWidth)/2 - _riverFontFromBorder, _yStart + 4 * gridHeight + (float)(gridHeight - fRiver.Height) / 2));
           //画将/帅的皇宫
           gh.DrawLine(drawBasicLine, new Point(_xStart + 3 * gridWidth, _yStart), new Point(_xStart + 5 * gridWidth, _yStart + 2 * gridHeight));
           gh.DrawLine(drawBasicLine, new Point(_xStart + 3 * gridWidth, _yStart + 2 * gridHeight), new Point(_xStart + 5 * gridWidth, _yStart));

           gh.DrawLine(drawBasicLine, new Point(_xStart + 3 * gridWidth, _yStart + 7 * gridHeight), new Point(_xStart + 5 * gridWidth, _yStart + _chessBoardHeight));
           gh.DrawLine(drawBasicLine, new Point(_xStart + 3 * gridWidth, _yStart + _chessBoardHeight), new Point(_xStart + 5 * gridWidth, _yStart + 7 * gridHeight));
           //画“炮”的位置
           for (int i = 0; i <= 1; i++)
           {
               for (int j = 0; j <= 1; j++)
               {
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + gridWidth - _locationLength - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationLength - _locationFromBorder+i*5*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + gridWidth - _locationLength - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + 2 * _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + 2 * _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth - _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + _locationLength + 2 * _locationFromBorder+i*5*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + gridWidth + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + _locationLength + 2 * _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + 2 * _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth + _locationLength + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight + 2 * _locationFromBorder+i*5*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + gridWidth + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationLength - _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationFromBorder+i*5*gridHeight),
                       new Point(_xStart + gridWidth + _locationLength + 2 * _locationFromBorder + j * 6 * gridWidth, _yStart + 2 * gridHeight - _locationFromBorder+i*5*gridHeight) });

               }
           }
           //画“卒”的位置
           for (int i = 0; i <= 1; i++)
           {
               for (int j = 0; j <= 2; j++)
               {
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2*gridWidth - _locationLength - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationLength - _locationFromBorder+i*3*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2*gridWidth - _locationLength - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth - _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + _locationLength + 2 * _locationFromBorder+i*3*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2*gridWidth + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + _locationLength + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth + _locationLength + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight) });
                   gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2*gridWidth + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationLength - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2*gridWidth + _locationLength + 2 * _locationFromBorder + j *2 * gridWidth, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight) });

               }
           }
           for (int i = 0; i <= 1; i++)
           {
               gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2 * _locationFromBorder, _yStart + 3 * gridHeight + _locationLength + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2 * _locationFromBorder, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + _locationLength + 2 * _locationFromBorder, _yStart + 3 * gridHeight + 2 * _locationFromBorder+i*3*gridHeight) });
               gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + 2 * _locationFromBorder, _yStart + 3 * gridHeight - _locationLength - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + 2 * _locationFromBorder, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight),
                       new Point(_xStart + _locationLength + 2 * _locationFromBorder, _yStart + 3 * gridHeight - _locationFromBorder+i*3*gridHeight) });
           }
           for (int j = 0; j <= 1; j++)
           {
               gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + _chessBoardWidth - _locationLength - 2*_locationFromBorder, _yStart + 3 * gridHeight - _locationFromBorder+j*3*gridHeight),
                       new Point(_xStart + _chessBoardWidth - 2*_locationFromBorder , _yStart + 3 * gridHeight - _locationFromBorder+j*3*gridHeight),
                       new Point(_xStart + _chessBoardWidth - 2*_locationFromBorder, _yStart + 3 * gridHeight - _locationLength - _locationFromBorder+j*3*gridHeight) });
               gh.DrawLines(drawInnerRecPen, new Point[] {
                       new Point(_xStart + _chessBoardWidth - _locationLength - 2*_locationFromBorder , _yStart + 3 * gridHeight + 2 * _locationFromBorder+j*3*gridHeight),
                       new Point(_xStart + _chessBoardWidth - 2*_locationFromBorder, _yStart + 3 * gridHeight + 2 * _locationFromBorder+j*3*gridHeight),
                       new Point(_xStart + _chessBoardWidth - 2*_locationFromBorder, _yStart + 3 * gridHeight + _locationLength + 2 * _locationFromBorder+j*3*gridHeight) });
           }

           gh.Flush();
       }

       private void Form1_Load(object sender, EventArgs e)
       {

           panel1.Size = new System.Drawing.Size(462, 512);
           panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(205)))), ((int)(((byte)(170)))));

           for (int i = 0; i <= 2; i++)
           {
               for (int j = 0; j < 8; j++)
               {
                   //gh.DrawEllipse(drawOutterR,);
               }
           }
       }

   }
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:c#编写中国象棋棋盘的思想-创新互联
文章链接:http://scyanting.com/article/gedco.html