gpt4 book ai didi

c# - 如何优化此代码以获得更好的可读性?

转载 作者:行者123 更新时间:2023-12-02 18:05:31 25 4
gpt4 key购买 nike

我不是一个好的程序员,对于我正在制作的统一游戏中基于 body 部位的碰撞检测,我最终得到了一个看起来像这样的开关,尽管我尽了最大努力来简化和缩短它:

public void GetCollision(Collision2D col) {

if (attackType == -1) {
if (col.gameObject.name == "Sword") {
hitboxDisable();
} else if (col.gameObject.name == "Player") {
pim.PlayerDamage(5);
}
}

if (col.gameObject.name == "Player_Body") {
switch (attackType) {
case -2: {
pim.PlayerDamage(5);
}
break;
case 0:
if (!pa.playerIsDodging) {
pim.PlayerDamage(5);
} else {
pa.dodgeOnCooldown = false;
pa.resetDodgeRoutine();
hitboxDisable();
}
break;
case 1:
if (!swordSrc.isDefendingLegRight) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
case 2:
if (!swordSrc.isDefendingArmRight) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
case 3:
if (!swordSrc.isDefendingHeadRight) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
case 4:
if (!swordSrc.isDefendingLegLeft) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
case 5:
if (!swordSrc.isDefendingArmLeft) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
case 6:
if (!swordSrc.isDefendingHeadLeft) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
break;
}

if (weaponBlocked == true) {
hitboxDisable();
RandomOpening();
ApplyForce(testvar1, testvar2);
weaponBlocked = false;
}
}
}

如何缩短和优化它以获得更好的可读性?我是 C# 新手,我的编程很少是用 C 语言编写的,我知道有很多方法可以提高 C# 的可读性,但我只是不知道何时/如何应用它们。非常感谢您的建议,我愿意尝试和学习任何东西,如果可能的话,我想尝试避免以这样的大 switch 语句结束。即使只是建议在这里应用什么,我们也会非常感激,一个例子就更好了。

我将攻击类型设置为整数,它们本来可以是字符串,但我选择不这样做,因为据我了解,字符串需要更长的时间来比较。 AttackType 值在交换机中指定攻击的目标位置以及是否/如何阻止它,以及是否被阻止。

最佳答案

案例 1-6 看起来非常相似。您可以使用本地函数

public void GetCollision(Collision2D col) {
// this is a local function which you can only use inside this function
// which can be useful if you have a short repeating pattern inside the function
// and don't need it anywhere else
void _handleHit(bool isDefending) {
if (isDefending) {
pim.PlayerDamage(5);
} else {
weaponBlocked = true;
}
}

[...] // your code

switch (attackType) {
[...] // your code
case 1: _handleHit(!swordSrc.isDefendingLegRight); break;
case 2: _handleHit(!swordSrc.isDefendingArmRight); break;
case 3: _handleHit(!swordSrc.isDefendingHeadRight); break;
...
}
}

您还可以查看 C# 枚举并将 AttackType 替换为可读版本。

// Declaring the enum
public enum AttackType { Direct, LeftArm, ... }

// Then in a switch case you can do:
switch (attackType) {
case AttackType.Direct: ...
case AttackType.LeftArm: ...
}

关于c# - 如何优化此代码以获得更好的可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73370715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com