2011-10-28 6 views
1

キャッシュレジスターシミュレーションゲームを作成しようとしていますが、私は、正しい変更が顧客に提供されているかどうかを確認するために使用している条件文ボタンが押されているかどうかを示します。このゲームでは、ユーザーは、販売額と顧客が支払う金額を見ることができます。この情報を使用して、キャッシュ・ドロワー・スロットをクリックする必要があります。これにより、changeCountという変数が、選択した通貨単位の値だけ増加します。キャッシャーゲーム - AS3で更新された変数を静的変数に一致させる

私は、changeCount = payment-saleとconfirmボタンが押された場合、次のフレームにifステートメントを使用しています。ボタンをチェックするには、ブール値を使って押されているかどうかを確認しています。なんらかの理由で、if文が動作するためのchangeCountの更新値を登録していません。なぜ誰がこのことになるのか知っていますか?トレース(changeCount)で値をトレースすると私が望む値を返します。 ソースコードは、下に貼り付けられます:

package 
    { 


public class CashierMain extends MovieClip 
{ 
    private var confirmBtn:ConfirmButton; 
    private var pennyBtn:PennyButton; 
    private var dimeBtn:DimeButton; 
    private var nickelBtn:NickelButton; 
    private var quarterBtn:QuarterButton; 
    private var oneBtn:OneButton; 
    private var fiveBtn:FiveButton; 
    private var tenBtn:TenButton; 
    private var twentyBtn:TwentyButton; 
    private var changeCount:Number; 
    private var payment:int; 
    private var sale:Number; 
    private var clicked:Boolean; 
    private var total:Number; 

    public function startCashierMain() 
    { 
     //instantiating change count 
     changeCount = 0; 
     clicked = false; 
     sale = Math.random() * 50; 
     payment = Math.random() * 20 + sale; 
     total = payment - sale; 
     showPayment(); 
     showChangeCount(); 
     showSale(); 
     showTotal(); 
     //creating visuals 
     confirmBtn = new ConfirmButton(); 
     confirmBtn.x = 450; 
     confirmBtn.y = 85; 
     addChild(confirmBtn); 
     pennyBtn = new PennyButton(); 
     pennyBtn.x = 100; 
     pennyBtn.y = 50; 
     addChild(pennyBtn); 
     nickelBtn = new NickelButton(); 
     nickelBtn.x = 175; 
     nickelBtn.y = 50; 
     addChild(nickelBtn); 
     dimeBtn = new DimeButton(); 
     dimeBtn.x = 250; 
     dimeBtn.y = 50; 
     addChild(dimeBtn); 
     quarterBtn = new QuarterButton(); 
     quarterBtn.x = 315; 
     quarterBtn.y = 50; 
     addChild(quarterBtn); 
     oneBtn = new OneButton(); 
     oneBtn.x = 75; 
     oneBtn.y = 200; 
     addChild(oneBtn); 
     fiveBtn = new FiveButton(); 
     fiveBtn.x = 200; 
     fiveBtn.y = 200; 
     addChild(fiveBtn); 
     tenBtn = new TenButton(); 
     tenBtn.x = 325; 
     tenBtn.y = 200; 
     addChild(tenBtn); 
     twentyBtn = new TwentyButton(); 
     twentyBtn.x = 450; 
     twentyBtn.y = 200; 
     addChild(twentyBtn); 

     //Listeners 
     pennyBtn.addEventListener(MouseEvent.CLICK,clickPenny); 
     nickelBtn.addEventListener(MouseEvent.CLICK,clickNickel); 
     dimeBtn.addEventListener(MouseEvent.CLICK,clickDime); 
     quarterBtn.addEventListener(MouseEvent.CLICK,clickQuarter); 
     oneBtn.addEventListener(MouseEvent.CLICK,clickOne); 
     fiveBtn.addEventListener(MouseEvent.CLICK,clickFive); 
     tenBtn.addEventListener(MouseEvent.CLICK,clickTen); 
     twentyBtn.addEventListener(MouseEvent.CLICK,clickTwenty); 
     confirmBtn.addEventListener(MouseEvent.CLICK, clickConfirm); 





    } 


    public function clickPenny(event:MouseEvent) 
    { 
     changeCount += .01; 
     showChangeCount(); 
    } 
    public function clickNickel(event:MouseEvent) 
    { 
     changeCount += .05; 
     showChangeCount(); 
    } 
    public function clickDime(event:MouseEvent) 
    { 
     changeCount += .10; 
     showChangeCount(); 
    } 
    public function clickQuarter(event:MouseEvent) 
    { 
     changeCount += .25; 
     showChangeCount(); 
    } 
    public function clickOne(event:MouseEvent) 
    { 
     changeCount += 1; 
     showChangeCount(); 

    } 
    public function clickFive(event:MouseEvent) 
    { 
     changeCount += 5; 
     showChangeCount(); 
    } 
    public function clickTen(event:MouseEvent) 
    { 
     changeCount += 10; 
     showChangeCount(); 
    } 
    public function clickTwenty(event:MouseEvent) 
    { 
     changeCount += 20; 
     showChangeCount(); 
    } 

    public function showChangeCount() 
    { 
     showChange.text = String("Change Tendered $ " + changeCount.toFixed(2)); 


    } 
    public function showPayment() 
    { 
     paid.text = String("Amount Paid $ " + payment); 

    } 
    public function showSale() 
    { 
     totalSale.text = String("Cost of Sale " + sale.toFixed(2)); 

    } 
    public function showTotal() 
    { 
     totaled.text = String("total $ " + total.toFixed(2)); 

    } 
    public function clickConfirm(event:MouseEvent) 
    { 
     if (total == changeCount && clicked == false) 
     { 
      gotoAndPlay("next"); 
     } 
    } 






} 

}

は、私は私の質問が曖昧に思えるかどうかは、私が求めていますかを理解していないので、持って気軽に、このウェブサイトにはかなり新しいです私は何かを明確にする。皆さんのお手伝いをありがとうございます。

+0

あなたはどこでchangeCountをトレースしますか?クリック確認? clickCheckでtrace(total、changeCount、clicked)を試しましたか?何が出力されますか? – Creynders

答えて

0

まず、なぜclicked変数が必要なのかわかりません。ボタンがクリックされたかどうかを確認するイベントリスナーがあります。

実際にtotalchangeCountが異なるため、不一致が発生します。 Math.random()は0と1の間の値を生成します。salepayment変数の両方に、小数(20.23515542354624など)の後に多数の数値を持つ変数があります。あなたは数字を四捨五入していないので、あなたのGUIに丸められているものだけを表示します(toFraction(2)は丸い数字を丸めません)。20.23515542354624と20.23を比較すると、等しい。

すべての数値変数をトレースすると、今すぐ取得できない場合はどういう意味でしょう。

total = Math.round((payment - sale) * 100)/100;

すみません、数学の知識のための私の技術的な英語が悪いですが、私が作ったの多くを使用します。

ソリューションは、このように、フォーマットを.xxためにあなたのtotal変数を丸めることです - アップの言葉。

+0

それは素晴らしいです。お手伝いありがとう。私はブール変数が必要だとは思っていませんでしたが、方法が機能しなくなったとき、私はそれらを私が考えることができる多くの詳細をカバーしようと決心しました。新鮮な目が常に勝つ。再度、感謝します。 –

+0

このソリューションは時々動作しますが、別のバグが見つかりました。私は1ドルの部分を追加しているようで、丸めにも問題があります。たとえば、changeCount 3.01に.01を追加すると、3.01999999999という結果になることがあります。なぜ完全な.01を追加するだけではなく、なぜそれは時間の一部に過ぎないのでしょうか? –

+0

@ co-Mcdan - これは完全に正常であり、[浮動小数点数がコンピュータに格納される方法](http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers)のために起こります。基本的に0.01は紙のようなものではありません。コンピュータでは値に非常に近いですが、それはありません(0.009999999999999999など)。これはアーキテクチャのためです。あなたが本当にプログラマーのキャリアを追求したいのであれば、私はコンピュータサイエンスの癖を学ぶことを強くお勧めします。 – joncys

関連する問題