package {
	public class Jogador {
		// Propriedades
		public var id:int;
		public var nome:String;
		public var humano:Boolean = false;
		public var agressividade:Number;
		public var objetividade:Number;
		public var sorte:Number;
		public var ativo:Boolean = false;
		public var jogou:Boolean = false;
		public var rodada:int;
		public var ganhou_carta:Boolean;
		public var perdas:Array = [0, 0, 0, 0, 0, 0];
		public var ultima_carta:Carta;
		public var porcem:int;
		public var recorde:int;
		
		// Constrói um novo objeto
		public function Jogador(id:int):void {
			this.id = id;
			this.nome = Reguladora.get_nick();
			this.agressividade = Math.random()/2+1/4;
			this.objetividade = Math.random()+1/2;
			this.sorte = Math.random()-1/2;			
		}
		
		// Retorna a raiva que esse jogador tem de outro (valor entre 0 e 1)
		public function get_raiva(jog:Jogador):Number {
			var num:int = perdas[jog.id-1]+1;
			var den:int = perdas[0]+perdas[1]+perdas[2]+perdas[3]+perdas[4]+perdas[5]+1;
			return num/den;
		}
		
		// Retorna o resultado do jogador num dado
		public function get_dado():int {
			var a:Number, b:Number;
			a = (2-sorte)/12;
			b = (2+sorte)/12;
			return Reguladora.escolher([a, a, a, b, b, b], [1, 2, 3, 4, 5, 6]);
		}
		
		// Retorna true se o jogador ganhou
		// É chamada antes dos ataques, após cada um (neste caso será enviado o movimento) e no fim da jogada
		public function ganhou(mov:Movimento=null):Boolean {
			var id = Relacao.get_relacao(this, Relacao.OBJETIVO).id-1;
			var num:int, i:String, terras:Object;
			
			// Usa regras separadas para cada tipo de objetivo
			if (id<7 && this.id != id && Grafica.jogadores[id-1].ativo) {
				// Destrua o exército x (enquanto x ainda existe)
				return Boolean(mov && mov.eliminado && mov.eliminado.id == id);
			} else if (id == 9) {
				return Boolean(Grafica.continentes[2].tem_tudo(this) && Grafica.continentes[3].tem_tudo(this));
			} else if (id == 12) {
				return Boolean(Grafica.continentes[0].tem_tudo(this) && Grafica.continentes[3].tem_tudo(this));
			} else if (id == 13) {
				return Boolean(Grafica.continentes[0].tem_tudo(this) && Grafica.continentes[1].tem_tudo(this));
			} else if (id == 14) {
				return Boolean(Grafica.continentes[1].tem_tudo(this) && Grafica.continentes[5].tem_tudo(this));
			} else if (id == 10) {
				return Boolean(Grafica.continentes[2].tem_tudo(this) && Grafica.continentes[4].tem_tudo(this)
					&& (Grafica.continentes[0].tem_tudo(this) || Grafica.continentes[1].tem_tudo(this)
						|| Grafica.continentes[3].tem_tudo(this) || Grafica.continentes[5].tem_tudo(this)));
			} else if (id == 11) {
				return Boolean(Grafica.continentes[4].tem_tudo(this) && Grafica.continentes[5].tem_tudo(this)
					&& (Grafica.continentes[0].tem_tudo(this) || Grafica.continentes[1].tem_tudo(this)
						|| Grafica.continentes[2].tem_tudo(this) || Grafica.continentes[3].tem_tudo(this)));
			} else if (id == 7) {
				// Conquistar 18 territórios com pelo menos 2 exércitos em cada
				num = 0;
				terras = Relacao.get_relacoes(this, Relacao.DONO);
				for (i in terras) {
					if (terras[i].soldados>1) {
						num++;
					}
				}
				return Boolean(num>=18);
			} else {
				// 24 territórios
				return Boolean(Relacao.get_relacoes(this, Relacao.DONO).length>=24);
			}
		}
	}
}