gpt4 book ai didi

c# - 如何在没有多个 if 语句的情况下检查条件?

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:39 25 4
gpt4 key购买 nike

我正在 Xamarin 中开发一款适用于 Android 的游戏,但我有两个特别枯燥的部分(不要重复自己)。

第一部分是当我想更改配乐(音频播放)或背景时,我根据级别为同一配乐设置了三种不同的音高,对于背景 Canvas 交替的背景也是如此。

对于这些方法,条件基于等于玩家所在级别的整数级别。

示例代码

private void SetBackgrounds()
{
if (level == 5)
{
gameAreaCanvas.SetBackgroundResource(Resource.Drawable.LevelUpOneBackground);

}
else if (level == 10)
{
gameAreaCanvas.SetBackgroundResource(Resource.Drawable.LevelUpTwoBackground);

}
else if (level == 15)
{
gameAreaCanvas.SetBackgroundResource(Resource.Drawable.LevelUpThreeBackground);

}
}

代码的不同部分也是如此,其中很多基于整数值,即级别。每次玩家前进时,级别整数递增 1,然后 Activity 具有检查整数级别的方法。代码可以工作,但显然效率很低,因为有很多重复的代码,稍作调整。

例如一个关卡看起来像这样。

        if(level == 1) {

levelDisplay.Text = "LEVEL 1";
timer = new Timer();
timer.Interval = 2000; /// DIFFERENT
timer.Enabled = true;
timer.Elapsed += Level1; /// DIFFERENT
timer.Start();
}
///LEVEL 2
if (level == 2)
{
levelDisplay.Text = "LEVEL 2";
timer = new Timer();
timer.Interval = 2000; /// DIFFERENT
timer.Enabled = true;
timer.Elapsed += Level2; /// DIFFERENT
timer.Start();
}

有没有办法让这段代码不那么枯燥?感谢输入。

最佳答案

第一部分可以浓缩如下:

canvas.SetBackgroundResource( level == 5? Resource.Drawable.LevelUpOneBackground : 
level = 10? Resource.Drawable.LevelUpTwoBackground :
Resource.Drawable.LevelUpThreeBackground );

或者,更好的是,创建一个字典,将关卡编号映射到背景,这样您就可以拥有:

gameAreaCanvas.SetBackgroundResource( resourcesFromLevels[level] );

简化第二部分有点复杂。

在这种情况下,一种可能的解决方案是继承。

您创建一个新的抽象 class Level 来表示您的游戏级别,并为每个特定级别创建该类的子类。因此,您将拥有 class Level1: Levelclass Level2: Level 等。基类有一个 Setup() 方法,该方法通过调用自身的可覆盖项来工作,每个可覆盖项都有一个默认实现,但 Level 的后代可以提供自己的实现。

此外,并非所有事情都必须由可覆盖对象处理。 Level 类可以接受一些构造函数参数,例如关卡名称,然后每个后代都可以向基类提供正确的关卡名称。所以,它看起来像这样:

class Level
{
readonly string levelName;

Level( String levelName )
{
this.levelName = levelName;
}

void Setup()
{
levelDisplay.Text = levelName;
SetupTimer();
}

virtual void SetupTimer()
{
//Default implementation
}
}

class Level1: Level
{
Level1() : Level( "LEVEL 1" )
{
}

override void SetupTimer()
{
//Level1 implementation
}
}

关于c# - 如何在没有多个 if 语句的情况下检查条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44377500/

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