在java编程中会经常遇到多个对象及多个方法杂糅在一起的问题,这里以自制游戏Demo举例:
一. 需求分析:
1.设计一个勇者斗恶龙游戏,具有游戏注册、登录、查询、退出游戏功能;
2.游戏中主要有勇者,武器,怪物三种实体类;
3.勇者有AD,坦克,法师,辅助四种职业类型,各种职业有各自固定武器;
4.武器有弓,剑,魔法,十字架四种,同样武器也有各自的属性;
5.恶龙主要有:水龙,火龙,土龙三种,也有各自的属性;
6.玩家自选3个勇者,三种龙随机出现;勇者先攻击龙,龙后攻击勇者;轮番作战,直到一方阵亡为止;输出获胜者。
二. 设计流程:
类图分析(如下图所示):------------数据线:抽象类和实体类的分析和创建------Role--Dragon+Fighter------Weapon--Bow+Sword+Magic+Cross
1.根据恶龙和勇者的共同属性设定抽象类Role,共同属性有:name,Health,alive行为有:getHurt和attack;
2.龙类和勇者类均继承于(泛化Generalization了)角色类(角色类的泛型是),且为实体类;
3.根据弓,魔法,剑的共同属性设定抽象类Weapon,共同属性有:wear,damage,name,行为有:攻击和维修
4.bow,magic,sord均继承于武器类,且为实体类;
5.接口IFix实现Realization了武器类的fix行为;
依赖Dependency于武器类的实现;
流程图分析(如下图所示):--------操作线-----------游戏登录注册+游戏介绍+自选3个角色+对战模式(勇者闯关模式,先对战水龙,后对战土龙,最后对战火龙)+退出游戏
三.具体功能实现:
数据线:抽象类和实体类的封装
1. 抽象类角色的封装:-------Role----角色类(姓名,生命值,存活状态)
2.勇者类实体类的封装与继承:-------Fighter-----剑士,弓手,法师(调用武器的攻击方法)
3.恶龙类实体类封装与继承---------Dragon(多了格挡技能)
4.抽象类武器封装-----Weapon-----弓,剑,魔法的持久度和伤害都是固有属性;
5.实体类武器-------武器类的继承,多态,接口-----均继承于武器类,但攻击方式各有不同;均继承于接口,但维修方式各有不同
创建维修接口:
弓--------攻击方式:箭矢攻击-----维修方式:补充箭矢
剑-------攻击方式:刺击--------维修方式:重铸
魔法-------攻击方式:法力攻击------维修方式:补魔
操作线:
具体玩法的封装--------游戏登录注册+游戏介绍+对战模式
登录注册+玩法介绍:
角色创建:自由选择3个勇士,龙固定
对战模式:勇者一起攻击龙,龙随机攻击勇者,直到一方全部阵亡,判断输赢,结束游戏。
这里设定getAlive默认是1存活,0是阵亡;end=0游戏继续;end=1,勇者获胜;end=-1,龙获胜。
游戏主界面: