All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.abdonia.domino.exemplos.JogadorMamao Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2017 Bruno Abdon
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 */
package com.github.abdonia.domino.exemplos;

import java.util.List;

import com.github.abdonia.domino.Jogada;
import com.github.abdonia.domino.Jogador;
import com.github.abdonia.domino.Lado;
import com.github.abdonia.domino.Mesa;
import com.github.abdonia.domino.Numero;
import com.github.abdonia.domino.Pedra;
import com.github.abdonia.domino.Vontade;

/**
 * {@link Jogador} mais simplório possível. Procura a primeira 
 * {@link Pedra} na mão que dá pra jogar na mesa e joga. 
 * 
 * @author Bruno Abdon
 *
 */
public class JogadorMamao implements Jogador {

    /**
     * A  {@link Mesa} em que esse {@link Jogador} 
     * {@link Jogador#sentaNaMesa(com.github.abdonia.domino.Mesa, int) sentou}
     * pra jogar.
     */
    protected Mesa mesa;
    
    /**
     * As {@link Pedra pedras} na mão desse {@link Jogador}.
     */
    protected List mao;

    private boolean perguntouSeEuQueriaJogar;

    @Override
    public void sentaNaMesa(final Mesa mesa, final int cadeiraQueSentou) {
        this.mesa = mesa;
    }

    @Override
    public void recebeMao(
            final Pedra pedra1,
            final Pedra pedra2,
            final Pedra pedra3,
            final Pedra pedra4,
            final Pedra pedra5,
            final Pedra pedra6) {
        //guardar como uma List
        this.mao = 
            JogadorUtils.fazMao(pedra1, pedra2, pedra3, pedra4, pedra5, pedra6);
        this.perguntouSeEuQueriaJogar = false;
    }

    @Override
    public Jogada joga() {
        final Jogada jogada;

        Pedra pedraPraJogar = null;
        Lado ladoDeJogar = null;

        if(mesa.taVazia()){
            //opa! minha vez e a mesa tah vazia? é pra comecar agora! sou o 
            //primeiro;
            if(!perguntouSeEuQueriaJogar){
                /* 
                se nao me perguntaram se eu queria ser o da dupla a comecar a 
                jogar,  entao essa é a primeira partida, e o sistema já se 
                ligou que o jogador que tem a maior carroça sou eu. Tenho que 
                jogar ela, se não é roubo.
                */
                pedraPraJogar = JogadorUtils.aMaiorCarroca(this.mao);
            } else {
                /* 
                ah, eles perguntaram se eu queria ser o da dupla a comecar a 
                jogar, e acabou que vou ser eu mesmo a comecar. nao precisa ser 
                carroça. vou jogar a primeira que tiver.
                */
                pedraPraJogar = mao.get(0); 
            }
            //o lado, tanto faz. tá vazia a mesa mesmo.
            ladoDeJogar = Lado.ESQUERDO;
        } else {
            //a mesa nao tá vazia. o jogo tá rolando. tenho que jogar uma peça
            //que se encaixe ou no lado esquerdo ou no direito dos dominós.

            //deixa eu ver quais sao os numeros
            final Numero numeroEsquerda = mesa.getNumeroEsquerda();
            final Numero numeroDireita = mesa.getNumeroDireita();
            //hum, ótimo. agora deixa achar alguma pedra na minha mão
            //que tenha algum desses números.
            for (final Pedra pedraDaMao : mao) {
                if(pedraDaMao.temNumero(numeroEsquerda)){
                    //opa, achei uma. vai ser ela mesmo.
                    pedraPraJogar = pedraDaMao;
                    //na esquerda, que foi o lado que eu vi que tenho o número.
                    ladoDeJogar = Lado.ESQUERDO; 
                    //precisa nem procurar mais.
                    break;
                } else if (pedraDaMao.temNumero(numeroDireita)){
                    //opa, achei uma. vai ser ela mesmo.
                    pedraPraJogar = pedraDaMao;
                    //jogar na direita, que foi o que eu vi que tenho o número.
                    ladoDeJogar = Lado.DIREITO;
                    //precisa nem procurar mais.
                    break;
                }
            }
        }

        if(pedraPraJogar == null){ 
            //lasquei-me. não achei nenhuma. toc toc
            jogada = Jogada.TOQUE;
        } else {
            //pronto, vou tirar essa pedra da minha mão, pra não jogar duplicada 
            //depois.
            mao.remove(pedraPraJogar);
            //criando a jogada: a pedra que escolhi e a cabeça em que vou 
            //colocar ela.
            jogada = Jogada.jogada(pedraPraJogar,ladoDeJogar);
        }
        //retornando a jogada
        return jogada; 
    }

    /**
     * Não sei se comece... não sei se não comece... tanto faz.
     * 
     * @return {@link Vontade#TANTO_FAZ}.
     */
    @Override
    public Vontade vontadeDeComecar() {
        //isso é pra eu me ligar que a primeira rodada já foi.
        this.perguntouSeEuQueriaJogar = true; 
        //tanto faz
        return Vontade.TANTO_FAZ;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy