Example #1
0
        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;
                }
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
 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();
     }
 }
Example #4
0
        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);
        }
Example #5
0
        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();
            }
        }
Example #6
0
        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);
        }
Example #7
0
 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
             });
         }
     }
 }
Example #8
0
 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
             });
         }
     }
 }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
 private bool IsPositionHasPawn(Point point, GobangPlayer player)
 {
     return(IsPositionHasPawn(point.X, point.Y, player));
 }
Example #12
0
        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);
        }
Example #13
0
        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;
                }
            }));
        }