-
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