决斗者王国篇 1. 战栗的
青眼白龙 2. 无面孔的幻术师 隐形的陷阱 3. 游戏失去了
黑暗大法师 4. 昆虫卡的联合攻击 5. 完全终极状态的大飞蛾 6. 华丽的快乐女郎 7. 海神-海龙王 8. 被夺走的青眼白龙 9. 起死回生!魔术帽子 10. 反击的青眼白龙 11. 友情力量 原始人1、2号 12. 黑色火焰 真红眼黑龙 13. 幻变魔石的陷阱 火焰剑士危险了 14. 漆黑的
决斗 黑暗城堡 15. 划破黑暗 光的护封剑 16. 激战!青眼白龙vs真红眼黑龙 17. 恐怖!召唤活僵尸 18. 右手换盾左手换剑 19. 迷宫的黑暗决斗 20. 三神合体!雷风水魔兽 21. 黑魔龙!黑暗的恶魔王 22. 宿命的对决 游戏vs海马 23. 最强!华丽!青眼究极龙 24. 小精灵繁殖 惊愕的结局 25. 充满泪水的决斗 我们的友情 26. 拯救圭平!海马VS贝卡斯 27. 海马惨败!无敌的卡通世界 28. 决战前夜!贝卡斯的秘密 29. 穷途末路!诱惑的影子 30. 传说中的最强战士!混沌战士 降临 31. 凶恶‧重机械牌组 32. 超越时空!真红眼铁甲黑龙 33. 友情的决赛!游戏VS城之内(上集) 34. 友情的决赛!游戏VS城之内(下集) 35. 最后决斗!游戏VS贝卡斯 36. 无法攻略!?无敌的卡通军团 37. 反击开始!心灵交换 38. 邪眼发动!牺牲祭品 39. 光明与黑暗的融合 黑暗混沌降临 40. 决斗者之王 41. 从美国来的少女 42. 必杀的无影鬼 43. 五巨头的陷阱 战斗怪兽冒险世界 44. 战斗怪兽冒险世界 传说中的勇士-游戏 45. 战斗怪兽冒险世界 龙战士之主 战斗城市前篇 46. 神秘的转学生 御伽龙儿 47. 对决!怪兽龙门骰 48. 游戏苦战 御伽的黑魔骰 49. 奇迹大反攻!召唤黑魔导 50. 亡者的挑战 战栗的恶魔兽 51. 四分五裂的千年积木 52. 遗失的法老王记忆 53. 火焰的热舞决斗 54. 这个城市将成为战斗城市 55. 古鲁斯来袭 目标是真红眼黑龙 56. 激战!战斗城市开幕 57. 反败为胜 连锁破坏 58. 天才絽场 超能力牌组的可怕 59. 勇气的赌注!转动蜘蛛网轮盘 60. 控制黑魔导的魔术师 潘朵拉 61. 灵魂的黑暗魔术 62. 黑魔导的徒弟 黑魔导女孩 63. 复仇的陷阱 疯狂的寄生虫 64. 钢铁骑士 齿轮舰队 65. 马利克出马 神之组合攻击 66. 欧西里斯的天空龙 67. 超越神之牌组 终极无限牌组 68. 看不到的敌人 潜海奇袭2 69. 传说中的渔夫 70. 假面的诅咒 超高层决斗 71. 被封印住的神之卡 72. 团结的力量 73. 欧贝利斯克的巨神兵 74. 牵绊 75. 无情的决斗 游戏VS城之内 76. 传达友情力量的真红眼黑龙 77. 坠入绝望深渊前的倒数 78. 攻击我吧!命运的最后一回合 79. 鬼魅牌组VS幽灵牌组 80. 忍者决斗者 麦克兰姆登场 81. 战斗飞行船出发 82. 天空的第一场决斗 游戏VS闇貘良 83. 呼唤死神的威加盘 84. 划破黑暗!神之卡的一击 85. 隐藏的力量 神之卡的秘密 86. 城之内VS陷阱卡 87. 继承的战斗怪兽卡 电子机械人反击 88. 召唤太阳神的翼神龙 89. 太阳神的愤怒 站起来!城之内 90. 孔雀舞VS马利克 黑暗的决斗 91. 夺走神之卡 92. 古代神官文字之谜 93. 海马VS第八个决斗者 94. 改变未来的一击 95. 化暗为明的伊修达尔家真相 96. 马利克VS貘良 97. 一回合的抹杀 乃亚篇 98. 未知的挑战者 巨大机动要塞浮现 99. 牌组领导者 深海的战士 100. 恐怖的再生战术 101. 反击的彩虹拱门 102. 冰上的决斗 杏子遭到攻击了 103. 闪耀吧 贤者的宝石 104. 牌组领导者 大法官的裁决 105. 胜利的赌注 106. 男子汉的魄力 本田壮烈牺牲 107. 圣女强弩 三位一体的攻击 108. 圭平遭受攻击 海马对抗生化战士 109. 来自宇宙的攻击 卫星巨炮 110. 深奥之谜 乃亚的真实身分 111. 五巨头的反击 112. 被攻击的城之内 迈向胜利的关键决斗 113. 打倒五头神龙 114. 乃亚VS濑人 创造天地的决斗 115. 牌组领导者 奇迹的方舟 116. 拯救圭平 命运的第七回合 117. 承接牌组 游戏VS乃亚 118. 生命值10000 VS 100 119. 海马家的黑暗 120. 黑暗大法师 121. 脱逃 p.s. 因为字数问题,只可以俾住咁多。 2010-02-22 16:15:06 补充: 战斗城市后篇 122.决战之地 人工岛 123.交替决斗 124.各自希望对决者 125.黑暗的准冠军赛 城之内VS马利克 126.地狱诗人赫波艾 127.反败为胜 闪电战神 128.城之内之死 129.天空斗戏场 游戏VS海马 130.召唤神的三骑士 131.激战!神VS神 132.继承!宿命的决斗 133.朋友之间的誓言 真红眼黑龙 134.击碎憎恨 相信友情 135.火焰的平凡之路 城之内VS海马 136.青眼白龙VS青眼白龙 137.迈向成为真正决斗者的路 138.最后决战 游戏VS马利克 139.发动恶魔的圣殿的威力 140.不死之壁 神之史来姆 141.愤怒的欧贝利斯克 142.终结战斗城市 143.燃烧的岛屿 2010-02-22 16:18:37 补充: 杜马篇 144.始末 145.全新的黑暗鼓动 146.奥雷卡尔克斯的结界 147.无名龙 迪玛欧斯 148.来自贝卡斯的邀请函 149.卡通世界的恶梦 150.觉醒吧!克力迪斯 151.预期不到的敌人 152.坠入黑暗的孔雀舞 153.觉醒吧!第三条龙 154.海尔摩斯的奇迹 155.目标锁定无名的法老王 156.游戏VS拉费尔 铜墙铁壁的牌组 157.杜马的真相 158.游戏内心的黑暗 迪玛欧斯消灭 159.被撕裂的灵魂 160.暴走特快车决斗 161.提升战力的牌组 羽蛾与龙崎 162.迪玛欧斯无法发动 163.对决!两个游戏 2010-02-22 16:18:49 补充: 164.奥雷卡尔克斯战士 165.瓦龙出动!谜样的盔甲牌组 166.复仇的亚曼尔达 大空中决斗 167.天空的要塞 决斗尖塔 168.潜入的达兹影子 169.激斗!城之内VS瓦龙 170.全能盔甲万有引力 171.产生共鸣的灵魂 172.激烈决斗的结果 173.苦涩的胜利 174.命运的决斗 游戏VS拉费尔 175.不死身 守护者提斯塞斯 176.打击心灵的黑暗 177.前往决战地 达兹VS游戏&海马 178.亚特兰提斯的悲剧 179.被囚禁的反射镜骑士 180.奥雷卡尔克斯的三重结界 181.复活吧!传说的三骑士 182.攻击力无限大蛇神凯 183.神与神的战斗 184.踏上光明之路 2010-02-22 16:19:31 补充: 海马杯篇 185.海马集团大赛开幕 186.开始行动的阴谋 187.城之内VS面具人洛克 188.梦幻的古代龙 189.热斗 蕾贝卡VS薇薇安 190.城之内VS奇古 华丽的决斗 191.抹杀战斗怪兽的女神 192.蕾贝卡VS雷恩 193.童话世界的雷恩 194.海马闯入!最后的决赛 195.战斗女神VS青眼白龙 196.决斗王决定战 游戏VS雷恩 197.史特龙贝尔克的金色城堡 198.海马集团大赛终结 2010-02-22 16:20:43 补充: 王之记忆篇 199.终极的游戏 200.貘良了出动了 201.打开的记忆之门 202.盗墓贼貘良了来了 203.玛哈特的决心 204.死战!玛哈特VS貘良了 205.蓝眼睛的奇莎拉 206.千年法器诞生的秘密 207.被倒回的时间 208.法老王还活着 209.死灵村 210.盗贼貘良了的强盛时期 211.崭新的舞台 212.黑暗大神官 213.邪神复活倒数计时 214.青眼白龙 215.大邪神佐克复活 216.传说的守护神 艾克索迪亚 217.召唤!三幻神 218.佐克VS青眼之究极龙 219.在王的名下 220.最后的试炼 221.命运的最后决斗 222.打倒三幻神 223.强悍的心 温柔的心 224.走向光明 画下句点
真的! 现在那们竞争的社会 有的当铺都挂羊头卖狗肉 还没借都讲得很好听 借了之后 难商量 难沟通 被绑住的感觉 其实我也遇到很多那种当铺 自从我找到了 中坜仁宝当铺 之后 那种感觉完全不见 觉得 仁宝当铺 跟那些当铺 完全不同 完全不必看人脸色 就跟去银行的感觉一样 服务态度好 以客至上 详细解说 不会有被骗的感觉 店长 人非常亲切 好商量 真心推荐 中坜仁宝当铺 本人亲身经历 也可以上网搜寻看看 风评超好 超多人推荐 中坜YKK对面 非常好找 03-4520077
这是个挺有趣的问题,我们可以一起来分析下:
1.这里面只有两个类,武器类和怪兽类;而动作只有一个,打。
2.面向对象的思想是为类分配职责,那么打这个动作到底分配给谁?
很明显应该分配给怪兽类,因为打这个动作涉及的大部分数据都是怪兽类包含的,从常识上来讲分配给武器类感觉怪怪的...
3.从上面可以想象到会出现这样的情况monster.hit(otherMonster),这里monster是打,otherMonster是被打。hit方法里面需要将otherMonster的信息获取出来,然后计算打的过程...这样会把otherMonster的数据封装破坏掉,如果扩展otherMonster,显然你必需要在hit方法里判断otherMonster是哪种类型。但是monster.hit(otherMonster)又是符合对象的思维的。那么问题出在哪里?
问题出在打是一个动词,打这个方法分配给了一个对象,但作用的是另一个对象,因此而破坏了数据封装。如果打分配给一个对象,同时作用的是这个对象,那么问题就解决了。
怎样把打分配给一个对象,同时作用的是这个对象呢?答案是把打转换成被打,于是就成了otherMonster.hit(),在monster需要去打otherMonster时,调用otherMonster.hit()就可以了。
4.武器类还没有被引入进来,明显武器不会自动攻击,他必须装备在monster上,我们可以把weapon作为monster的成员。
5.武器类可以被使用在打这个动作上,于是我们为hit方法增加武器参数,于是就变成otherMonster.hit(weapon),这个方法是在monster内部调用的,weapon也是monster的成员,没有破坏封装性。
6.至此,你提的这个问题就是这样了...
class Monster{
private Weapon weapon
public void hit(Weapon weapon){
//dosometing.
}
public Weapon getWeapon(){
return weapon
}
public void setWeapon(Weapon weapon){
this.weapon = weapon
}
}
是不是感觉怪怪的...我们可以继续来探讨这个问题:
为什么感觉怪怪的?是因为这个问题太简化了,简化到我们并不知道Monster被打之后到底发生什么。
感觉这个很像个游戏,大部分游戏都是基于hitpoint(血量)的,为了使这个问题带感一些,我们给Monster一个int类型的hitPoint。
同时给武器类赋予一个attackPoint,在Monster被打的时候扣除attackPoint数量的hitPoint。
那么问题来了,hit方法里需要获取Weapon中的attackPoint,这又会把Weapon的数据封装破坏掉...
为此我们需要给Monster一个直接扣除hitPoint的方法damage(int attackPoint),让Weapon能够调用damage方法把自身的attackPoint传递进来。
Weapon本身我们可以分配一个attack(Monster monster)方法来给Monster把自身传递进来,于是程序就变成了:
class Monster{
private Weapon weapon
private int hitPoint
public void hit(Weapon weapon){
weapon.attack(this)
}
public void damage(int attackPoint){
this.hitPoint -= attackPoint
}
public Weapon getWeapon(){
return weapon
}
public void setWeapon(Weapon weapon){
this.weapon = weapon
}
}
class Weapon{
private int attackPoint
public void attack(Monster monster){
monster.damage(attackPoint)
}
}
也许有人会问,hit里面调用weapon.attack,attack里面又调用monster.damage,那还不如在hit里直接获取weapon的attackPoint,然后直接扣除hitPoint。
为什么要这么麻烦呢?实际上这里Weapon是一个策略(Strategy模式),由策略来决定对对象到底采取什么样的作用。这里感觉麻烦也是因为问题太简单了。
再带感一点,我们参考网游的做法,Monster本身有一定的躲避和格挡率,同时某些Weapon可能会有暴击率:
此时我们需要在hit方法里先计算是否躲避或者格挡,如果都不成功,才调用weapon.attack(this).在attack方法里,需要先计算是否暴击,如果暴击,则把attackPoint乘以2。于是又变成了
class Monster{
private Weapon weapon
private int hitPoint
private int dodge//100%比例
private int block//100%比例
public void hit(Weapon weapon){
if (isDodge()){
return
}
if (isBlock){
return
}
weapon.attack(this)
}
public void damage(int attackPoint){
this.hitPoint -= attackPoint
}
public boolean isDodge(){
//COMPUTE IS DODGE?
}
public boolean isBlock(){
//COMPUTE IS BLOCK?
}
public Weapon getWeapon(){
return weapon
}
public void setWeapon(Weapon weapon){
this.weapon = weapon
}
}
class Weapon{
private int attackPoint
private int critical//100%比例
public void attack(Monster monster){
int actualAttackPoint = isCritical()?attackPoint*2:attackPoint
monster.damage(actualAttackPoint)
}
public boolean isCritical(){
//COMPUTE IS CRITICAL
}
}
这样就不觉得麻烦了...
最后应该把monster抽象成接口,因为可能不只是monster可以被武器打哦
你还可以后面再加入怎么判断Monster挂了,通过观察者模式来通知打人者,还有其他各种各样带感的东西。
祝你好运!
评论列表(0条)