public void TesteGeraRei() { GeradorRei gerador = new GeradorRei(); Rei rei = gerador.Gerar(rnd); Assert.IsNotNull(rei); }
void Start() { player1 = new Player(); player2 = new Player(); king = new Rei(); pawn = new Peao(); InvokeMovement(4, 1); }
public static void instanciarRei(char coluna, int linha, Cor cor, PartidaDeXadrez partida, GameObject prefab) { Vector3 pos = posicaoNaCena(coluna, linha); GameObject rei = Instantiate(prefab, pos, Quaternion.identity) as GameObject; Peca peca = new Rei(partida.tab, cor, partida, rei); partida.colocarNovaPeca(coluna, linha, peca); rei.GetComponent <ReferenciaPeca>().peca = peca; }
static void Main(string[] args) { Tabuleiro tab = new Tabuleiro(8, 8); Bispo bp = new Bispo(tab, Cor.Preta); Torre t1p = new Torre(tab, Cor.Preta); Torre t2p = new Torre(tab, Cor.Preta); Rei rp = new Rei(tab, Cor.Preta); tab.colocarPeca(t1p, new Posicao(0, 0)); tab.colocarPeca(t2p, new Posicao(1, 3)); tab.colocarPeca(rp, new Posicao(2, 4)); Tela.imprimirTabuleiro(tab); Console.WriteLine(); }
public static Peca ObterPeca(CorPeca cor, NomePeca nome) { Peca pecaXadrez = null; if (nome == NomePeca.Torre) { pecaXadrez = new Torre((Cor)cor, nome.ToString()); } else if (nome == NomePeca.Rei) { pecaXadrez = new Rei((Cor)cor, nome.ToString()); } return(pecaXadrez); }
protected bool PodeRoque(Torre torre, Rei rei, Tabuleiro tabuleiro, Movimento movrei, Movimento movtorre) { if (torre == null || rei == null || movrei == null || movtorre == null) { return(false); } // lembrando que as condições de roque são: // rei não pode ter se movimentado nenhuma vez // torre não pode ter se movimentado nenhuma vez if (!torre.primeiraJogada || !rei.primeiraJogada) { // Debug.Log("NÃO É A PRIMEIRA JOGADA!"); return(false); } // nao pode haver peças entre o rei e a torre int linha = rei.CasaAtual.PosY; // Debug.Log("linha rei:"); // Debug.Log(linha); int torrepos = torre.PosX; int reipos = rei.PosX; // Debug.Log("Coluna torre:"); // Debug.Log(torrepos); // Debug.Log("Coluna rei:"); // Debug.Log(reipos); int i, f; if (torrepos < reipos) { // Debug.Log("a posição entre torre e rei caracteriza um roque maior(ou era para caracterizar)"); i = torrepos; f = reipos; } else { // Debug.Log("a posição entre torre e rei caracteriza um roque menor(ou era para caracterizar)"); i = reipos; f = torrepos; } for (int p = i + 1; p < f; p++) { if (tabuleiro.GetCasa(p, linha).EstaOcupada()) { //Debug.Log(p); // Debug.Log("TEM CASAS OCUPADAS NO CAMINHO!"); return(false); } } // rei nao pode estar em xeque if (rei.jDono.EmXeque(false)) { // Debug.Log("Rei está em xeque!"); return(false); } // rei não pode passar nem terminar em uma casa que está sendo atacada por peça adversaria(rei entraria em xeque) //dependendo de quem se mova primeiro (torre ou rei ) antes de chamar a função CausaAutoXeque() sempre teremos um rei em xeque // mesmo se a torre o proteger(bloquear o ataque) // então o movimento da torre será "simulado" Peca movida; movida = movtorre.origem.PopPeca(); // lembrando que se chegamos até aqui não há ninguem ocupando essa casa! (eu acho...), podemos colocar a peça sem receio movtorre.destino.ColocarPeca(movida); if (movrei.CausaAutoXeque()) { // Debug.Log("rei esta indo para casa sob ataque!(entraria em xeque)"); // voltar para a torre para a poisção original movtorre.destino.PopPeca(); movtorre.origem.ColocarPeca(movida); return(false); } // voltar para a torre para a poisção original movida = movtorre.destino.PopPeca(); movtorre.origem.ColocarPeca(movida); return(true); }
public override Movimento Roque(Tabuleiro tabuleiro, Torre torre = null) { //Rei rei = (Rei)this.jDono.conjuntoPecas[4]; //OQUE ESTA COMENTADO FOI USADO PARA TESTES Rei rei = null; foreach (Peca p in this.jDono.conjuntoPecas) { if (p is Rei) { rei = (Rei)p; //Debug.Log("amem"); break; } } if (rei.CasaAtual == null || this.CasaAtual == null) { return(null); } // criar "movimento" rei deve ser aproximar da torre andando 2 casas (tanto no roque pequeno quanto no grande) // a torre anda 3 casas em casos de roque grande (torre do lado esquerdo) // a torre anda 2 casas em casos de roque pequeno(torre do lado direito) // dependendo da torre escolhida o movimento pode mudar // note que esse metodõ poderia ser chamado pelo rei ou torre(O JOGADOR PODE ESCOLHER FAZER ROQUE CLICANDO NO REI ou TORRE) // como a torre que varia eu implementei que a chamada do metodo do rei direciona para o metodo da torre especifica Casa destinorei, destinotorre; //MUDANÇA POR CAUSA DO TABULEIRO //int linha = rei.CasaAtual.PosX; //int colunaTgrande = this.PosY+3, colunaTpequeno = this.PosY-2; //int colunaRgrande = rei.PosY-2, colunaRpequeno = rei.PosY+2; int linha = rei.CasaAtual.PosY; // linha em que o rei está alinhado com a torre(que é na vdd a coluna da matriz) int colunaTgrande = this.PosX + 3, colunaTpequeno = this.PosX - 2; // coluna que o rei e torre devem se mover (que na vdd é a linha da matriz) int colunaRgrande = rei.PosX - 2, colunaRpequeno = rei.PosX + 2; //Debug.Log("select your roque"); /* * Debug.Log("linha rei:"); * Debug.Log(linha); * Debug.Log("Coluna rei:"); * Debug.Log(rei.CasaAtual.PosX); * Debug.Log("Coluna torre:"); * Debug.Log(this.CasaAtual.PosX); */ if (this.CasaAtual.PosX < rei.CasaAtual.PosX) // roque grande { // Debug.Log("Roque grande"); /* * Debug.Log("coluna Roque grande torre: "); * Debug.Log(colunaTgrande); * Debug.Log("coluna Roque grande rei: "); * Debug.Log(colunaRgrande); */ destinorei = tabuleiro.GetCasa(colunaRgrande, linha); destinotorre = tabuleiro.GetCasa(colunaTgrande, linha); } else // roque pequeno { // Debug.Log("Roque pequeno"); /* * Debug.Log("coluna Roque pequeno torre: "); * Debug.Log(colunaTpequeno); * Debug.Log("coluna Roque pequeno rei: "); * Debug.Log(colunaRpequeno); */ destinorei = tabuleiro.GetCasa(colunaRpequeno, linha); destinotorre = tabuleiro.GetCasa(colunaTpequeno, linha); } Movimento m = new Movimento(origem: rei.CasaAtual, destino: destinorei); Movimento mt = new Movimento(origem: this.CasaAtual, destino: destinotorre); //Debug.Log(this.PodeRoque(this,rei,tabuleiro,m)); if (this.PodeRoque(this, rei, tabuleiro, m, mt)) { //Debug.Log("realizando roque..."); m.movimentoExtra = mt; //this.RealizaMovimento(m); //this.RealizaMovimento(mt); return(m); } return(null); }