Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 我是否应该避免使用;开关";?_Loops_Switch Statement - Fatal编程技术网

Loops 我是否应该避免使用;开关";?

Loops 我是否应该避免使用;开关";?,loops,switch-statement,Loops,Switch Statement,在这个例子中,我正在做一个2D游戏。在这个游戏中,我需要一些导弹类型从天上掉下来作为一个轰炸机。每种类型的导弹,在与我的角色碰撞时,伤害的程度取决于导弹类型 我该怎么办 选项1:创建一个单类导弹,其中包含一个具有自己导弹类型的变量,在碰撞检查循环中,我使用开关来确定损坏程度 选项2:创建几个类,然后进行相同数量的导弹碰撞检查循环,避免使用开关,知道每个循环中的损坏情况 选项3:创建一个包含所有导弹的单一检查循环,并使用heritance在导弹之间进行区分 选项4:不要保存导弹类型,而是用它们的

在这个例子中,我正在做一个2D游戏。在这个游戏中,我需要一些导弹类型从天上掉下来作为一个轰炸机。每种类型的导弹,在与我的角色碰撞时,伤害的程度取决于导弹类型

我该怎么办

  • 选项1:创建一个单类导弹,其中包含一个具有自己导弹类型的变量,在碰撞检查循环中,我使用开关来确定损坏程度

  • 选项2:创建几个类,然后进行相同数量的导弹碰撞检查循环,避免使用开关,知道每个循环中的损坏情况

  • 选项3:创建一个包含所有导弹的单一检查循环,并使用heritance在导弹之间进行区分

  • 选项4:不要保存导弹类型,而是用它们的伤害和其他许多变量初始化导弹,这些变量对于相同的导弹类型是相同的(浪费内存)

如果选项3不存在,选项1或2


谢谢

这真的取决于每种导弹类型的不同程度以及你对未来的计划。如果所有类型都存在,你不打算添加更多类型,不同类型之间唯一不同的是它们的伤害量,我会选择开关。然而,为了便于扩展以及为每种导弹类型建模不同的行为(不仅仅是损伤量),我将为每种类型创建一个基类并继承一个新类,允许您重载方法,如
getDamage()
updateMovement())
针对每种导弹类型。

为每种
导弹
子类提供一种计算伤害的方法,采用它需要的任何参数。给每个目标一个
applyDamage
(或只是
damage
)方法,对目标施加指定数量的伤害

更喜欢多态性而不是开关


更喜欢将方法分解为一小部分连贯的任务。

嗯,选项3是非常可行的

你有一个导弹类,它有伤害变量。 所有其他类型的导弹都扩展了这一级别。因此,您可以根据需要添加其他信息字段


所以当你在所有导弹类中循环时。您可以将它们转换为(导弹),然后评估该变量。

为什么不可以?这是语言的一部分。只是要小心,不要忘记中断。如果类型之间只有少数几个值不同,而行为在其他方面是相同的,我会选择选项4,如果它使代码更简单。记住在子类实例时使用instanceof。