private void btnReset_Click(object sender, EventArgs e)
        {
            VendControl.ReturnChange();


            purchasableLight0.TurnOff();
            purchasableLight1.TurnOff();
            purchasableLight2.TurnOff();
            purchasableLight3.TurnOff();
            soldOutLight0.TurnOff();
            soldOutLight1.TurnOff();
            soldOutLight2.TurnOff();
            soldOutLight3.TurnOff();
            noChangeLight.TurnOff();
            coinDispenser10Yen.Clear();
            coinDispenser50Yen.Clear();
            coinDispenser100Yen.Clear();
            coinDispenser500Yen.Clear();



            CoinArray[0] = new Coin(COINVALUES[0], NUMCOINS[0], coinDispenser10Yen);
            CoinArray[1] = new Coin(COINVALUES[1], NUMCOINS[1], coinDispenser50Yen);
            CoinArray[2] = new Coin(COINVALUES[2], NUMCOINS[2], coinDispenser100Yen);
            CoinArray[3] = new Coin(COINVALUES[3], NUMCOINS[3], coinDispenser500Yen);

            BeverageArray[0] = new Beverage(CANPRICES[0], NUMCANS[0], purchasableLight0, soldOutLight0, canDispenser0);
            BeverageArray[1] = new Beverage(CANPRICES[1], NUMCANS[1], purchasableLight1, soldOutLight1, canDispenser1);
            BeverageArray[2] = new Beverage(CANPRICES[2], NUMCANS[2], purchasableLight2, soldOutLight2, canDispenser2);
            BeverageArray[3] = new Beverage(CANPRICES[3], NUMCANS[3], purchasableLight3, soldOutLight3, canDispenser3);

            VendControl = new VendingControl(CoinArray, BeverageArray, noChangeLight, amountDisplay);
            updateDebugDisplays();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            amountDisplay = new AmountDisplay(txtAmount);

            displayNum10Yen  = new DebugDisplay(txtNum10Yen);
            displayNum50Yen  = new DebugDisplay(txtNum50Yen);
            displayNum100Yen = new DebugDisplay(txtNum100Yen);
            displayNum500Yen = new DebugDisplay(txtNum500Yen);
            displayPrice0    = new DebugDisplay(txtPrice0);
            displayPrice1    = new DebugDisplay(txtPrice1);
            displayPrice2    = new DebugDisplay(txtPrice2);
            displayPrice3    = new DebugDisplay(txtPrice3);
            displayName0     = new DebugDisplay(txtName0);
            displayName1     = new DebugDisplay(txtName1);
            displayName2     = new DebugDisplay(txtName2);
            displayName3     = new DebugDisplay(txtName3);
            displayNumCans0  = new DebugDisplay(txtNumCan0);
            displayNumCans1  = new DebugDisplay(txtNumCan1);
            displayNumCans2  = new DebugDisplay(txtNumCan2);
            displayNumCans3  = new DebugDisplay(txtNumCan3);

            soldOutLight0 = new Light(pbxSOLight0, Color.Orange);
            soldOutLight1 = new Light(pbxSOLight1, Color.Orange);
            soldOutLight2 = new Light(pbxSOLight2, Color.Orange);
            soldOutLight3 = new Light(pbxSOLight3, Color.Orange);

            noChangeLight = new TimerLight(pbxNoChange, Color.Red, timer1);

            purchasableLight0 = new Light(pbxPurLight0, Color.Aqua);
            purchasableLight1 = new Light(pbxPurLight1, Color.Aqua);
            purchasableLight2 = new Light(pbxPurLight2, Color.Aqua);
            purchasableLight3 = new Light(pbxPurLight3, Color.Aqua);

            coinDispenser10Yen  = new CoinDispenser(txtChange10Yen);
            coinDispenser50Yen  = new CoinDispenser(txtChange50Yen);
            coinDispenser100Yen = new CoinDispenser(txtChange100Yen);
            coinDispenser500Yen = new CoinDispenser(txtChange500Yen);

            // All candispensers share the same output textbox for simulation
            canDispenser0 = new CanDispenser(txtCanDispenser, CANNAMES[0]);
            canDispenser1 = new CanDispenser(txtCanDispenser, CANNAMES[1]);
            canDispenser2 = new CanDispenser(txtCanDispenser, CANNAMES[2]);
            canDispenser3 = new CanDispenser(txtCanDispenser, CANNAMES[3]);

            // You must replace the following default constructors with
            // constructors with arguments (non-default constructors)
            // to pass (set) the first object that ButtonPressed() will
            // visit
            CoinArray[0] = new Coin(COINVALUES[0], NUMCOINS[0], coinDispenser10Yen);
            CoinArray[1] = new Coin(COINVALUES[1], NUMCOINS[1], coinDispenser50Yen);
            CoinArray[2] = new Coin(COINVALUES[2], NUMCOINS[2], coinDispenser100Yen);
            CoinArray[3] = new Coin(COINVALUES[3], NUMCOINS[3], coinDispenser500Yen);

            BeverageArray[0] = new Beverage(CANPRICES[0], NUMCANS[0], purchasableLight0, soldOutLight0, canDispenser0);
            BeverageArray[1] = new Beverage(CANPRICES[1], NUMCANS[1], purchasableLight1, soldOutLight1, canDispenser1);
            BeverageArray[2] = new Beverage(CANPRICES[2], NUMCANS[2], purchasableLight2, soldOutLight2, canDispenser2);
            BeverageArray[3] = new Beverage(CANPRICES[3], NUMCANS[3], purchasableLight3, soldOutLight3, canDispenser3);


            VendControl = new VendingControl(CoinArray, BeverageArray, noChangeLight, amountDisplay);
            //these constructors will take the VendingController object
            purchaseButton0 = new PurchaseButton(VendControl, 0);
            purchaseButton1 = new PurchaseButton(VendControl, 1);
            purchaseButton2 = new PurchaseButton(VendControl, 2);
            purchaseButton3 = new PurchaseButton(VendControl, 3);

            // You must replace the following default constructors with
            // constructors that take armuments to pass the first object that
            // the CoinInserted() will call
            //these constructors will take the VendingController object
            coinInserter10Yen  = new CoinInserter(VendControl, 0);
            coinInserter50Yen  = new CoinInserter(VendControl, 1);
            coinInserter100Yen = new CoinInserter(VendControl, 2);
            coinInserter500Yen = new CoinInserter(VendControl, 3);

            coinReturnButton = new CoinReturnButton(VendControl);



            // Display debug information
            displayCanPricesAndNames();
#if DEBUG
            updateDebugDisplays();
#endif
        }
 /// <summary>
 /// override constructor that sends a pointer to the VendingControl
 /// </summary>
 /// <param name="VC"></param>
 /// <param name="Index"></param>
 public CoinInserter(VendingControl VC, int Index)
 {
     VendControl = VC;
     CoinIndex   = Index;
 }
 /// <summary>
 /// override constructor that sets the pointer to vendingcontrol and the index associated with the purchase button
 /// </summary>
 /// <param name="vc"></param>
 /// <param name="index"></param>
 public PurchaseButton(VendingControl vc, int index)
 {
     VendControl = vc;
     buttonIndex = index;
 }
 /// <summary>
 /// overload constructor that sets a pointer to vending control
 /// </summary>
 /// <param name="VC"></param>
 public CoinReturnButton(VendingControl VC)
 {
     VendController = VC;
 }