美文网首页Java微服务架构和实践
怎么可能,23种设计模式居然被清华大佬用一个坦克大战就讲明白了

怎么可能,23种设计模式居然被清华大佬用一个坦克大战就讲明白了

作者: 该用户已秃头 | 来源:发表于2020-05-09 16:09 被阅读0次

    坦克大战项目

    坦克大战项目通过一个联机对战游戏的手把手,一行一行的开发过程,让你精准的理解和运用JavaSE,DesignPatterns , TCP/IP, 多线程, NIO等基础知识。真正理解项目的开发过程,并体会项目开发的难点和痛点。 请记住,只有做项目,才是对所学的真正检验。

    一、需求分析

    坦克大战中有我方坦克和敌方坦克,我方坦克有一个,敌方坦克有多个。坦克可以移动,也可以发射子弹。我方坦克可以通过上下左右键来控制方向,敌方坦克自动改变方向。在游戏窗体中有障碍物,包括砖墙、钢墙、水墙和草地。坦克可以穿过草地,在遇到其他障碍物时,我方坦克停止移动,并通过操纵改变方向再移动,敌方坦克遇到其他障碍物时可以自动的改变方向。我方坦克有三次生命值,当与敌方坦克或敌方子弹相撞时,生命值减一, 当生命值是零时,敌方胜利,游戏结束。敌方坦克的生命值为一,当敌方坦克与我方坦克或者我方子弹相遇就消失,同时我方子弹也消失,并产生爆炸。当我方坦克把敌方坦克消灭完后,我方胜利,游戏结束。敌方子弹或我方子弹击中老巢,游戏结束。

    二、程序设计

    采用面向对象的设计方法,项目中有以下类:

    主窗体: GameForm, 游戏的主窗体。

    坦克:父类坦克(Tank)、 我方坦克(MyTank)、 敌方坦克( EnemyTank)。

    墙:父类墙(Wall)、砖墙(BrickWall)、刚墙( SteelWall)、水墙( WaterWall)、

    草地(MeadoeWall)。

    子弹:父类子弹(Bullet)、 我方子弹(MyBullet)、敌方坦克(EnemyBullet)。

    老巢: Home

    火花: Spark, 子弹与墙碰撞产生火花。

    爆炸: Blast, 子弹与坦克和老巢碰撞产生爆炸。

    坦克大战项目目录

    new出一个窗口

    设定标题栏内容

    TankFrame从Frame继承+显示

    认识paint方法重写

    学习graphics 类画图

    学习repaint 方法

    实现MyKeyListener对键盘作出响应

    MyKeyListener从KeyAdapter继承

    取得具体按键信息

    根据具体按键调整坦克位置持有对方引用

    抽象出坦克类学习使用枚举类型记录键盘状态

    把监听处理类MyKeyListener放到TankFrame内部

    用匿名内部类处理窗口关闭

    根据按键状态改变坦克方向

    根据坦克方向移动位置

    能停能动

    test包关于classloader的知识

    将坦克换成图片版

    画出一颗子弹让子弹飞- -会儿

    按下ctrl键主战坦克打出一发炮弹

    打出多发子弹

    子弹从坦克中心位置打出

    子弹消亡(飞出游戏区)

    定义rectangle属性不用每次都new

    炮弹new出来自动加入容器死掉后自动去除

    分离玩家和机器人对边界进行不同的处理

    用双缓冲消除闪烁

    加一堆敌人坦克

    做碰撞检测

    显示爆炸

    加入声音

    让敌人坦克更加智能

    对坦克和子弹加入Group属性,

    不同的Group可以互相撞击

    测试Properties类的使用

    建立PropertyMgr类

    MV分开Model View分离

    GameModel改成单例模式

    对于碰撞的处理

    Class. forName().newInstance()

    抽象出游戏物体的父类

    把GameModel中的各种不同物体的List合成为一个

    List <GameObject>

    完善责任链模式

    加入墙

    按键切换发射策略

    实现暂停功能

    实现存盘功能

    使用Junit测试服务器loop

    去掉敌人的坦克(机器控制的坦克)

    处理接收到的消息

    player新的构造方法

    让后来人能看到先加入者

    加入坦克方向改变的消息

    重构代码

    收到改变坦克方向消息时让player的moving为true

    发送主战坦克停止的消息

    发送主战坦克开始移动的消息(方向没变)

    加入子弹和Player的撞击逻辑

    把主战坦克也加入到List中

    完成网络版

    坦克大战项目——架构视频

    转发+关注后私信我【学习】领取设计模式、坦克大战学习资料

    坦克大战项目教程笔记

    转发+关注后私信我【学习】领取设计模式、坦克大战学习资料

    抽丝剥茧设计模式

    在这些模式中,我并没有止步于理论讲解(那其实非常简单),而是坚持用代码说话,用实际能用的上的代码说话。

    比如在工厂模式中,我直接讲到SpringIOC原理。

    比如在动态代理模式和Visitor模式中,我直接讲到ASM。

    .........

    创建型

    1. Factory Method(工厂方法)

    2. Abstract Factory(抽象工厂)

    3. Builder(建造者)

    4. Prototype(原型)

    5. Singleton(单例)

    结构型

    6. Adapter Class/Object(适配器)

    7. Bridge(桥接)

    8. Composite(组合)

    9. Decorator(装饰)

    10. Facade(外观)

    11. Flyweight(享元)

    12. Proxy(代理)

    行为型

    13. Interpreter(解释器)

    14. Template Method(模板方法)

    15. Chain of Responsibility(责任链)

    16. Command(命令)

    17. Iterator(迭代器)

    18. Mediator(中介者)

    19. Memento(备忘录)

    20. Observer(观察者)

    21. State(状态)

    22. Strategy(策略)

    23. Visitor(访问者)

    23种设计模式笔记文档

    23种设计模式视频

    转发+关注后私信我【学习】领取设计模式、坦克大战学习资料

    从上面可以很清晰的看到坦克大战和23种设计模式的文档与视频,小编都为大家准备好了,感兴趣的朋友可以帮忙转发文章后,关注私信回复【学习】来免费获取

    相关文章

      网友评论

        本文标题:怎么可能,23种设计模式居然被清华大佬用一个坦克大战就讲明白了

        本文链接:https://www.haomeiwen.com/subject/ttwknhtx.html