面向对象实战第一讲

面向对象实战第一讲

任何东西都可以看作是对象,比如一个RPG游戏,你所看到的一个NPC就是一个对象,你和他的对话往往可以看到一个菜单,这个菜单就是你在点他的时候触发的该对象的一个方法,在生活中我们称之为行为.这个菜单告诉你这个NPC能为你提供什么样的服务,而服务列表中的每个选项都是方法.有些NPC只是个摆设,他一辈子只说同样一句话,而不会触发什么特定的任务,所以他们的方法其实只有一个,就是 echo 出一句话.那我们定义一个方法function npc_speak(str){****},后台管理员只要在用到这个NPC的时候把 str 给npc_speak方法去处理就行了.

而玩家则比较复杂一点,但基本玩家类就一个,但有很多属性,比如玩家的等级、职业、属性点情况,而这些数据都是类里的一个个属性,通过一些方法去实现显示(游戏里的状态栏)、更改(比如说升级)。除了这些属性以外还有些方法,比如移动、攻击、防御、休息、魔法、逃跑之类的,都是通过一些方法来实现的。

游戏中的怪,属性及基本方法可能没有玩家多,他不会休息、升级,但是他有自己的行为模式,比如在固定范围内移动,A地图的怪不可能移动到B地图去,所以定义这些行为模式还是有点复杂了。

我这里只简单介绍一些用法,如果大家有兴趣搞个自己的小游戏的话可以反复联系。但是PHP毕竟是WEB脚本,所以只能做做文字类的游戏。想做个简单的有基本图形的游戏,可以选择VB或者C#,因为两者开发速度相当快。

首先定义一个obj类,这个类是所有元素的基类

[复制到剪切板]
CODE:
class obj{
  
    private 
$hp;
    private 
$attack;
 
    function 
setHp($hp){
        
$this->hp $hp;
    }
 
    function 
getHp(){
        return 
$this->hp;
    }
 
    function 
setAttack($attack){
        
$this->attack $attack;
    }
 
    function 
getAttack(){
        return 
$this->attack;
    }
 
    
/*
    这里我们可以定义一些攻击的算法,这个就是自己搞搞脑子,我就不写了,写出来太多初学者不好学
    */
 
} ;

然后定义一个玩家类,继承了obj基类.因为是继承关系,在player类中可以直接用$this来使用obj类中的方法和属性,但记住,继承类只能使用基类中的public和protected限定的方法和属性.

[复制到剪切板]
CODE:
class player extends obj{
 
    function 
setPlayer($hp,$attack){
        
$this->setHp($hp);
        
$this->setAttack($attack);
    }
 
} ;


接下来定义一个怪物类,同样继承了obj基类

[复制到剪切板]
CODE:
class monster extends obj{
 
    function 
setMonster($hp,$attack){
        
$this->setHp($hp);
        
$this->setAttack($attack);
    }
 
} ;


最后,我们就要去实现他咯~

[复制到剪切板]
CODE:
//这里我们实例化了一个玩家--剑士,并给了他属性,500点HP和100的攻击力
$sword_man = new player();
$sword_man->setPlayer(500,100);
echo 
"一个剑士出现了,他拥有".$sword_man->getHp()."点HP,".$sword_man->getAttack()."点攻击力";
 
 
//这里我们实例化了一个怪物--幽灵,并给了它属性,200点HP和20的攻击力
$ghost = new monster();
$ghost->setMonster(200,20);
echo 
"一个幽灵出现了,它拥有".$ghost->getHp()."点HP,".$ghost->getAttack()."点攻击力";
 
//然后通过攻击、防御等等的算法来实现他们之间的PK,这里我就不详细介绍了 ;

这样一个简单的RPG雏形就出来了。其实游戏服务器端编写还是相当简单的,无非是体系结构清晰的一套套自定义算法。

如果我的帖子对您有帮助,可以给我留留言,关注我的帖子或者关注我的BLOG,http://www.luoge.net

顶下,,面向对象的编程技术总是优越于面向过程。
我的Blog

顶下
只有拼搏,努力和进取,自己的未来才会更美好

写的不错。、

写得不错!

提出问题:

1。PHP真得可以实现完全的面向对象编程吗?

PHP中的继承不像java中那样可以多层继承,也就是说儿子继承父亲,父亲继承爷爷……,而PHP只能实现一层继承;还有PHP的构造函数也不像java得那么灵活,需要手写才能调用父类的构造函数。

2。PHP的优势是什么?

开发速度。最近一直在研究怎样将PHP的开发项目实现对象化,可是越对象化越复杂,面向对象化真的是PHP的强项吗?


自己也很迷茫,希望高手指点一下!

顶,学习