Pessoal, modifiquei um pouco o código e implementei o atributo "Força" que é definido pelo IMC x um número aleatório entre 1 e 4. Corrigi também a possibilidade de marcar e lutar oponentes da categoria "Inválido". ---------------------------------------------------------------------------- Na classe Lutador.php declare: private $forca; //Nos métodos Getters e Setters //Define a força do lutador de acordo com o calculo do IMC x um número randomico entre 1 e 4 public function getForca() { return $this->forca; } public function setForca() { $imc = $this->peso/(pow($this->altura, 2)); $this->forca = rand(1,4) * $imc; } ---------------------------------------------------------------------------- Na classe Luta.php public function marcarLuta($l1, $l2) { if ($l1->getCategoria() == $l2->getCategoria() && $l1 != $l2) { if ($l1->getCategoria() != "Inválido") { $this->desafiado = $l1; $this->desafiante = $l2; $this->aprovada = true; echo "Luta marcada. ".$this->desafiante->getNome()." VS ".$this->desafiado->getNome(); } else { echo "A luta não pode ser marcada. Categoria Inválida!"; } } else { $this->aprovada = false; $this->desafiado = null; $this->desafiante= null; echo "A luta não pode ser marcada. Lutadores iguais ou de categorias diferentes!"; } } public function lutar() { if ($this->getAprovada()) { $this->desafiado->apresentar(); $this->desafiante->apresentar(); //Define o nível de força randomicamente de cada lutador $this->desafiado->setForca(); $this->desafiante->setForca(); //Mostra o nível de força de cada lutador echo ""; echo "Nível de força de ".$this->desafiado->getNome(). ": ".number_format($this->desafiado->getForca(),3,'.','').""; echo "Nível de força de ".$this->desafiante->getNome(). ": ".number_format($this->desafiante->getForca(),3,'.','').""; echo "------------------------------------"; //Declara o vencedor de acordo com a força do lutador if ($this->desafiado->getForca() > $this->desafiante->getForca()) { echo "Resultado: O lutador ".$this->desafiado->getNome()." venceu!"; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta(); } elseif ($this->desafiado->getForca() < $this->desafiante->getForca()) { echo "Resultado: O lutador ".$this->desafiante->getNome()." venceu!"; $this->desafiado->perderLuta(); $this->desafiante->ganharLuta(); } else { echo "Resultado: A Luta foi empatada!"; $this->desafiado->empatarLuta(); $this->desafiante->empatarLuta(); } } else { echo "A luta não foi aprovada."; } }
Seria bom vc evitar esse IFs um dentro dos outros ( tem um frase que fala: "Se vc tem mais de 2 niveis de IF, algo na sua logica não esta certa" ), existem outras formas, no caso eu notei que vc colocou um IF somente para testar se os sexos são iguais e logo abaixo vc testou se são da mesma categoria e se são os lutadores diferentes, no caso esses poderiam ser agrupados; ou então vc pode fazer uso do return; ( ele ira finalizar a leitura da função nesse ponto, ignorando o que vem depois. é uma alternativa ao uso do else e elseif ) dentro de cada IF, ou ainda encadear usando o elseif ( que caso vc não esteja familiarizado com a técnica do return )
public function setUpFight($fighter1, $fighter2) { // Setando os valores padrões dos atributos // Esses valores podem ser colocados dentro // do metodo construtor // Ou setando como padrão na criação da classe $this->approved = false; $this->challenged = null; $this->challenger = null; if($fighter1->getSex() == $fighter2->getSex() && ($fighter1->getCategory() == $fighter2->getCategory()) && ($fighter1 != $fighter2)) { $this->approved = true; $this->challenged = $fighter1; $this->challenger = $fighter2; }else{ echo 'Se falhou em algum teste escreva alguma mensagem!'; } } // Outro cenario usando o return dentro dos IFs // É bom resultar que nesse tipo de teste geralmente vc irá testar por negação. public function setUpFight($fighter1, $fighter2) { // Setando os valores padrões dos atributos // Esses valores podem ser colocados dentro // do metodo construtor // Ou setando como padrão na criação da classe $this->approved = false; $this->challenged = null; $this->challenger = null; if($fighter1->getSex() != $fighter2->getSex()){ echo 'Não são do mesmo sexo!'; return; } if($fighter1->getCategory() != $fighter2->getCategory()){ echo 'São de Categorias diferentes!'; return; } if($fighter1 == $fighter2){ echo 'Deve haver mais de um lutador!'; return; } $this->approved = true; $this->challenged = $fighter1; $this->challenger = $fighter2; echo 'Uma mensagem de sucesso, se necessário'; } //Usando o encadeamento public function setUpFight($fighter1, $fighter2) { // Setando os valores padrões dos atributos // Esses valores podem ser colocados dentro // do metodo construtor // Ou setando como padrão na criação da classe $this->approved = false; $this->challenged = null; $this->challenger = null; if($fighter1->getSex() != $fighter2->getSex()){ echo 'Não são do mesmo sexo!'; }elseif($fighter1->getCategory() != $fighter2->getCategory()){ echo 'São de Categorias diferentes!'; }elseif($fighter1 == $fighter2){ echo 'Deve haver mais de um lutador!'; }else{ $this->approved = true; $this->challenged = $fighter1; $this->challenger = $fighter2; echo 'Uma mensagem de sucesso, se necessário'; } }
Essa aula tá muito divertida. Me empolguei tanto que fui codificando enquanto ouvia e na metade da aula terminei o código e acrescentei uma função random_int() pra escolher quem lutaria com quem. Muito legal Guanabara!!! Esse curso é excelente! conheço lógica de programação e Java há anos, tendo estudado tanto sozinho quanto em universidades diferentes, mas parei pra assistir todas as aulas teóricas de POO, pois nunca assisti explicações tão boas!! Eu desejo que o curso cresça cada vez mais!! O site Curso em Vídeo é a melhor iniciativa gratuita de incentivo ao aprendizado da programação que já vi! Parabéns mesmo!
uma dica pra quem ta fazendo o curso a mais de 7 anos depois kk. Pra puxar os métodos da classe lutador, dentro da classe luta como no exemplo $lutador1.getCategoria(), não se usa mais o ponto, usar o simbolo de atribuição mesmo, ficando dessa forma $lutador1->getCategoria
o curso em video tem me ajudando muito nos conhecimento em programação graças ao canal consigui eliminar a cadeira de POO com 17 valor toda forca GUANA....
Sugiro fazer um curso com PHP padrão MVC pois existem muitos e muitas diferenças. Com a explicação do Guanabara ficará bem esclarecedor. Existem outras técnicas importantes para o apoio aos desenvolvedores como GitHub e uso de geradores de CRUD que também podem ser explorados. Um abraço e parabéns.
Idéia 100%, eu mesmo estou desenvolvendo um projeto em MVC, em muitas dúvidas o curso tem me ajudado, mas tem coisas que a dúvida entre alterar ou não, caminho certo a seguir?, permanece!
Seria interessante criar ações do tipo: chutar, socar, pular, defenderSoco, defenterChute e assim por diante e usar um random para fazer com que estas ações interajam e modifiquem os pontos de vida de cada lutador. Intermediando tudo com frases de efeito, claro.
4 ปีที่แล้ว
Declarei uma variável de placar pra cada lutador e fiz uma comparação entre a altura e peso dos oponentes. Cada comparação era um "golpe". Ao final, fiz uma verificação de quem tinha dado mais "golpes" pra ver quem ganhou ou se teve empate.
Desenvolvi um projeto bem maior onde os lutadores disputam 5 rounds e cada round é avaliado segundo um índice de performance que criei que usa atributos de cada lutador mais um fator aleatório para então se determinar o vencedor do round. Os rounds podem ser vencidos por qualquer um dos lutadores ou então empatar. Poderá também haver vitória de um deles por nocaute, onde a luta se encerra neste ato e aponta seu vencedor. Criei uma interface para escolhermos os lutadores também. Criei mais seis lutadoras (sexo feminino). Também criei layouts para as páginas. Não vou colocar aqui pois ficou muito extenso, mas quem quiser trocar ideias é só chamar aqui!
Olá, aula fantástica, estou aprendendo muito! Só vou deixar minha dica. Acho que poderia ter sido explicado durante a aula o fato de não armazenar as variáveis "derrotas", "vitórias" e "empates", esses valores são sempre reiniciados quando o jogador é instanciado no array. De qualquer forma continue o trabalho perfeito! Abraços.
Parabéns e obrigado Guanabara. Um abraço desde Lisboa, Portugal. Tomara que nos cursos que eu paguei aprendesse metade do que aprendo contigo. Mesmo muito obrigado... Segue a minha classe Luta. Adicionei o factorAleatorio que gera um valor entre 0 e 40; e adicionei o atributo favoritismoDesafiado que começa com 50(%) e aumenta ou diminui consoante seja mais/menos alto que o desafiante e o nr de vitórias. Bons estudos gafanhotos! -----------------------------------------------------------------------
Primeiramente, parabéns pela ideia implementada no seu código! Esse factorFavoritismo deixou o resultado da luta mais interessante. Segundo, a frase "O júri decidiu por unanimidade que foi um empate técnico!" não faz sentido pois, se é unânime, todos votaram em um mesmo lutador, impossibilitando o empate.
Guanabara, ótimo curso muito bom mesmo, eu ja fiz curso de PHP em outros locais, e inclusive ja montei sistemas mais complexos com POO, porém sempre tem coisas que ficam para trás no aprendizado, e mais que ver o video sempre duas vezes ou mais, é legal também procurar o mesmo conteúdo em outros lugares, e tem detalhes que você consegue passar muitooo bem. Também tenho uma pergunta a fazer, sobre o curso de ANDROID, será possivel algum dia este curso ser realizado aqui neste canal? se sim, como fazemos para poder programar sem ter uma super maquina que não trave programas como android studio, pois emular um cell é realmente puxado, mas existe alguma forma de ser no minimo razoavel este pesar da maquina? vlw e continue sempre com esse ótimo trabalho
Guanabara, agora sim estou aprendendo POO, modifiquei um pouquinho a classe lutar, usei if e fiz mais opções, vitória por decisão dos juízes e vitória por nocaute... vou trabalhar mais um pouco pra conseguir colocar peso nas decisões das lutas. segue a classe public function lutar() { if($this->aprovada): $this->desafiado->apresentar(); $this->desafiante->apresentar(); $vencedor = rand(0, 12); if($vencedordesafiado->empatarLuta(); $this->desafiante->empatarLuta(); elseif($vencedordesafiado->getNome().' por decisão unanime dos juizes'; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta(); elseif ($vencedordesafiado->getNome().' por nocaute.'; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta(); elseif ($vencedordesafiante->getNome().' por decisão unanime dos juizes'; $this->desafiado->perderLuta(); $this->desafiante->ganharLuta(); else: echo 'Vitória deeee '. $this->desafiante->getNome().' por nocaute.'; $this->desafiado->perderLuta(); $this->desafiante->ganharLuta(); endif; else: echo "Aviso!Luta não pode ser realizada, verifique os lutadores e suas categorias!"; endif; }
Pessoal, quando mando um objeto para outro $luta->($lutador[0],$lutador[1]) , qual a forma correta de atualizar os objetos depois de ter atualizado eles com as vitorias,derrotas e empates dentro do objeto luta? Dou um return do objeto inteiro dentro do método $luta[0]->lutar();
E se eu quisesse fazer uma tabela? Onde eles poderiam ir avançado e ir enfrentando outros oponentes conforme vão ganhando? Tipo aquelas tabelas do challonge. Como eu faria isso?
Fiz atualizações na clase Luta, considerei experiencia baseando nos atributos idade e numero de luta, criei a possibilidade de indicar tambem o numero de rodadas de cada luta apartir do construtor, considerei a percentagem de vitorias, e o numero de vitorias, tudo isso para montar um sistema de pontos, onde a cada item que um lutador tiver vantagens sobre o outro ganha pontos, e esses pontos são usados junto com a geração do numero randomico de modo a dar mais supresa no resultado final, dar tabem e a posibilidade de um lutador com menos hipotese vencer e surprender _________________________________ classe Luta.php
Ola gustavo, estou tendo problemas na hora de pegar a categoria e o nome do lutador, para corrigir este problema tive que deixa os métodos getters nome e categoria públicos.
Eu fiz uma alteração no código do método lutar() e implementei algo como se fosse uma luta por turnos, utilizando como base um rand(0,20) definindo ataque de um e defesa do outro por turno, quem quiser dar uma olhada -> public function marcarLuta($desafiado, $desafiante, $rounds){ if($desafiado->getCategoria() != $desafiante->getCategoria()){ $this->desafiado = null; $this->desafiante = null; $this->aprovada = false; echo "Luta não aprovada. Lutadores de categorias diferentes.".""; }else if($desafiado->getNome() != $desafiante->getNome()){ $this->aprovada = true; $this->desafiado = $desafiado; $this->desafiante = $desafiante; $this->setRounds($rounds); echo "Luta aprovada. Agora é só lutar.".""; } // $luta = array("Desafiado" => $this->desafiado, // "Desafiante"=> $this->desafiante, // "rounds"=> $this->rounds, // "Aprovada"=> $this->aprovada) // return $luta; } public function lutar(){ if ($this->aprovada == false) { echo "Esta luta não pode acontecer. Ela não foi aprovada.".""; }else{ $this->desafiado->apresentar(); $this->desafiante->apresentar(); $vroundl1 = 0; $vroundl2 = 0; for($i=1; $irounds;){ echo ""."Round ".$i.""; //l1 = desafiado //l2 = desafiante //fazer variável para dividir numero de rounds em 2, caso alguém tenha vround > metade do round, a luta é finalizada if(($this->rounds % 2) == 0){ $vitoriaporround = (($this->rounds/2)+1); }else{ $vitoriaporround = round($this->rounds/2); } if($vroundl1 >= $vitoriaporround){ echo "O lutador ".$this->desafiado->getNome()." venceu a luta".""; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta(); echo $this->desafiado->getnome()." agora tem ".$this->desafiado->getVitorias()." vitorias".""; echo $this->desafiante->getNome()." agora tem ".$this->desafiante->getDerrotas()." derrotas".""; break; }elseif($vroundl2 >= $vitoriaporround){ echo "O lutador ".$this->desafiante->getNome()." venceu a luta".""; $this->desafiante->ganharLuta(); $this->desafiado->perderLuta(); echo $this->desafiante->getNome()." agora tem ".$this->desafiante->getVitorias()." vitorias".""; echo $this->desafiado->getnome()." agora tem ".$this->desafiado->getDerrotas()." derrotas".""; break; }elseif($vroundl1 == $vroundl2){ // echo "Os lutadores empataram a luta.".""; } $ataquel1; $ataquel2; $defesal1; $defesal2; $ataquel1 = rand(0,20); $defesal2 = rand(0,20); if($ataquel1 > $defesal2){ echo $this->desafiado->getNome()." vence o round numero ".$i.""; $i++; $vroundl1 += 1; }else if($ataquel1 < $defesal2){ echo "Ataque de ".$this->desafiado->getNome()." foi fraco".""; echo "O próximo ataque é do lutador ".$this->desafiante->getNome().""; $ataquel2 = rand(0,20); $defesal1 = rand(0,20); if($ataquel2 > $defesal2){ echo $this->desafiante->getNome()." vence o round numero ".$i.""; $i++; $vroundl2 += 2; }else{ echo "Nenhum dos lutadores venceu o round numero ".$i.""; $i++; } } if($i==$this->rounds){ if($vroundl1 == $vroundl2){ $this->desafiado->empatarLuta(); $this->desafiante->empatarLuta(); echo "Luta encerrada! Os lutadores terminaram com um empate.".""; $i++; break; } } } } }
else if($desafiado->getNome() != $desafiante->getNome()) não acho esse um bom parâmetro, eles podem ter o mesmo nome, porém serem lutadores diferentes...
Eu utilizei o construtor nessa exemplo da classe Luta, já para instanciar com os dois lutadores e o número de rounds: public function __construct($desafiado, $desafiante, $rounds) { $this->setDesafiado($desafiado); $this->setDesafiante($desafiante); $this->setRounds($rounds); $this->setAprovada(); } E então minha função setAprovada() ficou assim: public function setAprovada() { if (($this->desafiado->getCategoria() == $this->desafiante->getCategoria()) && ($this->desafiado !== $this->desafiante)) { $this->aprovada = true; } else { $this->aprovada = false; } } As funções marcarLuta() e lutar() ficaram quase idênticas...
Só uma coisa, precisa mesmo fazer require_once do lutador.php Eu fiz a minha classe lutar ainda na aula 08a, e funcionou de boa sem fazer o require_once do lutador.php dentro do luta.php. Fiz o include na index! Testei o antes e depois do lutador que mandei pra lutar! pra ver se alterou certinho! Testei tudinho! Funcionou perfeitamente! e lendo o código não ví necessidade nenhuma de fazer o require_once do lutador.php dentro do luta.php Se alguém souber explicar o pq o Guanabara fez o require_once no luta.php ao invez de fazer no inex. seria muito bom tirar essa duvida! e pq parou de fazer o implements da Interface?
ahh eu revi o vídeo, e ví que ele fez require_once da classe lutador.php dentro da classe luta.php! pq ele não fez na index eu aqui fiz o require dela na index. Analisando direitinho vejo que fazendo o require dentro da classe deixa o negocio mais pratico! imaginando se eu passe essas classes pra alguem. quem for usar vai precisar fazer require de todas as classes que se relacionam em seu projeto! Fazendo da forma que ele fez ai, basta fazer require de apenas 1 classe e pronto! dentro dela já vai ter o require de outra, que provavelmente pode tbm ter de outra e por ai vai! so resta +1 duvida pq parou de usar implements da interface! facilita tanto na hora de criar os métodos! kkk basta usar o NetBeans que ele já pega o métodos da interface e joga na classe
So ouve um erro na hora de atualizar as derrotas, pq se formos ver pela logica, quando o lutador perde uma luta esta luta perdida seria adicionada mais uma derrota, mas ai no caso a derrota esta subindo e descendo conforme ele ganha
Cara! O atributo "rounds" ficou obsoleto nesse projeto, pensando nisso tentei fazer algo com ele. Tipo parar a luta depois do terceiro round, mas infelizmente não tive êxito. Mandem alguma dica aí galera...
estou enfrentando um erro que diz Erro de análise : erro de sintaxe, 'classe' inesperada (T_CLASS) em C:\xampp\htdocs\curso\Luta.php na linha 3, porem esta tudo certo e ja corrigi o codigo, mesmo assim o erro permanece, alguma ideia do que pode ser? uso vscode.
Alguém consegue me explicar o porque de mesmo suprimindo os atributos da classe Luta, o programa ainda continua funcionando normalmente? Ex: class Luta { //Atributos //private $desafiado; //private $desafiante; //private $rounds; //private $aprovado; Mesmo os comentando, a aplicação funciona normalmente.
Isso se chama Creation of dynamic property .Em classes PHP, é possível definir e recuperar dinamicamente propriedades de classe que não são declaradas. Mas isso ficou obsoleto no php 8.2 pois elas abrem a possibilidade de possíveis erros e comportamentos inesperados.
Grande mestre gafanhoto Guanabara! O curso é top, e estou agora REVISANDO JAVA no seu CURSO DE JAVA e tem um problema com relação a geração do arquivo .JAR que ás vezes eu quero somente abrir a tela pra eu ver como funciona e tb mostrar a tela pra alguém e não consigo pq ao criar um projeto, eu crio vários jframes no mesmo projeto e o netbeans junta tudo em apenas 1 arquivo.jar e com isso não consigo abrir as outras telas do projeto ou abre apenas 1 tela. Tem um jeito de resolver esse problema do NETBEANS? ou o jeito é criar 1 projeto e somente 1 arquivo pra cada frame? Desde já agradeço pela sapiência e pelo método de ensino que ajuda milhares de gafanhotos por esse brasil.
Alguém saberia me explicar qual é o motivo desse erro: Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0 ( ! ) Fatal error: Unknown: Failed opening required 'C:/xampp/htdocs/POO-CURSO-EM-VIDEO/aula_08_Agregação_entre_Objetos/index.php' (include_path='C:\xampp\php\PEAR') in Unknown on line 0
E o ano é 2020. Alguém consegue por gentileza me ajudar. Estou com os seguintes erros: Warning: include_once(./Lutador.php): failed to open stream: No such file or directory in D:\_Projetos_GitHub\POO\PHP_POO\POO_PHP\classes\Luta.php on line 4 Warning: include_once(): Failed opening './Lutador.php' for inclusion (include_path='C:\xampp\php\PEAR') in D:\_Projetos_GitHub\POO\PHP_POO\POO_PHP\classes\Luta.php on line 4 Já pesquisei na internet e nada. Alguém teria uma solucão?
boa noite !!! professor podes me ajudar deu o seguinte erro: Fatal error: Uncaught Error: Call to undefined function marcarLuta() in C:\xampp\htdocs\UltraEmojiCombat\index.php:26 Stack trace: #0 {main} thrown in C:\xampp\htdocs\UltraEmojiCombat\index.php on line 26
Amei cada cena do Michael Keaton. Mas acho que o filme não finalizou o universo da DC por trocar o Ben Affleck por George Clooney no final. No máximo pra mostrar que isso seria tão ruim a ponto de ninguém querer assistir qualquer coisa disso kkkkk
fiz um while com uma sequencia de ações randomicas entre dois lutadores e coloquei um random com frases de efeito, ficou muito engraçado EHuehUEHUEHUEHU Lucha Lucha Mascarada! Nerdaart Usou Meteoro de Pegasus em Ufocobol Nerdaart Chutou!! Ufocobol Nerdaart Socou!! Ufocobol Ufocobol Ele é do RJ e puxou a pistola para o Nerdaart Nerdaart Says: Assine seu contrato para o amaro bocão Ufocobol Nerdaart Says: Brigue feito homem Ufocobol Ufocobol Usou Meteoro de Pegasus em Nerdaart Nerdaart Socou!! Ufocobol Ufocobol Chamou de $%¨& Nerdaart Nerdaart Socou!! Ufocobol Nerdaart Ele é do RJ e puxou a pistola para o Ufocobol Ufocobol Deu uma cabeçada em Nerdaart Ufocobol Says: Assine seu contrato para o amaro bocão Nerdaart Ufocobol Chutou!! Nerdaart Ufocobol Chamou de são paulino o Nerdaart Ufocobol Deu uma cabeçada em Nerdaart Ufocobol Says: Brigue feito homem Nerdaart Ufocobol Socou!! Nerdaart Nerdaart Deu uma cabeçada em Ufocobol Nerdaart Socou!! Ufocobol Empate!
Rapazz, como que vou criar uma verificação para mulher não poder lutar com homem? Até criei outra classe, mas ainda tá díficil eu pensar numa lógica kkk
Ao invés de escrever tracinhos basta colocar a tag para imprimir uma linha, o código fica mais limpo e a saída fica mais bonita também.
Boa dica. Uso assim tambem Daniel!
Pessoal, modifiquei um pouco o código e implementei o atributo "Força" que é definido pelo IMC x um número aleatório entre 1 e 4. Corrigi também a possibilidade de marcar e lutar oponentes da categoria "Inválido".
----------------------------------------------------------------------------
Na classe Lutador.php declare:
private $forca;
//Nos métodos Getters e Setters
//Define a força do lutador de acordo com o calculo do IMC x um número randomico entre 1 e 4
public function getForca()
{
return $this->forca;
}
public function setForca()
{
$imc = $this->peso/(pow($this->altura, 2));
$this->forca = rand(1,4) * $imc;
}
----------------------------------------------------------------------------
Na classe Luta.php
public function marcarLuta($l1, $l2) {
if ($l1->getCategoria() == $l2->getCategoria()
&& $l1 != $l2) {
if ($l1->getCategoria() != "Inválido") {
$this->desafiado = $l1;
$this->desafiante = $l2;
$this->aprovada = true;
echo "Luta marcada. ".$this->desafiante->getNome()." VS ".$this->desafiado->getNome();
} else {
echo "A luta não pode ser marcada. Categoria Inválida!";
}
} else {
$this->aprovada = false;
$this->desafiado = null;
$this->desafiante= null;
echo "A luta não pode ser marcada. Lutadores iguais ou de categorias diferentes!";
}
}
public function lutar() {
if ($this->getAprovada()) {
$this->desafiado->apresentar();
$this->desafiante->apresentar();
//Define o nível de força randomicamente de cada lutador
$this->desafiado->setForca();
$this->desafiante->setForca();
//Mostra o nível de força de cada lutador
echo "";
echo "Nível de força de ".$this->desafiado->getNome(). ": ".number_format($this->desafiado->getForca(),3,'.','')."";
echo "Nível de força de ".$this->desafiante->getNome(). ": ".number_format($this->desafiante->getForca(),3,'.','')."";
echo "------------------------------------";
//Declara o vencedor de acordo com a força do lutador
if ($this->desafiado->getForca() > $this->desafiante->getForca()) {
echo "Resultado: O lutador ".$this->desafiado->getNome()." venceu!";
$this->desafiado->ganharLuta();
$this->desafiante->perderLuta();
} elseif ($this->desafiado->getForca() < $this->desafiante->getForca()) {
echo "Resultado: O lutador ".$this->desafiante->getNome()." venceu!";
$this->desafiado->perderLuta();
$this->desafiante->ganharLuta();
} else {
echo "Resultado: A Luta foi empatada!";
$this->desafiado->empatarLuta();
$this->desafiante->empatarLuta();
}
} else {
echo "A luta não foi aprovada.";
}
}
Gostei muito do seu acrescento no código!!! Parabéns :)
Fiz alguns ajustes na função marcarLuta(). Gostaria de saber o que acham ?
public function setUpFight($fighter1, $fighter2)
{
if($fighter1->getSex() == $fighter2->getSex())
{
if (($fighter1->getCategory() == $fighter2->getCategory()) && ($fighter1 != $fighter2))
{
if($fighter1->getCategory() != "Invalid")
{
$this->approved = true;
$this->challenged = $fighter1;
$this->challenger = $fighter2;
} else
{
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
}
} else
{
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
}
} else
{
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
}
}
Seria bom vc evitar esse IFs um dentro dos outros ( tem um frase que fala: "Se vc tem mais de 2 niveis de IF, algo na sua logica não esta certa" ), existem outras formas, no caso eu notei que vc colocou um IF somente para testar se os sexos são iguais e logo abaixo vc testou se são da mesma categoria e se são os lutadores diferentes, no caso esses poderiam ser agrupados; ou então vc pode fazer uso do return; ( ele ira finalizar a leitura da função nesse ponto, ignorando o que vem depois. é uma alternativa ao uso do else e elseif ) dentro de cada IF, ou ainda encadear usando o elseif ( que caso vc não esteja familiarizado com a técnica do return )
Pode me dar algum exemplo ?
public function setUpFight($fighter1, $fighter2) {
// Setando os valores padrões dos atributos
// Esses valores podem ser colocados dentro
// do metodo construtor
// Ou setando como padrão na criação da classe
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
if($fighter1->getSex() == $fighter2->getSex() &&
($fighter1->getCategory() == $fighter2->getCategory()) &&
($fighter1 != $fighter2))
{
$this->approved = true;
$this->challenged = $fighter1;
$this->challenger = $fighter2;
}else{
echo 'Se falhou em algum teste escreva alguma mensagem!';
}
}
// Outro cenario usando o return dentro dos IFs
// É bom resultar que nesse tipo de teste geralmente vc irá testar por negação.
public function setUpFight($fighter1, $fighter2) {
// Setando os valores padrões dos atributos
// Esses valores podem ser colocados dentro
// do metodo construtor
// Ou setando como padrão na criação da classe
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
if($fighter1->getSex() != $fighter2->getSex()){
echo 'Não são do mesmo sexo!';
return;
}
if($fighter1->getCategory() != $fighter2->getCategory()){
echo 'São de Categorias diferentes!';
return;
}
if($fighter1 == $fighter2){
echo 'Deve haver mais de um lutador!';
return;
}
$this->approved = true;
$this->challenged = $fighter1;
$this->challenger = $fighter2;
echo 'Uma mensagem de sucesso, se necessário';
}
//Usando o encadeamento
public function setUpFight($fighter1, $fighter2) {
// Setando os valores padrões dos atributos
// Esses valores podem ser colocados dentro
// do metodo construtor
// Ou setando como padrão na criação da classe
$this->approved = false;
$this->challenged = null;
$this->challenger = null;
if($fighter1->getSex() != $fighter2->getSex()){
echo 'Não são do mesmo sexo!';
}elseif($fighter1->getCategory() != $fighter2->getCategory()){
echo 'São de Categorias diferentes!';
}elseif($fighter1 == $fighter2){
echo 'Deve haver mais de um lutador!';
}else{
$this->approved = true;
$this->challenged = $fighter1;
$this->challenger = $fighter2;
echo 'Uma mensagem de sucesso, se necessário';
}
}
Essa aula tá muito divertida. Me empolguei tanto que fui codificando enquanto ouvia e na metade da aula terminei o código e acrescentei uma função random_int() pra escolher quem lutaria com quem. Muito legal Guanabara!!! Esse curso é excelente! conheço lógica de programação e Java há anos, tendo estudado tanto sozinho quanto em universidades diferentes, mas parei pra assistir todas as aulas teóricas de POO, pois nunca assisti explicações tão boas!! Eu desejo que o curso cresça cada vez mais!! O site Curso em Vídeo é a melhor iniciativa gratuita de incentivo ao aprendizado da programação que já vi! Parabéns mesmo!
uma dica pra quem ta fazendo o curso a mais de 7 anos depois kk. Pra puxar os métodos da classe lutador, dentro da classe luta como no exemplo $lutador1.getCategoria(), não se usa mais o ponto, usar o simbolo de atribuição mesmo, ficando dessa forma $lutador1->getCategoria
Eu já não sabia mais como procurar isso na internet. Salvou, irmão. Abração
A cada aula uma nova visão de programação, parabéns, que o canal sempre melhore...
o curso em video tem me ajudando muito nos conhecimento em programação graças ao canal consigui eliminar a cadeira de POO com 17 valor toda forca GUANA....
Sugiro fazer um curso com PHP padrão MVC pois existem muitos e muitas diferenças. Com a explicação do Guanabara ficará bem esclarecedor. Existem outras técnicas importantes para o apoio aos desenvolvedores como GitHub e uso de geradores de CRUD que também podem ser explorados. Um abraço e parabéns.
Boa, um curso desse de POO + um de design patterns já coloca a gente pra estagiar no google haha
Idéia 100%, eu mesmo estou desenvolvendo um projeto em MVC, em muitas dúvidas o curso tem me ajudado, mas tem coisas que a dúvida entre alterar ou não, caminho certo a seguir?, permanece!
Demais Guanabara! Show esse curso de POO
quem esta com problema no get e no set categoria ele arruma isso no minuto 15:27
Seria interessante criar ações do tipo: chutar, socar, pular, defenderSoco, defenterChute e assim por diante e usar um random para fazer com que estas ações interajam e modifiquem os pontos de vida de cada lutador. Intermediando tudo com frases de efeito, claro.
Declarei uma variável de placar pra cada lutador e fiz uma comparação entre a altura e peso dos oponentes. Cada comparação era um "golpe". Ao final, fiz uma verificação de quem tinha dado mais "golpes" pra ver quem ganhou ou se teve empate.
Esse projeto vai ficar legal se conectado com um banco de dados, em breve vou fazer.
Ei, você fez? c: posta um video mostrando como ficou.
Essa é a minha maior dúvida: como conectar um projeto desses a um banco de dados
Eu não fiz muito diferente, mas usei interfaces para fazer os métodos e implementa-los nas classes Lutador e Luta.
Desenvolvi um projeto bem maior onde os lutadores disputam 5 rounds e cada round é avaliado segundo um índice de performance que criei que usa atributos de cada lutador mais um fator aleatório para então se determinar o vencedor do round. Os rounds podem ser vencidos por qualquer um dos lutadores ou então empatar. Poderá também haver vitória de um deles por nocaute, onde a luta se encerra neste ato e aponta seu vencedor. Criei uma interface para escolhermos os lutadores também. Criei mais seis lutadoras (sexo feminino). Também criei layouts para as páginas. Não vou colocar aqui pois ficou muito extenso, mas quem quiser trocar ideias é só chamar aqui!
upa ele pra gente ver!
compartilha ae pra nós estudar, deve ter dado um trabalhão!
muito boa essa aula, adorei o exemplo. Obrigada Guanabara
Olá, aula fantástica, estou aprendendo muito! Só vou deixar minha dica. Acho que poderia ter sido explicado durante a aula o fato de não armazenar as variáveis "derrotas", "vitórias" e "empates", esses valores são sempre reiniciados quando o jogador é instanciado no array. De qualquer forma continue o trabalho perfeito! Abraços.
Isso somente poderia ser feito usando um banco de dados ou cookies. Seria um pouco mais complicado.
barbada com mysql ou cookies.
setcookie("nome do cookie", "valor a ser guardado", time() + (3600 * 24)) // um dia
Parabéns e obrigado Guanabara. Um abraço desde Lisboa, Portugal. Tomara que nos cursos que eu paguei aprendesse metade do que aprendo contigo.
Mesmo muito obrigado...
Segue a minha classe Luta.
Adicionei o factorAleatorio que gera um valor entre 0 e 40;
e adicionei o atributo favoritismoDesafiado que começa com 50(%) e aumenta ou diminui consoante seja mais/menos alto que o desafiante e o nr de vitórias.
Bons estudos gafanhotos!
-----------------------------------------------------------------------
Primeiramente, parabéns pela ideia implementada no seu código! Esse factorFavoritismo deixou o resultado da luta mais interessante.
Segundo, a frase "O júri decidiu por unanimidade que foi um empate técnico!" não faz sentido pois, se é unânime, todos votaram em um mesmo lutador, impossibilitando o empate.
ótimo vídeo
Excelente, curti muito!
Colocar num banco de dados MySQL + interface gráfica CSS ficaria ultra mega foda
dá pra implementar a vitória por round e depois ele calcula a quantidade total de rounds e se vc ganhou a metade + 1 já é o vencedor...
Guanabara, ótimo curso muito bom mesmo, eu ja fiz curso de PHP em outros locais, e inclusive ja montei sistemas mais complexos com POO, porém sempre tem coisas que ficam para trás no aprendizado, e mais que ver o video sempre duas vezes ou mais, é legal também procurar o mesmo conteúdo em outros lugares, e tem detalhes que você consegue passar muitooo bem. Também tenho uma pergunta a fazer, sobre o curso de ANDROID, será possivel algum dia este curso ser realizado aqui neste canal? se sim, como fazemos para poder programar sem ter uma super maquina que não trave programas como android studio, pois emular um cell é realmente puxado, mas existe alguma forma de ser no minimo razoavel este pesar da maquina? vlw e continue sempre com esse ótimo trabalho
Nas funções apresentar() e status(), optei por colocar a condicionalidades IFs,
para não aparecer 1 vezes ou 1 vitórias.
function apresentar(){
print "-------------------------------";
print "Chegou a hora! O lutador " . $this->getNome();
print " ,veio directamento de " . $this->getNacionalidade();
print ". Tem " . $this->getIdade() . " anos, com " .
$this->getPeso() . " kilos, é um peso " . $this->getCategoria() . ".";
if($this->getVitorias() != "1" ){
print " Tem: " . $this->getVitorias() . " vitórias. ";
}else{
print " Tem: " . $this->getVitorias() . " vitória. ";
}
if($this->getDerrotas() != "1" ){
print " Tem: " . $this->getDerrotas() . " derrotas. ";
}else{
print " Tem: " . $this->getDerrotas() . " derrota. ";
}
if($this->getEmpates() != "1" ){
print " Tem: " . $this->getEmpates() . " empates. ";
}else{
print " Tem: " . $this->getEmpates() . " empate. ";
}
}
function Status(){
print "-------------------------------";
print "".$this->getNome() . " é um peso "
.$this->getCategoria();
if($this->getVitorias() != "1"){
print " Ganhou " . $this->getVitorias(). " vezes ";
}else{
print " Ganhou " . $this->getVitorias(). " vez ";
}
if($this->getDerrotas() != "1"){
print " Perdeu " . $this->getDerrotas() . " vezes ";
}else{
print " Perdeu " . $this->getDerrotas(). " vez ";
}
if($this->getEmpates() != "1"){
print " Empatou " . $this->getEmpates() . " vezes ";
}else{
print " Empatou " . $this->getEmpates(). " vez ";
}
Top
Guanabara, agora sim estou aprendendo POO, modifiquei um pouquinho a classe lutar, usei if e fiz mais opções, vitória por decisão dos juízes e vitória por nocaute... vou trabalhar mais um pouco pra conseguir colocar peso nas decisões das lutas. segue a classe
public function lutar() {
if($this->aprovada):
$this->desafiado->apresentar();
$this->desafiante->apresentar();
$vencedor = rand(0, 12);
if($vencedordesafiado->empatarLuta(); $this->desafiante->empatarLuta();
elseif($vencedordesafiado->getNome().' por decisão unanime dos juizes'; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta();
elseif ($vencedordesafiado->getNome().' por nocaute.'; $this->desafiado->ganharLuta(); $this->desafiante->perderLuta();
elseif ($vencedordesafiante->getNome().' por decisão unanime dos juizes';
$this->desafiado->perderLuta(); $this->desafiante->ganharLuta();
else:
echo 'Vitória deeee '. $this->desafiante->getNome().' por nocaute.';
$this->desafiado->perderLuta(); $this->desafiante->ganharLuta();
endif;
else:
echo "Aviso!Luta não pode ser realizada, verifique os lutadores e suas categorias!";
endif;
}
CAR@#%O QUE AULA SHOWW! \o/
Pessoal,
quando mando um objeto para outro $luta->($lutador[0],$lutador[1]) , qual a forma correta de atualizar os objetos depois de ter atualizado eles com as vitorias,derrotas e empates dentro do objeto luta? Dou um return do objeto inteiro dentro do método $luta[0]->lutar();
E se eu quisesse fazer uma tabela? Onde eles poderiam ir avançado e ir enfrentando outros oponentes conforme vão ganhando? Tipo aquelas tabelas do challonge. Como eu faria isso?
Fiz atualizações na clase Luta, considerei experiencia baseando nos atributos idade e numero de luta, criei a possibilidade de indicar tambem o numero de rodadas de cada luta apartir do construtor, considerei a percentagem de vitorias, e o numero de vitorias, tudo isso para montar um sistema de pontos, onde a cada item que um lutador tiver vantagens sobre o outro ganha pontos, e esses pontos são usados junto com a geração do numero randomico de modo a dar mais supresa no resultado final, dar tabem e a posibilidade de um lutador com menos hipotese vencer e surprender
_________________________________
classe Luta.php
Ola gustavo, estou tendo problemas na hora de pegar a categoria e o nome do lutador, para corrigir este problema tive que deixa os métodos getters nome e categoria públicos.
o getCategoria() tem que ser público, o setCategoria() privado
Eu fiz uma alteração no código do método lutar() e implementei algo como se fosse uma luta por turnos, utilizando como base um rand(0,20) definindo ataque de um e defesa do outro por turno, quem quiser dar uma olhada ->
public function marcarLuta($desafiado, $desafiante, $rounds){
if($desafiado->getCategoria() != $desafiante->getCategoria()){
$this->desafiado = null;
$this->desafiante = null;
$this->aprovada = false;
echo "Luta não aprovada. Lutadores de categorias diferentes."."";
}else if($desafiado->getNome() != $desafiante->getNome()){
$this->aprovada = true;
$this->desafiado = $desafiado;
$this->desafiante = $desafiante;
$this->setRounds($rounds);
echo "Luta aprovada. Agora é só lutar."."";
}
// $luta = array("Desafiado" => $this->desafiado,
// "Desafiante"=> $this->desafiante,
// "rounds"=> $this->rounds,
// "Aprovada"=> $this->aprovada)
// return $luta;
}
public function lutar(){
if ($this->aprovada == false) {
echo "Esta luta não pode acontecer. Ela não foi aprovada."."";
}else{
$this->desafiado->apresentar();
$this->desafiante->apresentar();
$vroundl1 = 0; $vroundl2 = 0;
for($i=1; $irounds;){
echo ""."Round ".$i."";
//l1 = desafiado
//l2 = desafiante
//fazer variável para dividir numero de rounds em 2, caso alguém tenha vround > metade do round, a luta é finalizada
if(($this->rounds % 2) == 0){
$vitoriaporround = (($this->rounds/2)+1);
}else{
$vitoriaporround = round($this->rounds/2);
}
if($vroundl1 >= $vitoriaporround){
echo "O lutador ".$this->desafiado->getNome()." venceu a luta"."";
$this->desafiado->ganharLuta();
$this->desafiante->perderLuta();
echo $this->desafiado->getnome()." agora tem ".$this->desafiado->getVitorias()." vitorias"."";
echo $this->desafiante->getNome()." agora tem ".$this->desafiante->getDerrotas()." derrotas"."";
break;
}elseif($vroundl2 >= $vitoriaporround){
echo "O lutador ".$this->desafiante->getNome()." venceu a luta"."";
$this->desafiante->ganharLuta();
$this->desafiado->perderLuta();
echo $this->desafiante->getNome()." agora tem ".$this->desafiante->getVitorias()." vitorias"."";
echo $this->desafiado->getnome()." agora tem ".$this->desafiado->getDerrotas()." derrotas"."";
break;
}elseif($vroundl1 == $vroundl2){
// echo "Os lutadores empataram a luta."."";
}
$ataquel1; $ataquel2;
$defesal1; $defesal2;
$ataquel1 = rand(0,20);
$defesal2 = rand(0,20);
if($ataquel1 > $defesal2){
echo $this->desafiado->getNome()." vence o round numero ".$i."";
$i++;
$vroundl1 += 1;
}else if($ataquel1 < $defesal2){
echo "Ataque de ".$this->desafiado->getNome()." foi fraco"."";
echo "O próximo ataque é do lutador ".$this->desafiante->getNome()."";
$ataquel2 = rand(0,20);
$defesal1 = rand(0,20);
if($ataquel2 > $defesal2){
echo $this->desafiante->getNome()." vence o round numero ".$i."";
$i++;
$vroundl2 += 2;
}else{
echo "Nenhum dos lutadores venceu o round numero ".$i."";
$i++;
}
}
if($i==$this->rounds){
if($vroundl1 == $vroundl2){
$this->desafiado->empatarLuta();
$this->desafiante->empatarLuta();
echo "Luta encerrada! Os lutadores terminaram com um empate."."";
$i++;
break;
}
}
}
}
}
else if($desafiado->getNome() != $desafiante->getNome())
não acho esse um bom parâmetro, eles podem ter o mesmo nome, porém serem lutadores diferentes...
Chegou a hora de validar o que eu escrevi na 08a
Eu utilizei o construtor nessa exemplo da classe Luta, já para instanciar com os dois lutadores e o número de rounds:
public function __construct($desafiado, $desafiante, $rounds)
{
$this->setDesafiado($desafiado);
$this->setDesafiante($desafiante);
$this->setRounds($rounds);
$this->setAprovada();
}
E então minha função setAprovada() ficou assim:
public function setAprovada()
{
if (($this->desafiado->getCategoria() == $this->desafiante->getCategoria()) && ($this->desafiado !== $this->desafiante)) {
$this->aprovada = true;
} else {
$this->aprovada = false;
}
}
As funções marcarLuta() e lutar() ficaram quase idênticas...
Fatal error: Uncaught Error: Call to private method fighter::getCategoria() from context 'luta' in...
Você tem que deixar a função getCategoria pública dentro da classe fighter
bota a mão na massa ne galera
Alguém poderia disponibilizar o código fonte pois estou com problemas no meu código. Ficaria muito grato
Só uma coisa, precisa mesmo fazer require_once do lutador.php
Eu fiz a minha classe lutar ainda na aula 08a, e funcionou de boa sem fazer o require_once do lutador.php dentro do luta.php.
Fiz o include na index!
Testei o antes e depois do lutador que mandei pra lutar! pra ver se alterou certinho!
Testei tudinho!
Funcionou perfeitamente!
e lendo o código não ví necessidade nenhuma de fazer o require_once do lutador.php dentro do luta.php
Se alguém souber explicar o pq o Guanabara fez o require_once no luta.php ao invez de fazer no inex. seria muito bom tirar essa duvida!
e pq parou de fazer o implements da Interface?
ahh eu revi o vídeo, e ví que ele fez require_once da classe lutador.php dentro da classe luta.php!
pq ele não fez na index
eu aqui fiz o require dela na index.
Analisando direitinho vejo que fazendo o require dentro da classe deixa o negocio mais pratico!
imaginando se eu passe essas classes pra alguem. quem for usar vai precisar fazer require de todas as classes que se relacionam em seu projeto!
Fazendo da forma que ele fez ai, basta fazer require de apenas 1 classe e pronto! dentro dela já vai ter o require de outra, que provavelmente pode tbm ter de outra e por ai vai!
so resta +1 duvida pq parou de usar implements da interface! facilita tanto na hora de criar os métodos! kkk
basta usar o NetBeans que ele já pega o métodos da interface e joga na classe
Gustavo Guanabara, como e qual site compro os seus cursos para ser um profissional?
16:09 - kkkkkkkkkkkkkk... atrasado mas rindo muito!
So ouve um erro na hora de atualizar as derrotas, pq se formos ver pela logica, quando o lutador perde uma luta esta luta perdida seria adicionada mais uma derrota, mas ai no caso a derrota esta subindo e descendo conforme ele ganha
no metodo marcarluta poderia ser escrito $this->setAprovada(true); inves de $this->aprovada = true; ?
Sim
Cara!
O atributo "rounds" ficou obsoleto nesse projeto, pensando nisso tentei fazer algo com ele. Tipo parar a luta depois do terceiro round, mas infelizmente não tive êxito. Mandem alguma dica aí galera...
estou enfrentando um erro que diz Erro de análise : erro de sintaxe, 'classe' inesperada (T_CLASS) em C:\xampp\htdocs\curso\Luta.php na linha 3, porem esta tudo certo e ja corrigi o codigo, mesmo assim o erro permanece, alguma ideia do que pode ser? uso vscode.
Alguém consegue me explicar o porque de mesmo suprimindo os atributos da classe Luta, o programa ainda continua funcionando normalmente?
Ex:
class Luta {
//Atributos
//private $desafiado;
//private $desafiante;
//private $rounds;
//private $aprovado;
Mesmo os comentando, a aplicação funciona normalmente.
Isso se chama Creation of dynamic property .Em classes PHP, é possível definir e recuperar dinamicamente propriedades de classe que não são declaradas. Mas isso ficou obsoleto no php 8.2 pois elas abrem a possibilidade de possíveis erros e comportamentos inesperados.
Grande mestre gafanhoto Guanabara!
O curso é top, e estou agora REVISANDO JAVA no seu CURSO DE JAVA e tem um problema com relação a geração do arquivo .JAR que ás vezes eu quero somente abrir a tela pra eu ver como funciona e tb mostrar a tela pra alguém e não consigo pq ao criar um projeto, eu crio vários jframes no mesmo projeto e o netbeans junta tudo em apenas 1 arquivo.jar e com isso não consigo abrir as outras telas do projeto ou abre apenas 1 tela. Tem um jeito de resolver esse problema do NETBEANS? ou o jeito é criar 1 projeto e somente 1 arquivo pra cada frame? Desde já agradeço pela sapiência e pelo método de ensino que ajuda milhares de gafanhotos por esse brasil.
Alguém saberia me explicar qual é o motivo desse erro:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
( ! ) Fatal error: Unknown: Failed opening required 'C:/xampp/htdocs/POO-CURSO-EM-VIDEO/aula_08_Agregação_entre_Objetos/index.php' (include_path='C:\xampp\php\PEAR') in Unknown on line 0
Cara isso é um arquivo que tem dentro da pasta PHP do xampp que provavelmente está faltando no seu...
Não entendi quando $this->desafiado->empatar luta(); como que usa -> duas vezes. Sendo de classes diferentes. Alguém ?
foi escrito require_once por isso dá pra usar
o require_once importa a classe que contém esse método
E o ano é 2020.
Alguém consegue por gentileza me ajudar. Estou com os seguintes erros:
Warning: include_once(./Lutador.php): failed to open stream: No such file or directory in D:\_Projetos_GitHub\POO\PHP_POO\POO_PHP\classes\Luta.php on line 4
Warning: include_once(): Failed opening './Lutador.php' for inclusion (include_path='C:\xampp\php\PEAR') in D:\_Projetos_GitHub\POO\PHP_POO\POO_PHP\classes\Luta.php on line 4
Já pesquisei na internet e nada. Alguém teria uma solucão?
Teria q ver o código man
@@welltrev Obrigado. Já consegui resolver. Vlw mesmo!
E aquela emagrecida marota do Pretty Boy aos 16:13, professor?!? :P rsrs
tinha que bater o peso pra lutar. rsrs
16:09 kkkkkkk
Fiz até um meme kkkkkk
boa noite !!!
professor podes me ajudar deu o seguinte erro:
Fatal error: Uncaught Error: Call to undefined function marcarLuta() in C:\xampp\htdocs\UltraEmojiCombat\index.php:26
Stack trace:
#0 {main}
thrown in C:\xampp\htdocs\UltraEmojiCombat\index.php on line 26
Você fez o require_once('Luta.php'); no index.php?
Amei cada cena do Michael Keaton. Mas acho que o filme não finalizou o universo da DC por trocar o Ben Affleck por George Clooney no final. No máximo pra mostrar que isso seria tão ruim a ponto de ninguém querer assistir qualquer coisa disso kkkkk
fiz um while com uma sequencia de ações randomicas entre dois lutadores e coloquei um random com frases de efeito, ficou muito engraçado EHuehUEHUEHUEHU
Lucha Lucha Mascarada!
Nerdaart Usou Meteoro de Pegasus em Ufocobol
Nerdaart Chutou!! Ufocobol
Nerdaart Socou!! Ufocobol
Ufocobol Ele é do RJ e puxou a pistola para o Nerdaart
Nerdaart Says: Assine seu contrato para o amaro bocão Ufocobol
Nerdaart Says: Brigue feito homem Ufocobol
Ufocobol Usou Meteoro de Pegasus em Nerdaart
Nerdaart Socou!! Ufocobol
Ufocobol Chamou de $%¨& Nerdaart
Nerdaart Socou!! Ufocobol
Nerdaart Ele é do RJ e puxou a pistola para o Ufocobol
Ufocobol Deu uma cabeçada em Nerdaart
Ufocobol Says: Assine seu contrato para o amaro bocão Nerdaart
Ufocobol Chutou!! Nerdaart
Ufocobol Chamou de são paulino o Nerdaart
Ufocobol Deu uma cabeçada em Nerdaart
Ufocobol Says: Brigue feito homem Nerdaart
Ufocobol Socou!! Nerdaart
Nerdaart Deu uma cabeçada em Ufocobol
Nerdaart Socou!! Ufocobol
Empate!
Minha versão após a correção:
aula07.php :
Aula 07 - PHP
Aula07Class.php :
Alguém poderia fazer um check no meu programa? Algo não funciona!
github.com/rubens-batista/cursopoo/issues/1
Rapazz, como que vou criar uma verificação para mulher não poder lutar com homem?
Até criei outra classe, mas ainda tá díficil eu pensar numa lógica kkk
Ele ta lutando mesmo sem ser da mesma categoria de peso :(
Conseguiu resolver?
O número de views vai caindo a medida que o curso avança.
Assim como o número de alunos em qualquer curso da área ao longo do curso.