-
NB You need Liberty BASIC or Just BASIC installed, and the three bitmaps, available as vend.zip
' Stimulated by the discussions on how much to help students! ' To-dos: ' Add the routine to give back change and check reserve of coins ' Have a finite number of each can in the machine. ' Sound effects? nomainwin Pepsi = 072 Coke = 075 Sprite = 060 pepsiNum =0 availableCash =0 numHD =0 numQu =0 numDi =0 numNi =0 numPe =0 button #w.HD, "+50 cents", [HD], LR, 340, 250 button #w.Qu, "+25 cents", [Qu], LR, 340, 200 button #w.Di, "+10 cents", [Di], LR, 340, 150 button #w.Ni, "+ 5 cents", [Ni], LR, 340, 100 button #w.Pe, "+ 1 cents", [Pe], LR, 340, 50 button #w.Ch, "Done", [Done], LR, 125, 110 groupbox #w.gb1, "Coin entry", 50, 20, 140, 330 groupbox #w.gb2, "Affordable items", 200, 20, 220, 150 textbox #w.tb1, 60, 40, 100, 40 texteditor #w.te1, 200, 270, 200, 80 statictext #w.stHD, str$( numHD), 160, 102, 20, 30 statictext #w.stQu, str$( numQu), 160, 152, 20, 30 statictext #w.stDi, str$( numDi), 160, 202, 20, 30 statictext #w.stNi, str$( numNi), 160, 252, 20, 30 statictext #w.stPe, str$( numPe), 160, 302, 20, 30 statictext #w.stPP, "Possible purchases with these coins inserted will appear below..", 210, 38, 200, 30 statictext #w.stTx, "Keep ading coins until at least one object can be afforded."; chr$( 13);_ "Then click its image to purchase."; chr$( 13);_ "Click 'Done' to return your change.", 210, 180, 200, 60 bmpbutton #w.pepsi, "pepsi.bmp", [pepsiBought], LR, 150, 200 bmpbutton #w.coke, "coke.bmp", [cokeBought], LR, 100, 200 bmpbutton #w.sprite, "sprite.bmp", [spriteBought], LR, 50, 200 WindowWidth =440 WindowHeight =420 open "Vending Machine" for window as #w #w "trapclose [quit]" #w "font arial 8" #w.tb1 "!font arial 24 bold" #w.te1 "Returned coin list appears here." #w.te1 "!font arial 8" #w.tb1 "Nil" #w.pepsi "hide" #w.coke "hide" #w.sprite "hide" wait [Done] #w.te1 "!cls" #w.te1 "Return "; availableCash; " cents." #w.tb1 "Nil" availableCash =0 #w.pepsi "hide" #w.coke "hide" #w.sprite "hide" wait [whatsOn] #w.tb1 availableCash; "c" if availableCash >=Pepsi then #w.pepsi "show" else #w.pepsi "hide" if availableCash >=Coke then #w.coke "show" else #w.coke "hide" if availableCash >=Sprite then #w.sprite "show" else #w.sprite "hide" wait [pepsiBought] availableCash =availableCash -Pepsi goto [whatsOn] [cokeBought] availableCash =availableCash -Coke goto [whatsOn] [spriteBought] availableCash =availableCash -Sprite goto [whatsOn] [HD] availableCash =availableCash +50 #w.tb1 availableCash numHD =numHD +1 #w.stHD, str$( numHD) goto [whatsOn] [Qu] availableCash =availableCash +25 #w.tb1 availableCash numQu =numQu +1 #w.stQu, str$( numQu) goto [whatsOn] [Di] availableCash =availableCash +10 #w.tb1 availableCash numDi =numDiD +1 #w.stDi, str$( numDi) goto [whatsOn] [Ni] availableCash =availableCash + 5 #w.tb1 availableCash numNi =numNi +1 #w.stNi, str$( numNi) goto [whatsOn] [Pe] availableCash =availableCash + 1 #w.tb1 availableCash numPe =numPe +1 #w.stPe, str$( numPe) goto [whatsOn] [quit] close #w end