【问题标题】:Checking for same values using if statement in actionscript?在actionscript中使用if语句检查相同的值?
【发布时间】:2012-10-22 11:30:39
【问题描述】:

我正在使用 Flixel 开发一款三消式益智游戏,因此我正在检查每一行和每一列以查看在任何给定时间是否有匹配。但是,我有 6 个不同的部分(截至目前)处于活动状态,每个部分都由一个整数标识。鉴于此,我可以通过以下方式检查每一件作品:

public function matchingCheck():void
    {
        if (piecesArray[0][1] == 1 && piecesArray[1][1] == 1 && piecesArray[2][1] == 1) {
            FlxG.log("Yay!");
        }
    }

但是,这相当笨拙,并且基本上会导致我不喜欢重复太多。

至少,我希望能够检查这些数组中的值是否彼此相等,而不必指定它是哪个值。最好的情况是,我希望能够检查一整行是否有三个(或更多)相邻的部分,但我会满足于手动完成这部分。

感谢您的帮助!


编辑:没关系,我的编辑不起作用。只是检查是否piecesArray[2][1] == 1,这让我成为一只悲伤的熊猫。


编辑 2: 我在下面选择了正确的答案 - 这不完全是我使用的,但它确实让我开始了。谢谢Apocalyptic0n3!

【问题讨论】:

    标签: actionscript-3 actionscript flixel


    【解决方案1】:

    这样的事情怎么样,它会告诉你匹配是否存在以及匹配是什么:

    public function checkForMatch():void{
        var rows:int = piecesArray.length;
        for(var i:int=0; i<rows; i++){
            var match:int = checkRow(piecesArray[i]);
            if(match > -1) {
                FlxG.log("Yay you matched " + match);
            }
        }
    }
    
    private function ckeckRow(row:Array):int{
        if(row[0] == row[1] == row[2]){
            return row[0];
        }
        return -1;
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过使用另一个函数来稍微减少该代码

      private function checkValid( arrayOfItemsToCheck:Array, value:* ):Boolean {
          for ( var i:Number = 0; i < arrayOfItemsToCheck.length; i++ ) {
              if ( arrayOfItemsToCheck[i] != value ) {
                  return false;
              }
          }
          return true;
      }
      

      然后你只需在 if 语句中执行此操作:

      if ( checkValid( [ piecesArray[0][1], piecesArray[1][1], piecesArray[2][1] ], 1 ) ) {
                  FlxG.log("Yay!");
      }
      

      不过,这确实假设所有项目都必须等于 1。它仍然是很多代码,但它为每次检查删去了一组“= 1 &&”。

      【讨论】:

      • checkValid 函数是否与我在后期编辑中的代码基本相同,我将它们都等同于 1?不想听起来粗鲁,只是想知道他们是否实现了同样的目标。 :)
      • 当然,它实现了同样的目标。但是,它的可扩展性要高得多。您可以使用该函数来检查类似的内容,并删除大量可重复的代码。我也知道有些人不喜欢这种特定形式的检查(这是一个偏好问题,但有些人不喜欢每行有多个相等的,包括我自己)。请注意,我在您编辑后不到 90 秒就发表了我的评论。我发帖后才看到。
      • 啊,不用担心!是的,这是有道理的。谢谢,将不得不试验和考虑这一点。
      • 是的,我不确定它是否会(并且不想检查)。该表单通常用于将多个属性设置为相同的值。我唯一一次看到它被使用过,真的,是scaleX = scaleY = 1.5
      • 我认为我将尝试对您的原始函数进行的修改之一是循环遍历所有可能的值,只是为了消除设置值的必要性。会尝试并报告!
      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多