/// <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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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 }