在继续之前需要循环检查2个条件

Cra*_*son 4 c# loops for-loop conditional-statements

我目前正在开发一个非常基础的"推箱子"游戏.我正在尝试为循环做这个,但似乎无法完成它.我的目的是执行下面的移动代码的一个例子,我觉得我的语法是错误的添加另一个条件,它说"(diamondlist.Count)&(Playerlist.Count).我得到的错误是"运算符'&'不能应用于'bool'和'int'类型的操作数.我试图添加双"&&",这并没有解决它eitheir,任何帮助表示赞赏 - 谢谢:D

    protected override void Update(GameTime gameTime)
    {
        for (int i = 0; i < (diamondlist.Count) & (Playerlist.Count); i++)
        {
            if ((Playerlist[i].Position == diamondlist[i].Position) && kb_old.IsKeyDown(Keys.W))
            {
                if (currentMap.isWalkable(new Point(diamondlist[i].m_position.X, diamondlist[i].m_position.Y - 1)))
                    diamondlist[i].m_position.Y--;
            }
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 11

有一些问题.

  1. 表达式i < (diamondlist.Count) & (Playerlist.Count)评估为:

    (i < diamondlist.Count) & Playerlist.Count
    
    Run Code Online (Sandbox Code Playgroud)

    表达式(i < diamondlist.Count)的第一部分是a bool,但第二部分(Playerlist.Count)是a int.这是抱怨,因为&它不接受两种不同的类型.

  2. 然后,您尝试应用&哪个(对于整数)是一个按位AND运算符.如果两种类型相同,这将起作用,但它可能导致花费不必要的CPU周期,并且通常不在布尔表达式中使用.您可能想要使用&&- 逻辑或条件和运算符.

试试这个:

for (int i = 0; i < diamondlist.Count && i < Playerlist.Count; i++)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 5

简化测试条件又如何呢?

int maxValue = System.Math.Min(diamondlist.Count,Playerlist.Count);
for (int i = 0; i < maxValue; i++)
Run Code Online (Sandbox Code Playgroud)