public ChessWeight(int[] data, GobangPlayer m_play) { ValuePlayer = m_play; Array.Sort(data); Array.Reverse(data); WeightMax = data[0]; WeightLarge = data[1]; WeightSmall = data[2]; WeightMin = data[3]; if ((WeightMax == 11 || WeightMax == 12) && (WeightLarge == 11 || WeightLarge == 12)) { WeightMax = 40; } if ((WeightMax == 11 || WeightMax == 12) && (WeightLarge == 9 || WeightLarge == 10)) { WeightMax = 30; } if (ValuePlayer == GobangPlayer.Player2) { if ((WeightMax == 11 || WeightMax == 12) && WeightLarge < 7) { WeightMax = 7; } } }
private bool IsPositionHasPawn(int x, int y, GobangPlayer player) { if (x >= 0 && x < 21 && y >= 0 && y < 21) { return(main_chess[x, y].GobangPlayer == player); } else { return(false); } }
private void SetPointPawn(Point point, GobangPlayer player1) { main_chess[point.X, point.Y].GoBangPlayer = player1; main_chess[point.X, point.Y].StepNumber = PawnIndex++; LastPressPosition = point; CurrentPlayer = player1; if (player1 == GobangPlayer.Player1) { computerAI_Du.CalculateAllPoints(); } }
private ChessWeight GetWeight(int m_x, int m_y, GobangPlayer m_player) { int[] m_Weight = new int[4]; for (int i = 0; i < 4; i++) { m_Weight[i] = GetWeightSingle(i, m_x, m_y, m_player); } ChessWeight cw = new ChessWeight(m_Weight, m_player); return(cw); }
private void SetPointPawn(Point point, GobangPlayer player) { main_chess[point.X, point.Y].GobangPlayer = player; main_chess[point.X, point.Y].StepNumber = PawnIndex++; LastPressPosition = point; CurrentPlayer = player; if (player == GobangPlayer.Player1) { Richard_Hu.CalculateAllPoints(); } }
private ChessWeight GetWeight(int m_x, int m_y, GobangPlayer m_play) { int[] m_Weight = new int[4]; for (int i = 0; i < 4; i++) { m_Weight[i] = GetWeightSingle(i, m_x, m_y, m_play); } //return CalculateWright1(m_Weight, 4, m_play); ChessWeight CW = new ChessWeight(m_Weight, m_play); //if(m_play==Player.Player1) //{ //if (CW.WeightMax == 7 && CW.WeightLarge != 5) //{ //CW.WeightMax = 5; //} //} return(CW); }
private GobangPoint GetClassPoint(int x, int y, GobangPlayer m_play) { if (x >= 0 && x < 21 && y >= 0 && y < 21) { return(main_chess[x, y]); } else { if (m_play == GobangPlayer.Player1) { return(new GobangPoint() { GobangPlayer = GobangPlayer.Player2 }); } else { return(new GobangPoint() { GobangPlayer = GobangPlayer.Player1 }); } } }
private Chessman GetClassChessMan(int m_x, int m_y, GobangPlayer m_player) { if (m_x >= 0 && m_x < 21 && m_y >= 0 && m_y < 21) { return(main_chess[m_x, m_y]); } else { if (m_player == GobangPlayer.Player1) { return(new Chessman() { GoBangPlayer = GobangPlayer.Player2 }); } else { return(new Chessman() { GoBangPlayer = GobangPlayer.Player1 }); } } }
private int GetWeightSingle(int Direction, int x, int y, GobangPlayer player) { //定义九个端子 GobangPoint[] LEFT_TO_RIGHT = new GobangPoint[9]; if (Direction == 0) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassPoint(x + i - 4, y, player); } } else if (Direction == 1) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassPoint(x, y + i - 4, player); } } else if (Direction == 2) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassPoint(x + i - 4, y + i - 4, player); } } else { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassPoint(x - (i - 4), y + i - 4, player); } } GobangPlayer player_enemy = GobangPlayer.Player1; if (player == GobangPlayer.Player1) { player_enemy = GobangPlayer.Player2; } GobangPoint OwnPawn = new GobangPoint() { GobangPlayer = player }; GobangPoint OtherPawn = new GobangPoint() { GobangPlayer = player_enemy }; //综合考虑所有的情况 if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(1); } //五子 if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(200); } //四子两头空 if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(50); } //o*o*o*o if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn) { return(50); } //四子一头空 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OtherPawn) { return(12); } //1 if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty) { return(11); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } //四子两头堵 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OtherPawn) { return(0); } //三子两头空============================================= //以下三种情况削减得分 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OtherPawn) { return(7); } if ( LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(10); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(10); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(10); } //特殊处理 if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(9); } //三子一头空================================================== if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(8); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(8); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(8); } //特殊情况 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } //特殊状态的冲三 if (LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty) { return(7); } //三子两头堵==================================== if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(0); } //两子两头空========================================== if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(6); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OwnPawn) { return(6); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[8].IsEmpty) { return(5); } //两子一头空============================================== if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(4); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(4); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(4); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(4); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[5] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[1].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[7] == OtherPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty) { return(3); } //两子两头堵 if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } //一子两头空 if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(1); } //一子一头空 if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(2); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(2); } //一子两头堵 if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } return(1); }
private bool IsGameOver(int x, int y, GobangPlayer player) { int m_lenght = 1; int m_x = x; int m_y = y; GobangPlayer m_play = player; for (int j = 0; j < 4; j++) { m_lenght = 1; Point m_Point_1; for (int i = 1; i < 5; i++) { if (j == 0) { m_Point_1 = new Point(m_x - i, m_y); } else if (j == 1) { m_Point_1 = new Point(m_x, m_y - i); } else if (j == 2) { m_Point_1 = new Point(m_x - i, m_y + i); } else { m_Point_1 = new Point(m_x - i, m_y - i); } if (IsPositionHasPawn(m_Point_1, player)) { m_lenght++; } else { break; } } for (int i = 1; i < 5; i++) { if (j == 0) { m_Point_1 = new Point(m_x + i, m_y); } else if (j == 1) { m_Point_1 = new Point(m_x, m_y + i); } else if (j == 2) { m_Point_1 = new Point(m_x + i, m_y - i); } else { m_Point_1 = new Point(m_x + i, m_y + i); } if (IsPositionHasPawn(m_Point_1, player)) { m_lenght++; } else { break; } } if (m_lenght >= 5) { return(true); } m_lenght = 1; } return(false); }
private bool IsPositionHasPawn(Point point, GobangPlayer player) { return(IsPositionHasPawn(point.X, point.Y, player)); }
private int GetWeightSingle(int Direction, int m_x, int m_y, GobangPlayer m_player) { Chessman[] LEFT_TO_RIGHT = new Chessman[9]; if (Direction == 0) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassChessMan(m_x + i - 4, m_y, m_player); } } else if (Direction == 1) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassChessMan(m_x, m_y + i - 4, m_player); } } else if (Direction == 2) { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassChessMan(m_x + i - 4, m_y + i - 4, m_player); } } else { for (int i = 0; i < 9; i++) { LEFT_TO_RIGHT[i] = GetClassChessMan(m_x - (i - 4), m_y + i - 4, m_player); } } GobangPlayer player_enemy = GobangPlayer.Player1; if (m_player == GobangPlayer.Player1) { player_enemy = GobangPlayer.Player2; } Chessman OwnPawn = new Chessman() { GoBangPlayer = m_player }; Chessman OtherPawn = new Chessman() { GoBangPlayer = player_enemy }; if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(1);//四周都没有棋子为1 } //0000# if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn) { return(200); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(200); } //四子两头空 //*000#* if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(50); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(50); } //0*0#0*0 if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn) { return(50); } //四子一头空 1000#* if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(12); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(12); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OtherPawn) { return(12); } //0*00 if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty) { return(11); } if (LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn) { return(11); } if (LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OwnPawn) { return(11); } //四子两头堵1000#1 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OtherPawn) { return(0); } //三子两头空============================================= //以下三种情况削减得分1*00#**1 if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OtherPawn) { return(7); } if ( LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } //*00#* if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(10); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(10); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(10); } //特殊处理 //*00#** if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(9); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(9); } //三子一头空================================================== //100#** if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8].IsEmpty) { return(8); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(8); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(8); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(8); } //100*#* if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0] == OtherPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[8] == OtherPawn) { return(7); } //特殊状态的冲三 //#**00 if (LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[8] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[6].IsEmpty) { return(7); } if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty) { return(7); } //三子两头堵==================================== //100#1 if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[7] == OtherPawn) { return(0); } //两子两头空========================================== //0*0*#* if (LEFT_TO_RIGHT[0] == OwnPawn && LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(6); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty && LEFT_TO_RIGHT[8] == OwnPawn) { return(6); } //*1#* if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[1].IsEmpty && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[0].IsEmpty && LEFT_TO_RIGHT[1] == OwnPawn && LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(5); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[7] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[8].IsEmpty) { return(5); } //两子一头空============================================== //10#* if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(4); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6].IsEmpty) { return(4); } if (LEFT_TO_RIGHT[2].IsEmpty && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(4); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(4); } //1#*0* if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[7].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[1] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[5] == OtherPawn && LEFT_TO_RIGHT[2] == OwnPawn && LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[1].IsEmpty) { return(3); } if (LEFT_TO_RIGHT[7] == OtherPawn && LEFT_TO_RIGHT[6] == OwnPawn && LEFT_TO_RIGHT[5].IsEmpty && LEFT_TO_RIGHT[3].IsEmpty) { return(3); } //两子两头堵10#1 if (LEFT_TO_RIGHT[2] == OtherPawn && LEFT_TO_RIGHT[3] == OwnPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OwnPawn && LEFT_TO_RIGHT[6] == OtherPawn) { return(0); } //一子两头空*#* if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5].IsEmpty) { return(1); } //一子一头空1#* if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5].IsEmpty) { return(2); } if (LEFT_TO_RIGHT[3].IsEmpty && LEFT_TO_RIGHT[5] == OtherPawn) { return(2); } //一子两头堵1#1 if (LEFT_TO_RIGHT[3] == OtherPawn && LEFT_TO_RIGHT[5] == OtherPawn) { return(0); } return(1); }
public Task <Point> CalculateComputerAI(GobangPlayer player) { return(Task.Run <Point>(() => { Task.Delay(100); GobangPlayer enemy = GobangPlayer.Player1; if (player == enemy) { enemy = GobangPlayer.Player2; } ChessWeight[,] m_Weights_opinion = new ChessWeight[21, 21]; ChessWeight[,] m_Weights_enemy = new ChessWeight[21, 21]; for (int i = 0; i < 21; i++) { for (int j = 0; j < 21; j++) { if (main_chess[i, j].GoBangPlayer != GobangPlayer.NoPlayer) { m_Weights_opinion[i, j] = new ChessWeight(new int[] { -1, -1, -1, -1 }, player); m_Weights_enemy[i, j] = new ChessWeight(new int[] { -1, -1, -1, -1 }, enemy); continue; } m_Weights_opinion[i, j] = GetWeight(i, j, player); m_Weights_enemy[i, j] = GetWeight(i, j, enemy); m_Weights_opinion[i, j].WeightOppinent = m_Weights_enemy[i, j].WeightMax; m_Weights_enemy[i, j].WeightOppinent = m_Weights_opinion[i, j].WeightMax; } } List <Point> MaxPointComputer = new List <Point>(); int MaxPlayer1 = 0; int MaxPlayer2 = 0; List <Point> MaxPointPlayer1 = new List <Point>(); for (int i = 0; i < 21; i++) { for (int j = 0; j < 21; j++) { if (m_Weights_opinion[i, j].TotalWeight > MaxPlayer1) { MaxPlayer1 = m_Weights_opinion[i, j].TotalWeight; MaxPointComputer.Clear(); MaxPointComputer.Add(new Point(i, j)); } else if (m_Weights_opinion[i, j].TotalWeight == MaxPlayer1) { MaxPointComputer.Add(new Point(i, j)); } if (m_Weights_enemy[i, j].TotalWeight > MaxPlayer2) { MaxPlayer2 = m_Weights_enemy[i, j].TotalWeight; MaxPointPlayer1.Clear(); MaxPointPlayer1.Add(new Point(i, j)); } else if (m_Weights_enemy[i, j].TotalWeight == MaxPlayer2) { MaxPointPlayer1.Add(new Point(i, j)); } } } if ((MaxPlayer1 > 49 && MaxPlayer2 < 200) || (MaxPlayer1 >= 200) && MaxPlayer2 >= 200) { int MaxTemp = 0; Point MaxPoint = new Point(); for (int i = 0; i < MaxPointComputer.Count; i++) { if (MaxTemp < m_Weights_opinion[MaxPointComputer[i].X, MaxPointComputer[i].Y].WeightOppinent) { MaxTemp = m_Weights_opinion[MaxPointComputer[i].X, MaxPointComputer[i].Y].WeightOppinent; MaxPoint = MaxPointComputer[i]; } } return MaxPoint; } if (MaxPlayer1 >= MaxPlayer2) { int MaxTemp = 0; Point MaxPoint = new Point(); for (int i = 0; i < MaxPointComputer.Count; i++) { if (MaxTemp < m_Weights_opinion[MaxPointComputer[i].X, MaxPointComputer[i].Y].WeightOppinent) { MaxTemp = m_Weights_opinion[MaxPointComputer[i].X, MaxPointComputer[i].Y].WeightOppinent; MaxPoint = MaxPointComputer[i]; } } return MaxPoint; } else { int MaxTemp = 0; Point MaxPoint = new Point(); for (int i = 0; i < MaxPointPlayer1.Count; i++) { if (m_Weights_enemy[MaxPointPlayer1[i].X, MaxPointPlayer1[i].Y].WeightOppinent > MaxTemp) { MaxTemp = m_Weights_enemy[MaxPointPlayer1[i].X, MaxPointPlayer1[i].Y].WeightOppinent; MaxPoint = MaxPointPlayer1[i]; } } return MaxPoint; } })); }