public static void Rei(PecaXadres peca, ref List<PecaXadres> ListaLugaresValidos, ref ObservableCollection<PecaXadres> Pecas)
        {
            for (int i =0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {

                    PecaXadres vRei = new PecaXadres();
                    vRei.Tipo = TipoPeca.LugarValido;
                    vRei.Jogador = Jogador.GM;
                    vRei.Pos = new Point(peca.Pos.X + i, peca.Pos.Y+j);
                    if (!peca.Pos.Equals(vRei.Pos))
                    {
                        Pecas.Add(vRei);
                        ListaLugaresValidos.Add(vRei);
                    }

                    vRei = new PecaXadres();
                    vRei.Tipo = TipoPeca.LugarValido;
                    vRei.Jogador = Jogador.GM;
                    vRei.Pos = new Point(peca.Pos.X - i, peca.Pos.Y - j);
                    if (!peca.Pos.Equals(vRei.Pos))
                    {
                        Pecas.Add(vRei);
                        ListaLugaresValidos.Add(vRei);
                    }

                    vRei = new PecaXadres();
                    vRei.Tipo = TipoPeca.LugarValido;
                    vRei.Jogador = Jogador.GM;
                    vRei.Pos = new Point(peca.Pos.X + i, peca.Pos.Y - j);
                    if (!peca.Pos.Equals(vRei.Pos))
                    {
                        Pecas.Add(vRei);
                        ListaLugaresValidos.Add(vRei);
                    }

                    vRei = new PecaXadres();
                    vRei.Tipo = TipoPeca.LugarValido;
                    vRei.Jogador = Jogador.GM;
                    vRei.Pos = new Point(peca.Pos.X - i, peca.Pos.Y + j);
                    if (!peca.Pos.Equals(vRei.Pos))
                    {
                        Pecas.Add(vRei);
                        ListaLugaresValidos.Add(vRei);
                    }

                }
            }
        }
        public static void Torre(PecaXadres peca, ref List<PecaXadres> ListaLugaresValidos, ref ObservableCollection<PecaXadres> Pecas)
        {
            for (double i = peca.Pos.Y; i < 8; i++)
            {
                PecaXadres vTorre = new PecaXadres();
                vTorre.Tipo = TipoPeca.LugarValido;
                vTorre.Jogador = Jogador.GM;
                vTorre.Pos = new Point(peca.Pos.X, i);
                bool pecaAmiga =
                    Pecas.Any(item => item.Pos.Equals(new Point(peca.Pos.X, i)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga && !vTorre.Pos.Equals(peca.Pos))
                {
                    break;
                }
                if (!vTorre.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vTorre);
                    ListaLugaresValidos.Add(vTorre);

                }

            }
            for (double i = peca.Pos.Y; i >= 0; i--)
            {
                PecaXadres vTorre = new PecaXadres();
                vTorre.Tipo = TipoPeca.LugarValido;
                vTorre.Jogador = Jogador.GM;
                vTorre.Pos = new Point(peca.Pos.X, i);
                bool pecaAmiga =
                    Pecas.Any(item => item.Pos.Equals(new Point(peca.Pos.X, i)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga && !vTorre.Pos.Equals(peca.Pos))
                {
                    break;
                }
                if (!vTorre.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vTorre);
                    ListaLugaresValidos.Add(vTorre);

                }

            }
            for (double i = peca.Pos.X; i < 8; i++)
            {
                PecaXadres vTorre = new PecaXadres();
                vTorre.Tipo = TipoPeca.LugarValido;
                vTorre.Jogador = Jogador.GM;
                vTorre.Pos = new Point(i, peca.Pos.Y);

                bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(new Point(i, peca.Pos.Y)) && item.Jogador.Equals(peca.Jogador));

                if (pecaAmiga && !vTorre.Pos.Equals(peca.Pos))
                {
                    break;
                }
                if (!vTorre.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vTorre);
                    ListaLugaresValidos.Add(vTorre);

                }

            }
            for (double i = peca.Pos.X; i >= 0; i--)
            {
                PecaXadres vTorre = new PecaXadres();
                vTorre.Tipo = TipoPeca.LugarValido;
                vTorre.Jogador = Jogador.GM;
                vTorre.Pos = new Point(i, peca.Pos.Y);

                bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(new Point(i, peca.Pos.Y)) && item.Jogador.Equals(peca.Jogador));

                if (pecaAmiga && !vTorre.Pos.Equals(peca.Pos))
                {
                    break;
                }
                if (!vTorre.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vTorre);
                    ListaLugaresValidos.Add(vTorre);

                }
            }
        }
        public static void Peao(PecaXadres peca, ref List<PecaXadres> ListaLugaresValidos, ref ObservableCollection<PecaXadres> Pecas)
        {
            double xValido = -1;
            double yValido = -1;

            if (peca.Jogador == Jogador.Branco)
            {
                yValido = peca.Pos.Y - 1;
            }
            else
            {
                yValido = peca.Pos.Y + 1;
            }
            PecaXadres vPeao = new PecaXadres();
            vPeao.Tipo = TipoPeca.LugarValido;
            vPeao.Jogador = Jogador.GM;
            vPeao.Pos = new Point(peca.Pos.X, yValido);
            Pecas.Add(vPeao);
            ListaLugaresValidos.Add(vPeao);
        }
        public static void Bispo(PecaXadres peca, ref List<PecaXadres> ListaLugaresValidos, ref ObservableCollection<PecaXadres> Pecas)
        {
            double bPosX = peca.Pos.X;
            double bPosY = peca.Pos.Y;

            double bPosX2 = peca.Pos.X;
            double bPosY2 = peca.Pos.Y;

            double bPosX3 = peca.Pos.X;
            double bPosY3 = peca.Pos.Y;

            double bPosX4 = peca.Pos.X;
            double bPosY4 = peca.Pos.Y;

            for (int i = 0; i < 8; i++)
            {
                PecaXadres vBispo = new PecaXadres();
                vBispo.Tipo = TipoPeca.LugarValido;
                vBispo.Jogador = Jogador.GM;
                vBispo.Pos = new Point(bPosX++, bPosY++);
                bool pecaAmiga =
                    Pecas.Any(item => item.Pos.Equals(new Point(bPosX, bPosY)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga)
                {
                    break;
                }
                if (!vBispo.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vBispo);
                    ListaLugaresValidos.Add(vBispo);

                }
            }
            for (int i = 0; i < 8; i++)
            {

                PecaXadres vBispo = new PecaXadres();
                vBispo.Tipo = TipoPeca.LugarValido;
                vBispo.Jogador = Jogador.GM;
                vBispo.Pos = new Point(bPosX2--, bPosY2--);
                bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(new Point(bPosX2, bPosY2)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga)
                {
                    break;
                }
                if (!vBispo.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vBispo);
                    ListaLugaresValidos.Add(vBispo);
                }

            }
            for (int i = 0; i < 8; i++)
            {
                PecaXadres vBispo = new PecaXadres();
                vBispo.Tipo = TipoPeca.LugarValido;
                vBispo.Jogador = Jogador.GM;
                vBispo.Pos = new Point(bPosX3++, bPosY3--);
                bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(new Point(bPosX3, bPosY3)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga)
                {
                    break;
                }
                if (!vBispo.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vBispo);
                    ListaLugaresValidos.Add(vBispo);
                }

            }
            for (int i = 0; i < 8; i++)
            {
                PecaXadres vBispo = new PecaXadres();
                vBispo.Tipo = TipoPeca.LugarValido;
                vBispo.Jogador = Jogador.GM;
                vBispo.Pos = new Point(bPosX4--, bPosY4++);
                bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(new Point(bPosX4, bPosY4)) && item.Jogador.Equals(peca.Jogador));
                if (pecaAmiga)
                {
                    break;
                }
                if (!vBispo.Pos.Equals(peca.Pos))
                {
                    Pecas.Add(vBispo);
                    ListaLugaresValidos.Add(vBispo);
                }

            }
        }
        public static void Cavalo(PecaXadres peca, ref List<PecaXadres> ListaLugaresValidos, ref ObservableCollection<PecaXadres> Pecas)
        {
            double cPosX = peca.Pos.X;
            double cPosY = peca.Pos.Y;

            PecaXadres vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX + 1, cPosY + 2);

            bool pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));

            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }
            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX + 2, cPosY + 1);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX + 2, cPosY - 1);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX + 1, cPosY - 2);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX - 1, cPosY - 2);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX - 2, cPosY - 1);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX - 2, cPosY + 1);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }

            vCavalo = new PecaXadres();
            vCavalo.Tipo = TipoPeca.LugarValido;
            vCavalo.Jogador = Jogador.GM;
            vCavalo.Pos = new Point(cPosX - 1, cPosY + 2);
            pecaAmiga = Pecas.Any(item => item.Pos.Equals(vCavalo.Pos) && item.Jogador.Equals(peca.Jogador));
            if (!pecaAmiga)
            {
                Pecas.Add(vCavalo);
                ListaLugaresValidos.Add(vCavalo);
            }
        }
示例#6
0
        private void MarcarLocaisValidos(PecaXadres peca)
        {
            switch (peca.Tipo)
            {
                case TipoPeca.Peao:

                    PossibilidadeMovimento.Peao(peca, ref ListaLugaresValidos, ref Pecas);

                    break;
                case TipoPeca.Torre:

                    PossibilidadeMovimento.Torre(peca, ref ListaLugaresValidos, ref Pecas);

                    break;
                case TipoPeca.Bispo:

                    PossibilidadeMovimento.Bispo(peca, ref ListaLugaresValidos, ref Pecas);

                    break;
                case TipoPeca.Cavalo:

                    PossibilidadeMovimento.Cavalo(peca, ref ListaLugaresValidos, ref Pecas);

                    break;
                case TipoPeca.Rainha:

                    PossibilidadeMovimento.Bispo(peca, ref ListaLugaresValidos, ref Pecas);
                    PossibilidadeMovimento.Torre(peca, ref ListaLugaresValidos, ref Pecas);

                    break;
                case TipoPeca.Rei:

                    PossibilidadeMovimento.Rei(peca, ref ListaLugaresValidos, ref Pecas);
                    break;
            }
        }
示例#7
0
        private void GridMouseDown1(object sender, MouseButtonEventArgs e)
        {
            Grid grid = (Grid)sender;
            PecaXadres peca = (PecaXadres)grid.DataContext;

            if (peca.Tipo == TipoPeca.LugarValido)
            {

                if (!PecaSelecionada.Pos.Equals(peca.Pos))
                {
                    PecaSelecionada.Pos = new Point(peca.Pos.X, peca.Pos.Y);
                    PecaSelecionada = null;
                    EliminarLugaresValidos();
                    GridDaPecaSelecionada.Background = null;
                }
            }
            else
            {
                    if (GridDaPecaSelecionada != null)
                    {
                        GridDaPecaSelecionada.Background = null;
                        EliminarLugaresValidos();
                    }

                    PecaSelecionada = peca;
                    MarcarLocaisValidos(peca);

                    grid.Background = Brushes.Yellow;
                    GridDaPecaSelecionada = grid;

            }
        }