c# |
您所在的位置:网站首页 › 象棋的棋盘怎么画 › c# |
先画出了棋盘,效果类似QQ游戏里面的,程序如下:
namespace ChineseChess{ 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画笔 //字体 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;//线的起始x坐标 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 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.Black, new PointF(_xStart + _chessBoardWidth - _riverFontFromBorder - fRiver.Width, _yStart + 4 * gridHeight + (float)(gridHeight - fRiver.Height) / 2)); gh.DrawString("汉 界", drawRiverFont, Brushes.Black, new PointF(_xStart + _riverFontFromBorder, _yStart + 4 * gridHeight + (float)(gridHeight - fBound.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 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 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 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))))); } }} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |