示例#1
0
 /// <summary>
 /// 在指定位置畫上棋子移動完畢的符號
 /// </summary>
 /// <param name="g">輸出的Graphics物件</param>
 /// <param name="bCode">棋格代號</param>
 public static void DrawMovedSymbol(Graphics g, BoardCodeEnum bCode)
 {
     Bitmap bit = null;
     PointF p = new PointF(0f,0f);
     PointF offset_P = new PointF(0f,0f);
     bit = (Bitmap)htPieceMap[15];
     p = GetBoardCoordinate(bCode);
     offset_P = new PointF(p.X - (bit.Width/2), p.Y - (bit.Height/2));
     g.DrawImage(bit, offset_P);
 }
示例#2
0
        /// <summary>
        /// 在指定位置畫上某種型態的棋子
        /// </summary>
        /// <param name="g">輸出的Graphics物件</param>
        /// <param name="bCode">棋格代號</param>
        /// <param name="pState">棋子選擇狀態</param>
        public static void DrawCell(Graphics g, BoardCodeEnum bCode, PieceStateEnum pState)
        {
            //get piece bitmap
            PieceColorEnum pColor = (PieceColorEnum)color[(int)bCode];
            PieceTypeEnum pType = (PieceTypeEnum)piece[(int)bCode];
            Bitmap bit = null;
            PointF p = new PointF(0f,0f);
            PointF offset_P = new PointF(0f,0f);
            switch(pColor)
            {
                case PieceColorEnum.DARK:
                    bit = (Bitmap)htPieceMap[(int)pColor * 7 + (int)pType + 1];
                    p = GetBoardCoordinate(bCode);
                    offset_P = new PointF(p.X - (bit.Width/2), p.Y - (bit.Height/2));
                    if(pState == PieceStateEnum.SELECT)
                    {
                        //g.DrawImage(bit, offset_P);
                        Bitmap oBit = new Bitmap(bit, Size.Ceiling(new SizeF(41f,41f)));
                        g.DrawImage(oBit, offset_P);
                    }
                    else
                    {
                        g.DrawImage(bit, offset_P);
                    }
                    break;
                case PieceColorEnum.LIGHT:
                    bit = (Bitmap)htPieceMap[(int)pColor * 7 + (int)pType + 1];

                    p = GetBoardCoordinate(bCode);
                    offset_P = new PointF(p.X - (bit.Width/2), p.Y - (bit.Height/2));
                    if(pState == PieceStateEnum.SELECT)
                    {
                        //g.DrawImage(bit, offset_P);
                        Bitmap oBit = new Bitmap(bit, Size.Ceiling(new SizeF(41f,41f)));
                        g.DrawImage(oBit, offset_P);
                    }
                    else
                    {
                        g.DrawImage(bit, offset_P);
                    }
                    break;
                case PieceColorEnum.EMPTY:
                    break;
                default:
                    break;
            }

            string LogMessage =
                "BoardCode = " + bCode.ToString() + "\n" +
                "State = " + pState.ToString() + "\n" +
                "pColor = " + pColor.ToString() + "\n" +
                "pType = " + pType.ToString() + "\n" +
                "P(" + p.X.ToString() + "," + p.Y.ToString() + ")\n" +
                "offset_P(" + offset_P.X.ToString() + "," + offset_P.Y.ToString() + ")";

            WriteLog("DrawCell", LogMessage);
        }
示例#3
0
 /// <summary>
 /// 簡化畫棋盤軸所用的畫線函式
 /// </summary>
 /// <param name="g">輸出的Graphics物件</param>
 /// <param name="p">使用哪種畫筆</param>
 /// <param name="Begin">起點</param>
 /// <param name="End">終點</param>
 private static void FastDrawLine(Graphics g, Pen p, BoardCodeEnum Begin, BoardCodeEnum End)
 {
     g.DrawLine(p, GetBoardCoordinate(Begin),  GetBoardCoordinate(End));
 }
示例#4
0
 /// <summary>
 /// Enum棋盤代號轉換成實際座標
 /// </summary>
 /// <param name="bCode">Enum棋盤代號</param>
 /// <returns>Point</returns>
 private static PointF GetBoardCoordinate(BoardCodeEnum bCode)
 {
     int hCoord = ((int)bCode) % constChess.SIZE_X;
     int vCoord = ((int)bCode) / constChess.SIZE_X;
     float adj_hCoord = (hCoord * GridWidth + ZeroPoint.X) + GridSpacing * 2;
     float adj_vCoord = (vCoord * GridWidth + ZeroPoint.Y) + GridSpacing * 2;
     return new PointF(adj_hCoord, adj_vCoord);
 }
示例#5
0
        /// <summary>
        /// 簡化畫棋盤陣地符號的畫圖函式
        /// </summary>
        /// <param name="g">輸出的Graphics物件</param>
        /// <param name="p">使用哪種畫筆</param>
        /// <param name="pt">陣地中心點</param>
        private static void FastDrawCamp(Graphics g, Pen p, BoardCodeEnum pt)
        {
            /*
                示意圖

                        *
                    A	*	B
                C	D	*	E	F
            *	*	*	c.	*	*	*
                G	H	*	I	J
                    K	*	L
                        *
            */

            #region Get Camp Center Point Coordinate
            PointF CampCenter = GetBoardCoordinate(pt);
            #endregion

            #region Prepare Camp Points into Hashtable
            Hashtable htCamp = new Hashtable(12);
            htCamp.Add("A", new PointF(CampCenter.X - CampSpacing, CampCenter.Y - CampSpacing - CampWidth));
            htCamp.Add("B", new PointF(CampCenter.X + CampSpacing, CampCenter.Y - CampSpacing - CampWidth));
            htCamp.Add("C", new PointF(CampCenter.X - CampSpacing - CampWidth, CampCenter.Y - CampSpacing));
            htCamp.Add("D", new PointF(CampCenter.X - CampSpacing, CampCenter.Y - CampSpacing));
            htCamp.Add("E", new PointF(CampCenter.X + CampSpacing, CampCenter.Y - CampSpacing));
            htCamp.Add("F", new PointF(CampCenter.X + CampSpacing + CampWidth, CampCenter.Y - CampSpacing));
            htCamp.Add("G", new PointF(CampCenter.X - CampSpacing - CampWidth, CampCenter.Y + CampSpacing));
            htCamp.Add("H", new PointF(CampCenter.X - CampSpacing, CampCenter.Y + CampSpacing));
            htCamp.Add("I", new PointF(CampCenter.X + CampSpacing, CampCenter.Y + CampSpacing));
            htCamp.Add("J", new PointF(CampCenter.X + CampSpacing + CampWidth, CampCenter.Y + CampSpacing));
            htCamp.Add("K", new PointF(CampCenter.X - CampSpacing, CampCenter.Y + CampSpacing + CampWidth));
            htCamp.Add("L", new PointF(CampCenter.X + CampSpacing, CampCenter.Y + CampSpacing + CampWidth));
            #endregion

            #region Draw output
            int CheckHalfNo = ((int)pt) % 9;

            //Left Size
            if(CheckHalfNo != 0)
            {
                g.DrawLine(p, (PointF)htCamp["A"], (PointF)htCamp["D"]);
                g.DrawLine(p, (PointF)htCamp["C"], (PointF)htCamp["D"]);
                g.DrawLine(p, (PointF)htCamp["G"], (PointF)htCamp["H"]);
                g.DrawLine(p, (PointF)htCamp["H"], (PointF)htCamp["K"]);
            }
            //Right Size
            if(CheckHalfNo != 8)
            {
                g.DrawLine(p, (PointF)htCamp["B"], (PointF)htCamp["E"]);
                g.DrawLine(p, (PointF)htCamp["E"], (PointF)htCamp["F"]);
                g.DrawLine(p, (PointF)htCamp["I"], (PointF)htCamp["J"]);
                g.DrawLine(p, (PointF)htCamp["I"], (PointF)htCamp["L"]);
            }
            #endregion
        }