pdachess.Form1.ischeck C# (CSharp) Method

ischeck() private method

private ischeck ( Token map, string side ) : bool
map Token
side string
return bool
        private bool ischeck(Token[] map,string side)
        {
            try
            {
                int k;
                for (k = 0; k < 64; k++)
                {
                    if (map[k] != null && map[k].getType() == "King" && map[k].getSide() == side)
                        break;
                }
                int x = map[k].getX();
                int y = map[k].getY();

                //check for pawn
                if ((side == "b") ? y < 7 : y > 0)
                {
                    if (x > 0 && map[getIndex(x - 1, (side == "b") ? y + 1 : y - 1)] != null &&
                        map[getIndex(x - 1, (side == "b") ? y + 1 : y - 1)].getType() == "Pawn" && map[getIndex(x - 1, (side == "b") ? y + 1 : y - 1)].getSide() != side)
                    {
                        return true;
                    }
                    if (x < 7 && map[getIndex(x + 1, (side == "b") ? y + 1 : y - 1)] != null &&
                        map[getIndex(x + 1, (side == "b") ? y + 1 : y - 1)].getType() == "Pawn" && map[getIndex(x + 1, (side == "b") ? y + 1 : y - 1)].getSide() != side)
                    {
                        return true;
                    }
                }
                //check for king
                for (int i = 0; i < 8; i++)
                {
                    int dx = King_move[i].X + x;
                    int dy = King_move[i].Y + y;
                    if (dx < 0 || dx > 7 || dy < 0 || dy > 7) continue;
                    if (map[getIndex(dx, dy)] != null && map[getIndex(dx, dy)].getType() == "King" && map[getIndex(dx, dy)].getSide() != side)
                        return true;
                }
                //check for knight
                for (int i = 0; i < 8; i++)
                {
                    int dx = Knight_move[i].X + x;
                    int dy = Knight_move[i].Y + y;
                    if (dx < 0 || dx > 7 || dy < 0 || dy > 7) continue;
                    if (map[getIndex(dx, dy)] != null && map[getIndex(dx, dy)].getType() == "Knight" && map[getIndex(dx, dy)].getSide() != side)
                        return true;
                }
                //check for castle&queen
                for (int i = 0; i < 28; i++)
                {
                    int dx = Castle_move[i].X + x;
                    int dy = Castle_move[i].Y + y;
                    if (dx < 0 || dx > 7 || dy < 0 || dy > 7) continue;
                    if (map[getIndex(dx, dy)] != null)
                    {
                        if ((map[getIndex(dx, dy)].getType() == "Castle" || map[getIndex(dx, dy)].getType() == "Queen")
                        && map[getIndex(dx, dy)].getSide() != side)
                            return true;
                        i = ((i / 7) + 1) * 7 - 1;
                    }
                }
                //check for bishop&queen
                for (int i = 0; i < 28; i++)
                {
                    int dx = Bishop_move[i].X + x;
                    int dy = Bishop_move[i].Y + y;
                    if (dx < 0 || dx > 7 || dy < 0 || dy > 7) continue;
                    if (map[getIndex(dx, dy)] != null)
                    {
                        if ((map[getIndex(dx, dy)].getType() == "Bishop" || map[getIndex(dx, dy)].getType() == "Queen")
                        && map[getIndex(dx, dy)].getSide() != side)
                            return true;
                        i = ((i / 7) + 1) * 7 - 1;
                    }
                }
                return false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); return false; }
        }