Ir para conteúdo
monek

Como interagir entre objetos?

Recommended Posts

Vi uma seria de videos sobre POO e estou tentando fazer alguma coisa para testar meus conhecimentos, percebi que estou com muita dificuldade para criar interação entre objetos...

Fiz essa classe player que cria um player
E uma função bem porca de pvp pra criar 2 players e fazer PVP entre eles

 

<html>
<head><title>Test POO</title></head>
<body>
<?php
	require_once 'player.php';

	$j[1] = new Player("Bubble", 4);
	$j[2] = new Player("Knurd Yep", 1);
	var_dump($j[1]);
	echo '<br>';
	var_dump($j[2]);
	echo '<br>';
	echo '<br>';
	PvP($j[1], $j[2]);
?>
</body>
</html>

 

<?php
class Player {
	private $name;
	private $level;
	private $vocation;

	public function __construct($n, $v) {
		$this->setName($n);
		$this->setVocation($v);
		$this->setLevel(8);
	}

	// interação entre players
	function getAtk($j) {
		$atk = $j->getVocation() * $j->getLevel()
		return $atk;
	}
	function PvP($jA, $jB) {
		if(getAtk($jA) > getAtk($jB)) {
			echo 'Player' .$jA->getName(). 'matou' .$jB->getName().'!';
		}
		else {
			echo 'Player' .$jB->getName(). 'matou' .$jA->getName().'!';
		}
	}

	// getters e setters padrões
    function getName() {
        return $this->name;
    }
    function setName($nome) {
        $this->name = $nome;
    }

	function getLevel() {
		return $this->name;
	}
	function setLevel($l) {
		$this->level = $l;
	}

	function getVocation() {
		return $this->vocation;
	}
	function setVocation($v) {
		$this->vocation = $v;
	}
}

 

O que eu to fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você esta passando argumentos pelo construtor da classe, qual há necessidade destes getters e setters?

 

Só setar os valores nestas variaveis

private $name;
private $level;
private $vocation;

Ao invés de usar os métodos.

 

Obs.: E não se usa métodos para efetuar cálculos. Tenha em mente que getters e setters são objetos burros, a unica coisa que eles fazem é transacionar dados entre camadas, e quanto menos usar melhor.

 

Para evitar chamar duas vezes a mesma classe, passe os argumentos como arrays

$j[1] = new Player("Bubble", 4);
$j[2] = new Player("Knurd Yep", 1);
PvP é um objeto da classe, e não um helper!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem querer ser o chato do role.

 

Já pensou em fazer/estudar em cima de linguagem onde o retorno é mais imediato... tipo JS?

 

Fiz um curso um tempo atras do Virtual academy. usando essa lib:

http://enchantjs.com/

Ela tá meia abandonada, mesmo assim o curso é bem bacana...

 

Link do curso (gratuito)

https://mva.microsoft.com/en-US/training-courses/developing-games-with-html5-8418?l=cEDfjPKz_4304984382

 

Eu sugeri mais pq lá tem exatamente essas funções (playerMove, playerAtack, setLevel, etc) e o retorno é 'real', você chega a enxergar os sprites e talz e isso ajuda na motivação hehe.

 

Apesar q estudar encapsulamento é bem interessante/recomendado independente da linguagem, afinal pode usar esses conceitos em JS, PHP, JavaScript, Java, C#, C++ e pq não em C? etc etc..

 

bons estudos

 

Ps: se seu objetivo é fazer um jogo de browser estilo temporal esquece oq eu falei hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Carcleo
      Estou tentando rotacionar um texto no PDF com mPDF mas não estou conseguindo.
      $css = ' <style> ul { } ul li { float: left; list-style: none; /*necessáro width no campo */ } ul li span.vertical { display: block; //transform: rotate(270deg); /*necessáro display: block*/ text-rotate : 270; } </style>'; $html = ' <ul> <li style="width: 150px"><span class="vertical">Elefante</span></li> <li style="width: 150px"><span>Não</span></li> <li style="width: 150px"><span>Come</span></li> <li style="width: 150px"><span class="vertical">Bananada</span></li> </ul>'; require_once "../_scripts/_php/_configuracoes/erros.php"; require_once "../vendor/autoload.php"; $pdf = new \Mpdf\Mpdf(['debug' => true]); $pdf->AddPage(); $pdf->charset_in = "UTF-8"; $pdf->SetFont('Arial','B',16); $pdf->WriteHTML( $css, 1 ); $pdf->WriteHTML( $html ); $pdf->Output(); Obs.: O restante do estilo funciona normal.

    • Por jpaulorh
      O código grifado de amarelo está sem os caracteres de comentário, e quando é executado fica como se estivesse comentado e não executa o php.
       

       
      Segue abaixo o código para alguém me explicar esse mistério... 
       
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <title>CNSC</title>
          <!-- Favicons-->
        <link rel="icon" href="img/cnsc.png" sizes="32x32">
        <!-- Favicons-->
        <link rel="apple-touch-icon-precomposed" href="img/cnsc.png">
        <!-- Path to Framework7 Library CSS-->
        <link rel="stylesheet" href="css/framework7.ios.min.css">
        <link rel="stylesheet" href="css/framework7.ios.colors.min.css">
        <!-- Path to your custom app styles-->
        <link rel="stylesheet" href="css/my-app.css">
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
        <link rel="stylesheet" href="carbon/css/carbon-components.css">
        <!--Import Google Icon Font-->
        <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        <script
        src="https://code.jquery.com/jquery-3.1.1.min.js"
        integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
        crossorigin="anonymous"></script>
        <!-- Path to Framework7 Library JS-->
        <script type="text/javascript" src="js/framework7.min.js"></script>
        <script type="text/javascript" src="js/app.min.js"></script>
        <script src="carbon/js/carbon-components.js"></script>
        <script type="text/javascript">
        // Iniatilize do aplicativo com suas propriedades
        $(document).ready(function() {
          myApp = new Framework7({
            material: true,
            materialPageLoadDelay: 3,
            materialPreloaderHtml: '<span class="preloader-inner"><span class="preloader-inner-gap"></span><span class="preloader-inner-left"><span class="preloader-inner-half-circle"></span></span><span class="preloader-inner-right"><span class="preloader-inner-half-circle"></span></span></span>',
            modalTitle: 'CNSC',
            modalButtonCancel: 'Cancelar',
            modalPreloaderTitle: 'Carregando...',
          });
          verificaLogado();
        });
        </script>
      </head>
      <body class="theme-black">
        <!-- Status bar overlay for fullscreen mode-->
        <div class="statusbar-overlay"></div>
        <!-- Panels overlay-->
        <div class="panel-overlay"></div>
        <!-- Left panel with reveal effect-->
        <div class="panel panel-left panel-reveal">
          <div class="content-block">
            <div class="list-block">
              <ul>
                <li>
                  <a href="javascript: localStorage.clear(); location.href = 'index.html'" class="list-button item-link external"><i class="fa fa-sign-out color-icon" aria-hidden="true"></i> Sair</a>
                </li>
              </ul>
            </div>
          </div>
        </div>
        <!-- Views-->
        <div class="views">
          <!-- Your main view, should have "view-main" class-->
          <div class="view view-main">
            <!-- Top Navbar-->
            <div class="navbar">
              <div class="navbar-inner">
                <!-- We have home navbar without left link     icon-bars -->
                <div class="left"><a href="#" class="link icon-only open-panel"> <i class="icon"></i><img class="img img-responsive" style="position:absolute; margin-top: 0px; margin-left: 10px" src="img/cnsc.png"></a></div> 
                <br>
                <div class="center" style="position:absolute; font-weight:bold; color: #0080FF; margin-top: 0px; margin-left: 25%">Clínica N. Sra. do Carmo</div>
                            <?php include('slideshow.php');?>
              </div>
            </div>
            <!-- Pages, because we need fixed-through navbar and toolbar, it has additional appropriate classes-->
            <div class="pages navbar-through toolbar-through">
              <!-- Page, data-page contains page name-->
              <div data-page="index" class="page">
                <!-- Scrollable page content-->
      <div class="page-content">
                  <br>
                  <div class="login-screen-title">Atendimentos</div>
                  <!-- 
        Copyright IBM Corp. 2016, 2018
        This source code is licensed under the Apache-2.0 license found in the
        LICENSE file in the root directory of this source tree.
      -->
      <ul data-accordion class="bx--accordion">
          <li data-accordion-item class="bx--accordion__item">
            <button class="bx--accordion__heading" aria-expanded="false" aria-controls="pane1">
                <a href="li_listas.html" class="color-blue external" style="font-size: 18px;">
              <div class="bx--accordion__title"><i class="fa fa-list" aria-hidden="true"></i> Listas Atendimentos</a></div>
            </button>
          </li>
          <li data-accordion-item class="bx--accordion__item">
            <button class="bx--accordion__heading" aria-expanded="false" aria-controls="pane2">
            <a href="cad_usuarios.html" class="color-blue external" style="font-size: 18px;">
              <div class="bx--accordion__title"><i class="fa fa-user-circle-o" aria-hidden="true"></i> Usuários</a></div>
            </button>
          </li>
          <li data-accordion-item class="bx--accordion__item">
            <button class="bx--accordion__heading" aria-expanded="false" aria-controls="pane3">
            <a href="rel_relatorios.html" class="color-blue external" style="font-size: 18px;">
              <div class="bx--accordion__title"><i class="fa fa-bar-chart" aria-hidden="true"></i> Relatórios</a></div>
            </button>
          </li>
      </ul>
                </div>
              </div>
            </div>
          </div>
        </div>
      </body>
      </html>
    • Por Rafael-38
      Boa Noite, Pessoal

      Preciso de um orientação, veja se podem me ajudar.
      Estou tentando fazer uma validação de nível de acesso através da url só falta essa validação, onde o níveis são  Funcionário = 1 e Administrador = 2 .

      Exemplo url: painel/editUser.php?pag=editar&user=4 
       
      Então a ideia da validação é quando funcionário fazer login no painel ele consegue editar apenas o cadastro dele, caso mude o numero do user=4 para user=3 na url ele não consiga editar outro cadastro.
       
      Abaixo o código que fiz, mais é algum detalhe precisa ajustar:
      Coloquei um alert no $usu_idUser para testar e está recuperando a ID do usuário.
      //Validando Nivel de Acesso if($_GET['user'] != "$usu_idUser" || $_SESSION['nivelAcesso'] != "2") { echo "<script>alert('$usu_idUser'); location.href='index.php';</script>"; }else{ $usu_idUser = intval($_GET['user']); } Agradeço desde já pela ajudar...
    • Por Carcleo
      Gostaria de saber porque o mPDF, nesse meu código, não está aceitando o CSS ao gerar o PDF.
       
      Obs.: no navegador, sai tudo normal mas quando a exibição é no PDF é que nõ funcinam os estilos.
      <?php   $css = "         img {             max-width: 100%;         }         ul {             list-style: none;         }         div.relatorio {             width: 95%;             margin: 0 auto;         }         div.relatorio ul.border {             border: .1px rgb(0,0,0) solid;             background-color: black;         }         div.relatorio .centralizado {             text-align: center !important;         }         div.relatorio .backCinza {             background-color: rgb(217,217,217);         }         div.relatorio ul.ulInlineBlock li {             display: inline-block;         }         div.relatorio ul.lancamento li, div.relatorio ul.resumo li {             height: 100%;             line-height: 18px;             font-size: .85em;             border-left: .1px rgb(0,0,0) solid;             text-align: center;             vertical-align: middle;         }         div.relatorio ul.lancamento li {             width: 113.5px !important;         }         div.relatorio ul.resumo li {             width: 150px !important;         }         div.relatorio ul.lancamento li:first-child, div.relatorio ul.resumo li:first-child {             border-left: none;         }         .erro, .hCentralizadoAvisos {             color: rgb(255,0,0);         }         .hCentralizado, .hCentralizadoAvisos, .erro {             width: auto;             line-height: 50px;             text-align: center;             margin: 0 auto;         }         .labelPequeno {             width: 150px;             height: 30px;             padding: 3px;             display: inline-block;         }         span.vertical {             -webkit-writing-mode: vertical-lr;             -ms-writing-mode: tb-lr;             writing-mode: vertical-lr;             -webkit-transform: rotate(180deg);             -ms-transform: rotate(180deg);             transform: rotate(180deg);         }         span.comum {         }         div.cabecalhoVertical {             display: -webkit-box;             display: -ms-flexbox;             display: flex;             margin: 0 auto;             width: 800px;             height: 220px;             border: .1px rgb(0,0,0) solid;         }         div.cabecalhoVertical div {             display: -webkit-box;             display: -ms-flexbox;             display: flex;             border-right: .1px rgb(0,0,0) solid;             -webkit-box-align: center;             -ms-flex-align: center;             align-items: center;             -webkit-box-pack: center;             -ms-flex-pack: center;             justify-content: center;         }         div.cabecalhoVertical div span {             text-align: center;             font-weight: bolder;         }   ";   $html = "         <div class='relatorio'>             <img src='http://www.wesleyanagceu.com.br/_imgs/gceu.png' /> <h1>Relatório Mensal</h1>             <br><br>                 <div class='cabecalhoVertical'>             <div style='width:100px;'><span class='comum'   >Nome do Gcéu</span></div>             <div style='width:100px;'><span class='vertical'>Supervisor</span></div>             <div style='width:100px;'><span class='comum'   >Líder</span></div>             <div style='width:050px;'><span class='vertical'>Houve Supervisão</span></div>             <div style='width:050px;'><span class='vertical'>Houve dia de Jejum</span></div>             <div style='width:050px;'><span class='vertical'>Houve dia de Evangelismo</span></div>             <div style='width:050px;'><span class='vertical'>Membros Compromissados</span></div>             <div style='width:050px;'><span class='vertical'>Visitantes</span></div>             <div style='width:050px;'><span class='vertical'>Crianças de 0 à 12 anos</span></div>             <div style='width:050px;'><span class='vertical'>Total de presentes</span></div>             <div style='width:050px;'><span class='vertical'>Ofertas</span></div>                                 <div style='width:050px;'><span class='vertical'>Disicpulados</span></div>                                 <div style='width:050px;'><span class='vertical'>Número de decisões</span></div>                             </div>             <div class='border cabecalhoVertical' style='backgroud-color:none; height: 50px !important;'>             <div style='width:100px;'><span class='comum'>Célula 1</span></div>             <div style='width:100px;'><span class='comum'>Cleonice</span></div>             <div style='width:100px;'><span class='comum'>Jonas</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>50</span></div>             <div style='width:050px;'><span class='comum'>10</span></div>             <div style='width:050px;'><span class='comum'>13</span></div>             <div style='width:050px;'><span class='comum'>73</span></div>             <div style='width:050px;'><span class='comum'>22,65</span></div>                                 <div style='width:050px;'><span class='comum'>2</span></div>                                 <div style='width:050px;'><span class='comum'>11</span></div>         </div>                      <div class='border cabecalhoVertical' style='backgroud-color:none; height: 50px !important;'>             <div style='width:100px;'><span class='comum'>Celula 2</span></div>             <div style='width:100px;'><span class='comum'>Carlos</span></div>             <div style='width:100px;'><span class='comum'>Jonas</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>Não</span></div>             <div style='width:050px;'><span class='comum'>10</span></div>             <div style='width:050px;'><span class='comum'>5</span></div>             <div style='width:050px;'><span class='comum'>3</span></div>             <div style='width:050px;'><span class='comum'>18</span></div>             <div style='width:050px;'><span class='comum'>78,39</span></div>                                 <div style='width:050px;'><span class='comum'>3</span></div>                                 <div style='width:050px;'><span class='comum'>1</span></div>         </div>                      <div class='border cabecalhoVertical' style='backgroud-color:none; height: 50px !important;'>             <div style='width:100px;'><span class='comum'>Celula TOP</span></div>             <div style='width:100px;'><span class='comum'>Carlos</span></div>             <div style='width:100px;'><span class='comum'>Carlos</span></div>             <div style='width:500px;'><span class='comum'>Não houve Reuniões para esse Gcéu</span></div>         </div>                      <div class='border cabecalhoVertical' style='backgroud-color:none; height: 50px !important;'>             <div style='width:100px;'><span class='comum'>Jesuita</span></div>             <div style='width:100px;'><span class='comum'>Josefina Etelvina</span></div>             <div style='width:100px;'><span class='comum'>Josefina Etelvina</span></div>             <div style='width:500px;'><span class='comum'>Não houve Reuniões para esse Gcéu</span></div>         </div>                      <div class='border cabecalhoVertical' style='backgroud-color:none; height: 50px !important;'>             <div style='width:100px;'><span class='comum'>Tassito</span></div>             <div style='width:100px;'><span class='comum'>Carlos</span></div>             <div style='width:100px;'><span class='comum'>Carlos</span></div>             <div style='width:500px;'><span class='comum'>Não houve Reuniões para esse Gcéu</span></div>         </div>     </div>";     require_once "../_scripts/_php/_configuracoes/erros.php";     require_once "../vendor/autoload.php";     $pdf = new \Mpdf\Mpdf(['debug' => true]);     $pdf->AddPage();     $pdf->charset_in = "UTF-8";     $pdf->SetFont('Arial','B',16);     $pdf->WriteHTML( $css, 1 );     $pdf->WriteHTML( $html );     $pdf->Output("relatorio.pdf","D"); ?>  
    • Por Alex Dias
      <?php //CONECTA COM O BANCO DE DADOS require_once("adm/conecta.php"); //SQL $sql = "SELECT DISTINCT tb_comentarios.ID_COMENTARIOS, tb_comentarios.DATA_COMENTARIOS, tb_comentarios.NOME_COMENTARIOS, tb_comentarios.COMENTARIOS, tb_respostas.ID_RESPOSTAS, tb_respostas.DATA_RESPOSTAS, tb_respostas.NOME_RESPOSTAS, tb_respostas.RESPOSTAS FROM tb_comentarios, tb_respostas WHERE tb_comentarios.ID_COMENTARIOS = tb_respostas.ID_COMENTARIOS ORDER BY DATA_COMENTARIOS DESC"; $resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta ao banco de dados"); // CHAMA OS DADOS DA TABELA while ($linha=mysql_fetch_array($resultado)) { $id_comentarios = $linha["ID_COMENTARIOS"]; $data_comentarios = $linha["DATA_COMENTARIOS"]; $nome_comentarios = $linha["NOME_COMENTARIOS"]; $email_comentarios = $linha["EMAIL_COMENTARIOS"]; $comentarios = $linha["COMENTARIOS"]; $status = $linha["STATUS"]; $id_artigo = $linha["ID_ARTIGO"]; $id_respostas = $linha["ID_RESPOSTAS"]; $data_respostas = $linha["DATA_RESPOSTAS"]; $nome_respostas = $linha["NOME_RESPOSTAS"]; $email_respostas = $linha["EMAIL_RESPOSTAS"]; $respostas = $linha["RESPOSTAS"]; $status = $linha["STATUS"]; $id_artigo = $linha["ID_ARTIGO"]; $id_comentarios = $linha["ID_COMENTARIOS"]; $data_portugues1= implode("/", array_reverse(explode("-", "$data_comentarios"))); $data_portugues2= implode("/", array_reverse(explode("-", "$data_respostas"))); echo" <table width='1200' align='center' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='100' valign='top'><img src='images/usuario.jpg'></td> <td width='900' valign='top'><p align='left'><font size='3'><strong>$nome_comentarios</strong> dia $data_portugues1</font></p><br><p align='justify'><font size='3'>$comentarios</font><p></td> <td width='200' align='center' valign='middle'><a href='#'><img src='images/responder.jpg' bordeer='0'></a></td> </tr> </table> "; echo"<br><br> <table width='1200' align='center' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='100' valign='top'>&nbsp;</td> <td width='100' valign='top'><img src='images/usuario2.jpg'></td> <td width='800' valign='top'><p align='left'><font size='3'><strong>$nome_respostas</strong> dia $data_portugues2</font></p><br><p align='justify'><font size='3'>$respostas</font><p></td> <td width='200' align='center' valign='middle'><a href='#'><img src='images/responder.jpg' bordeer='0'></a></td> </tr> </table> <br><br><br><br>"; }//FECHA FOR ?> Boa tarde amigos, estou batendo cabeça aqui com meu Blog, meu Blog tem duas tabelas MySQL uma chamada tb_comentarios para armazenasr os comentários dos artigos postados, a outra tabela é chamada de tb_respostas para armazenar as respostas desses comentários dos usuários. Está tudo ok imprimindo os comentários e respostas na tela bem legal, o único problema é que os comentários estão duplicando, as respostas estão ok, mas os comentários estão duplicando.
       
      O Correto seria o comentário ficar lá e as respostas todas em baixo desse comentário, a questão é que cada resposta dada acaba repetido o comentário, então fica sempre o comentário e a resposta um abaixo do outro, e se tiver três respostas desse comentário, a dupla comentário x resposta se repete por três vezes sendo que o ideal seria só um comentário e as três respostas em baixo, e não consigo determinar que o comentário não se repita, ja usei DISTINCT mas não resolve.

      Segue abaixo o código e anexo o PRINT da tela para vocês entenderem o que tá acontecendo.


       

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.