190 likes | 376 Views
植物 大战 僵尸游戏 demo 分享. Lv-fe 党弘扬. 游戏和面向对象. 工作中的面向对象 ? 网页编程,大片的 dom 操作,成群的面板、按钮、控件 … 谁还愿意给他们起个名字想象他们是否有生命? 非常的抽象。 游戏中的面向对象? Flash? C++? Javascript… 阳光,向日葵,豌豆射手和邪恶的僵尸? 非常容易区分游戏编程中的事物。 非常的容易抽象 练习写 Game 是学习面向对象的一个很好的途径. 准备场景. 注:游戏的设计不是一成不变的,这只是我的一个习惯。 划分坐标,道路 。 设计一些方法: 放置一个物体到一个坐标
E N D
植物大战僵尸游戏demo分享 Lv-fe 党弘扬
游戏和面向对象 • 工作中的面向对象? • 网页编程,大片的dom操作,成群的面板、按钮、控件… • 谁还愿意给他们起个名字想象他们是否有生命? • 非常的抽象。 • 游戏中的面向对象? • Flash? C++? Javascript…阳光,向日葵,豌豆射手和邪恶的僵尸? • 非常容易区分游戏编程中的事物。 • 非常的容易抽象 • 练习写Game是学习面向对象的一个很好的途径
准备场景 • 注:游戏的设计不是一成不变的,这只是我的一个习惯。 • 划分坐标,道路。 • 设计一些方法: • 放置一个物体到一个坐标 • 把一个物体从A坐标移动到B坐标 • B坐标是否可以放东西?上面是否已经有东西了? • 如果移动过程中遇到前面的坐标中有东西如何处理(碰撞)? • 去除一个场景上的物体 • 检查当前的阳光值?甚至负责采集到的阳光?
准备我们的角色(对象)——Sunflower • 创造阳光 • 被虐 • 被种植(登陆到我们的场景中) • 被干掉 • 被吃的过程中会被得越来越sui..
准备我们的角色(对象)——PeaShooter • 能够发射炮弹 • 被虐 • 被种植 • 被干掉 • 被吃的过程中会变得越来越sui….
准备我们的角色(对象)——Zombie • 能够攻击植物 • 被虐 • 来到这个世界上(被上帝种了…) • 被干掉 • 在被豌豆射手的子弹下样子越来越sui…
UML图1 • 注:一种表示类设计和对象之间关系的图谱。 • 实现的方案: • 图http://danghongyang.fe.baidu.com/game/orignal.pdf。
设计模式? • 方案1面临的问题 • 如果我想加一个坚果哥? • 如果我想加一个可以产生阳光的蘑菇? • 如果我想加一个能够奔走杀敌的向日葵? • 如果我想让一个豌豆射手可以产生阳光? • 让豌豆射手边跑边发射炮弹?? • ……疯了……
UML图2 • 实现的方案: • 图http://danghongyang.fe.baidu.com/game/proved.pdf
所有的行为 • 发射子弹的行为 • 移动的行为 • 创造阳光的行为 • 被虐的行为 • 虐人的行为 • 有一副长相(姑且也认为这是一种行为)
行为的任意组合? • 可以发射子弹、创造阳光的向日葵 • 可以移动的豌豆射手 • 甚至变身为向日葵的僵尸…… • 如果行为更多?那么组成也更多。
设计模式? • 设计原则 • 针对接口编程,而不是针对实现编程。 • 多用组合,少用继成
整合所有行为? • 把让每个行为起作用的代码,用同样的接口封装起来。 • 调用的时候就可以不在乎是哪个行为了。
整合所有的雇佣兵? • 所有的植物、僵尸都是你的雇佣兵。 • 你几乎只完成了拖动它或者系统直接生成它到场景中。其他的都是自动的。 • 那么他们可以拥有共同的接口。 • 使用的时候就不在乎究竟是什么类型的雇佣兵,直接让它上场就可以。
工厂方法 • 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 • BehaviorFactory (not real… -_-# why?) • MercenaryFactory
抽象工厂模式 • 比较难懂 • 抽象工厂模式http://danghongyang.fe.baidu.com/game/abstract-factory.pdf • 实际上相当于: • 北京的驴肉火烧、保定的驴肉火烧、天津的驴肉火烧、哈尔滨的、美国的 …等等 • 同样都是驴肉火烧,但是原料不一样 • 皮,肉料,调料 • 只要各个地方的生产这些调料的工厂遵循同样生产原料的接口就可以。 • Canvas中实现一个植物大战僵尸?
Canvas中实现一个植物大战僵尸? • Html实现植物大战僵尸?保定做驴肉火烧? • Canvas实现植物大战僵尸?北京做驴肉火烧? • 上demo -_-# • UML图http://danghongyang.fe.baidu.com/game/abstract-factory-real.pdf • SVG实现一个植物大战僵尸?……
谢谢 • Q&A