2011-09-09 11 views
0

私はシンプルなスクラッチゲームを作成しています(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"); 
    } 
    } 
} 

答えて

2

還元剤コードを機能に移すことによって、DRY(原則を繰り返さないでください)原則を適用してください。また、チェック変数をintの代わりにブール値に変更しました。チェック/チェックされていないフラグに対してのみそれらを使用している場合は、ブール値が必要です。

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); 

これはテスターアプリを作成していないので、問題が発生した場合は教えてください。

+0

ありがとうございました。私は今これを試してみるつもりです。 はどのように動作するかを知らせるために戻ってきます:) – user315400

+0

問題なしで実行しています:)あなたは私により多くの情報を書き換えるために情報/インスピレーションを与えました。再度、感謝します。 – user315400

+1

私は大規模なif文よりも早期の方が好きです。コードをすばやく簡単に読むことができます。 if(!checkCard1 ||!checkCard2 ||!checkCard4 ||!checkCard5 ||!checkCard6)return; ' - それが渡された場合は、良い – divillysausages

関連する問題