predojo.vo.JogadorVO.java Source code

Java tutorial

Introduction

Here is the source code for predojo.vo.JogadorVO.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package predojo.vo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Duration;

/**
 *
 * @author Tony
 */
public class JogadorVO implements Comparable {
    private final String nome;
    private Integer quantidadeMortes = 0;
    private final List<AssassinatoVO> assassinatos;
    private Integer maiorQuantidadeAssassinatosAteMorte = 0;
    private Integer quantidadeAssassinatosAteMorte = 0;
    private Boolean possuiTrofeuCincoAssassinatosEmUmMinuto = false;

    public JogadorVO(String nome) {
        this.nome = nome;
        this.assassinatos = new ArrayList<>();
    }

    public String getNome() {
        return nome;
    }

    public Integer getQuantidadeAssassinatos() {
        return this.assassinatos.size();
    }

    public Integer getQuantidadeMortes() {
        return quantidadeMortes;
    }

    public Integer getMaiorQuantidadeAssassinatosAteMorte() {
        return maiorQuantidadeAssassinatosAteMorte;
    }

    private void morrer() {
        this.quantidadeMortes++;

        // Identificar a maior sequencia de assassinatos efetuadas por um jogador sem morrer dentro da partida
        if (this.quantidadeAssassinatosAteMorte > this.maiorQuantidadeAssassinatosAteMorte) {
            this.maiorQuantidadeAssassinatosAteMorte = this.quantidadeAssassinatosAteMorte;
        }

        this.quantidadeAssassinatosAteMorte = 0;
    }

    public void assassinar(JogadorVO jogadorMorto, ArmaVO armaUtilizada, Date dataHoraAssassinato) {

        if (jogadorMorto == null)
            return;

        if (armaUtilizada == null)
            return;

        if (dataHoraAssassinato == null)
            return;

        jogadorMorto.morrer();

        if (this.nome.equalsIgnoreCase("<WORLD>"))
            return;

        AssassinatoVO assassinato = new AssassinatoVO(jogadorMorto, armaUtilizada, dataHoraAssassinato);
        this.assassinatos.add(assassinato);

        this.quantidadeAssassinatosAteMorte++;

        // Contabilizar numero assassinatos ultimo minuto
        if (!possuiTrofeuCincoAssassinatosEmUmMinuto && this.assassinatos.size() >= 5) {

            // Repupera data e hora do quinto ultimo assassinato
            DateTime dataHoraQuintoUltimoAssassinato = new DateTime(
                    this.assassinatos.get(this.assassinatos.size() - 5).getDataHoraAssassinato().getTime());

            // Repupera data e hora do ultimo assassinato
            DateTime dataHoraUltimoAssassinato = new DateTime(
                    this.assassinatos.get(this.assassinatos.size() - 1).getDataHoraAssassinato().getTime());

            // Calcula o intervalo de tempo entre a ultima morte e a quinta ultima morte utilizando JodaTime
            Duration duracao = new Duration(dataHoraQuintoUltimoAssassinato, dataHoraUltimoAssassinato);
            Long diferencaEmSegundos = duracao.getStandardSeconds();

            if (diferencaEmSegundos <= 60)
                possuiTrofeuCincoAssassinatosEmUmMinuto = true;

        }
    }

    public ArmaVO getArmaPreferida() {
        ArmaVO armaPreferida = null;
        Integer numeroVezesUtilizadaArmaPreferida = 0;

        for (int i = 0; i < assassinatos.size(); i++) {

            ArmaVO armaUtilizadaVO = assassinatos.get(i).getArmaUtilizada();
            Integer numeroVezesUtilizada = 1;

            for (int i2 = (i + 1); i2 < assassinatos.size(); i2++) {
                if (i == i2)
                    continue;

                ArmaVO armaUtilizadaLista = assassinatos.get(i2).getArmaUtilizada();
                if (armaUtilizadaLista.equals(armaUtilizadaVO)) {
                    numeroVezesUtilizada++;
                }
            }

            if (numeroVezesUtilizada > numeroVezesUtilizadaArmaPreferida) {
                armaPreferida = armaUtilizadaVO;
                numeroVezesUtilizadaArmaPreferida = numeroVezesUtilizada;
            }

        }
        return armaPreferida;
    }

    /**
     * Retorna se jogador ganhou um trofeu por cometer 5 assassinatos dentro
     * de um minuto.
     * @return 
     */
    public Boolean getPossuiTrofeuCincoAssassinatosEmUmMinuto() {
        return possuiTrofeuCincoAssassinatosEmUmMinuto;
    }

    @Override
    public int compareTo(Object o) {
        if (o == null)
            return 0;

        JogadorVO outroVO = (JogadorVO) o;

        Integer resultado = this.getQuantidadeAssassinatos().compareTo(outroVO.getQuantidadeAssassinatos());

        if (resultado > 0) {
            return -1;
        } else if (resultado < 0) {
            return 1;
        }

        return 1;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null)
            return false;

        JogadorVO outroVO = (JogadorVO) o;
        return this.nome.equalsIgnoreCase(outroVO.getNome());
    }
}