用更复杂的方式写出这些函数



我正在创建一个简单的刮刮游戏(6张牌)。它甚至不需要包含复杂的逻辑。你最终总是赢的;)

我写的代码工作得很好,但我一直认为它可以更好。我对编码不太熟悉,但我正在一步一步地学习。

你有什么想法可以用更清晰、更复杂的方式写下来吗?

。我试着把每个函数中返回的IF语句分开,这样我就只需要把它写下来一次,但是我没有成功。

提前感谢您的光临。

//set card variables to 0 and when they're scratched, they're changed to 1
var checkCard1:int = 0, checkCard2:int = 0, checkCard3:int = 0, checkCard4:int = 0, checkCard5:int = 0, checkCard6:int = 0;
leaf1.addEventListener(MouseEvent.ROLL_OVER, cardChecked1);
function cardChecked1 (event:MouseEvent):void {
    checkCard1 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}
leaf2.addEventListener(MouseEvent.ROLL_OVER, cardChecked2);
function cardChecked2 (event:MouseEvent):void {
    checkCard2 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}
leaf3.addEventListener(MouseEvent.ROLL_OVER, cardChecked3);
function cardChecked3 (event:MouseEvent):void {
    checkCard3 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}
leaf4.addEventListener(MouseEvent.ROLL_OVER, cardChecked4);
function cardChecked4 (event:MouseEvent):void {
    checkCard4 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}
leaf5.addEventListener(MouseEvent.ROLL_OVER, cardChecked5);
function cardChecked5 (event:MouseEvent):void {
    checkCard5 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}
leaf6.addEventListener(MouseEvent.ROLL_OVER, cardChecked6);
function cardChecked6 (event:MouseEvent):void {
    checkCard6 = 1;
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6  == 1) {
    var myDelay:Timer = new Timer(2000);
    myDelay.addEventListener(TimerEvent.TIMER, showMessage);
    myDelay.start();
    function showMessage(event:TimerEvent):void{
    myDelay.stop();
    gotoAndStop("nowinner");
    }
  }
}

通过将冗余代码移动到函数中来应用DRY (Don't Repeat Yourself)原则。我还将检查变量改为布尔型而不是整型。如果您只将它们用于选中/未选中标志,那么您只需要一个布尔值。

var checkCard1:Boolean = false, checkCard2:Boolean = false, checkCard3:Boolean = false, checkCard4:Boolean = false, checkCard5:Boolean = false, checkCard6:Boolean = false;
function checkAllCards()
{
    if (checkCard1 && checkCard2 && checkCard3 && checkCard4 && checkCard5 && checkCard6)
    {
        var myDelay:Timer = new Timer(2000);
        myDelay.addEventListener(TimerEvent.TIMER, showMessage);
        myDelay.start();
        function showMessage(event:TimerEvent):void{
            myDelay.stop();
            gotoAndStop("nowinner");
        }
    }
}
function cardChecked(event:MouseEvent):void
{
    if (event.currentTarget === leaf1)
    { checkCard1 = true; }
    else if (event.currentTarget === leaf2)
    { checkCard2 = true; }
    else if (event.currentTarget === leaf3)
    { checkCard3 = true; }
    else if (event.currentTarget === leaf4)
    { checkCard4 = true; }
    else if (event.currentTarget === leaf5)
    { checkCard5 = true; }
    else if (event.currentTarget === leaf6)
    { checkCard6 = true; }
    checkAllCards();
}
leaf1.addEventListener(MouseEvent.ROLL_OVER, cardChecked);
leaf2.addEventListener(MouseEvent.ROLL_OVER, cardChecked);
leaf3.addEventListener(MouseEvent.ROLL_OVER, cardChecked);
leaf4.addEventListener(MouseEvent.ROLL_OVER, cardChecked);
leaf5.addEventListener(MouseEvent.ROLL_OVER, cardChecked);
leaf6.addEventListener(MouseEvent.ROLL_OVER, cardChecked);

我没有为此编写测试应用程序,所以如果你遇到问题请告诉我。

最新更新