Dalmir!
Diz aí se o instanceof solucionou!
--
Cordialmente
Rodrigo Régis Palmeira
regisbsb@...
www.rodrigoregis.com.br
2009/7/9 Rodrigo Régis <regisbsb@...>
> Bom dia Dalmir!
>
> Primeiramente, parabéns pela idéia do projeto. Mesmo tendo explicado 0,01%
> do jogo eu já me interessei (me lembrou o travian).
>
> Vamos ao problema:
>
> Já tento utilizar um if com instanceof?
> Dá uma olhada na documentação: http://br.php.net/instanceof
>
>
>
> --
> Cordialmente
>
> Rodrigo Régis Palmeira
> regisbsb@...
> www.rodrigoregis.com.br
>
>
> 2009/7/7 dalmir da silva <dalmirdasilva@...>
>
>>
>>
>> Boa noite. Gostaria de saber se existe uma função (ou uma solução) que me
>> informasse se um método está sendo chamado pela instância ou por outro
>> método da própria ou da classe filha.
>>
>> Eu sei que em princípio é a mesma coisa, a instância e a palavra $this,
>> mas
>> pro PHP não é.
>>
>> Pra ser mais claro:
>>
>> Estou criando um jogo em php. Nesse jogo "você" pode/deve "programar" a(s)
>> sua(s) unidade(s) militar(es). Depois de programada ela irá "combater" com
>> outra unidade de alguma outra pessoa, essa também programada pelo seu
>> "dono". (a historinha está meio vulgar, mas não é isso que importa), esse
>> jogo será baseado em turnos; Supondo que você programasse um fuzileiro.
>> Cada
>> turno ele tem N movimentos, enquanto anda ele os gasta. No inicio de cada
>> turno é recarregado seus movimentos.
>>
>> A classe base de um fuzileiro seria algo parecido com:
>> abstract class FuzileiroBase {
>> private $movimentos = 10;
>> protected function _setMovimentos( $movimentos ) {
>> $this->movimentos = $movimentos;
>> }
>> protected function _getMovimentos() {
>> return $this->movimentos;
>> }
>> }
>>
>> A classe Avançada seria algo como:
>> abstract class FuzileiroAdvanced extends FuzileiroBase {
>> protected function anda() {
>> $this->_setMovimentos( $this->_getMovimentos() - 1 );
>> }
>> public function _recarregaMovimentos() {
>> $this->_setMovimentos( 10 );
>> }}
>>
>> Evidente que é pra desconsiderar n fotos/metodos que eu ocultei pq nao sao
>> relevantes. Ate aqui temos uma class (assim eu defini) base que tem os
>> atributos privados e metodos protegidos, somente metodos que alteram os
>> atributos; outra classe avançada que conterá os metodos úteis, os metodos
>> dessa classe serão chamados pela classe final que será a unidade mulitar
>> em
>> sí. Vamos a ela:
>>
>> final class Vicente extends FuzileiroAdvanced implements FuzileiroEventos
>> {
>> public function _onTurnStart() {
>> $this->anda();
>> }
>> }
>>
>> A ideia é que as açoes da unidade são implementadas "em cima" dos eventos
>> que acontecem a ela. Daria pra implementar uma maquina de estados
>> etc...(nao
>> vem ao caso)
>>
>> Agora uma batalha de 5 turnos seria seria algo como:
>>
>> $vicente = new Vicente();
>> for( $i = 0; $i < 5; $i++ ) {
>> $vicente->_recarregaMovimentos();
>> $vicente->_onTurnStart();
>> }
>>
>> Claro que aqui ele nao lutaria sozinho, teria outras unidades, teria um
>> campo de batalha, teria uma batalha especifica... (tudo isso ignorado);
>>
>> Agora vem os problemas:
>>
>> Pra se evitar Cheat nao pode ser permitido que o fuzileiro ande e
>> recarregue
>> seus movimentos, na verdade o metodo _recaregarMovimentos nunca pode ser
>> chamado pela classe Vicente, somente pela instancia $vicente. Poderia-se
>> resolver isso usando os próprios recursos da POO (protected, private...)
>> mas
>> o meu problema é que a lógica está inversa, eu preciso que a instância
>> tenha
>> liberdade pra chamar determinados métodos e que a classe final não possa
>> chama-los. Pensei em usar "_" (underline) na frente dos métodos que não
>> podem ser chamados pela classe final, mas isso é muito frágil.
>>
>> Pra entender melhor o jogo eu teria que explicar mais, mas até aqui eu
>> acho
>> é o suficiente pra entender o que eu havia perguntado:
>>
>> Preciso que os métodos que começam com "_" saibam se estão sendo chamados
>> pela instância ou pela classe filha, algo assim:
>>
>> public function _recarregaMovimentos() {
>> SE NAO ESTA SENDO CHAMADA PELA INSTANCIA($vicente) RETORNA
>> $this->_setMovimentos( 10 );
>> }
>>
>> Bom, era isso; Abração!
>>
>> --
>> ________________________
>> Dalmir da Silva
>> +55 55 30262038
>> +55 55 9925 4645
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>> __._,_.
>> Atividade nos últimos dias
>>
>>
>> Visite seu Grupo
>>
<http://br.groups.yahoo.com/group/php-especialistas;_ylc=X3oDMTJlN2NnNGdtBF9TAzk\
3NDkwNDM3BGdycElkAzE4OTczOTEEZ3Jwc3BJZAMyMTM3MTExMjU5BHNlYwN2dGwEc2xrA3ZnaHAEc3R\
pbWUDMTI0NzExNDA5NA-->
>> Yahoo! Mail
>>
>> Conecte-se ao
mundo<http://us.lrd.yahoo.com/_ylc=X3oDMTJsbXEwY3FmBF9TAzk3NDkwNDM3BF9wAzEEZ3JwS\
WQDMTg5NzM5MQRncnBzcElkAzIxMzcxMTEyNTkEc2VjA25jbW9kBHNsawNtYWlsBHN0aW1lAzEyNDcxM\
TQwOTQ-;_ylg=1/SIG=10ujd6ds6/**http%3A//mail.yahoo.com.br/>
>>
>> Proteção anti-spam
>>
>> Muito mais espaço
>> Yahoo! Barra
>>
>> Instale
grátis<http://us.lrd.yahoo.com/_ylc=X3oDMTJvNDI4MzIxBF9TAzk3NDkwNDM3BF9wAzIEZ3Jw\
SWQDMTg5NzM5MQRncnBzcElkAzIxMzcxMTEyNTkEc2VjA25jbW9kBHNsawN0b29sYmFyBHN0aW1lAzEy\
NDcxMTQwOTQ-;_ylg=1/SIG=111ngvtas/**http%3A//br.toolbar.yahoo.com/>
>>
>> Buscar sites na web
>>
>> Checar seus e-mails .
>> Yahoo! Grupos
>>
>> Crie seu próprio
grupo<http://br.groups.yahoo.com/;_ylc=X3oDMTJvZWtsMzNyBF9TAzk3NDkwNDM3BF9wAzMEZ\
3JwSWQDMTg5NzM5MQRncnBzcElkAzIxMzcxMTEyNTkEc2VjA25jbW9kBHNsawNncm91cHMyBHN0aW1lA\
zEyNDcxMTQwOTQ->
>>
>> A melhor forma de comunicação
>>
>> .
>>
>> __,_._,_
>>
>
[As partes desta mensagem que não continham texto foram removidas]