Exemplo n.º 1
0
        /// <summary>
        /// Devolve qual é a ponta livre desta pedra, comparada à outra pedra
        /// </summary>
        /// <param name="pedra2"></param>
        /// <returns></returns>
        public int PontaLivre(Pedra pedra2)
        {
            if (Lado1 == pedra2.Lado1 || Lado1 == pedra2.Lado2)
            {
                return(Lado2);
            }
            if (Lado2 == pedra2.Lado1 || Lado2 == pedra2.Lado2)
            {
                return(Lado1);
            }

            // Pedras não tem lados iguais, devolve -1 como erro
            return(-1);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Executa uma jogada, adicionando a pedra na mesa em alguma ponta
        /// </summary>
        /// <param name="pedra">Qual é a pedra</param>
        /// <param name="lado">Em qual ponta a pedra será jogada</param>
        public void Jogar(Pedra pedra, Lado lado)
        {
            if (_pedrasJogadas.Count == 0)
            {
                _pedrasJogadas.AddFirst(pedra);
                return;
            }

            var ponta = ObterPonta(lado);

            if (!pedra.PodeJogar(ponta))
            {
                throw new InvalidOperationException($"Não pode jogar a pedra {pedra} numa ponta {ponta}, lado {lado}");
            }

            if (lado == Lado.Esquerdo)
            {
                _pedrasJogadas.AddFirst(pedra);
            }
            else
            {
                _pedrasJogadas.AddLast(pedra);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Adiciona uma pedra comprada na mão do jogador
 /// </summary>
 /// <param name="pedra"></param>
 public void Adicionar(Pedra pedra)
 {
     Mao.Add(pedra);
 }
Exemplo n.º 4
0
 protected bool Equals(Pedra other)
 {
     return(Lado1 == other.Lado1 && Lado2 == other.Lado2);
 }