/// <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); }
/// <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); } }
/// <summary> /// Adiciona uma pedra comprada na mão do jogador /// </summary> /// <param name="pedra"></param> public void Adicionar(Pedra pedra) { Mao.Add(pedra); }
protected bool Equals(Pedra other) { return(Lado1 == other.Lado1 && Lado2 == other.Lado2); }