!! greenbacks.inf version 970331 !! Copyright 1997 Erik Hetzner !! This file may be copied, modified and distributed freely, so long !! as this notice remains. If it is modified, I ask that you change !! the name somehow to indicate that changes have been made, and give !! both you and me credit. !! -- What is this? -- !! This is `greenbacks.inf', an example game for the `money.h' header !! file, available on `ftp://ftp.gmd.de/if-archive/infocom/compilers/ !! inform6/library/contributions/money.h'. `greenbacks.inf' simulates !! the American monetary system of dollars and cents, and `money.h' !! provides a pretty generic system of money. Constant Story "Greenbacks"; Constant Headline "^Copyright 1997 Erik Hetzner^"; Constant DEBUG; Constant MONEY_TOTAL; Constant MONEY_TOTAL_ON_GROUND; Constant MONEY_SHOW; Constant MONEY_SHOW_ON_GROUND; Constant MONEY_TALL_LIST; Include "parser"; Include "verblib"; Include "grammar"; Include "./money.h"; Object Cents class MetaMoneyClass with sing_name "cent", plur_name "cents", sing 'cent' 'cent', plur 'cents' 'cents', value 1; Object Dollars class MetaMoneyClass with sing_name "dollar", plur_name "dollars", sing 'dollar' 'dollar', plur 'dollars' 'dollars', value 100; Class PennyClass class MoneyClass with sing_name "penny", plur_name "pennies", sing 'penny', plur 'pennies', value 1; Class QuarterClass class MoneyClass with sing_name "quarter", plur_name "quarters", sing 'quarter', plur 'quarters', value 25; Class DimeClass class MoneyClass with sing_name "dime", plur_name "dimes", sing 'dime', plur 'dimes', value 10; Class NickelClass class MoneyClass with sing_name "nickel", plur_name "nickels", sing 'nickel' 'nic', plur 'nickels' 'nics', value 5; Class DollarBillClass class MoneyClass with sing_name "one dollar bill", plur_name "one dollar bills", sing 'one' 'dollar' 'bill', plur 'one' 'dollar' 'bills', value 100; !Object Quarter2 "quarter" ! class QuarterClass; !Object Penny3 "penny" ! class PennyClass; !Object Penny4 "penny" ! class PennyClass; !Object Penny5 "penny" ! class PennyClass; Object MainRoom "Main" with description "A room of little descript.", s_to MoreRoom, has light; Object -> Wallet "wallet" with name "wallet" "purse", has container open transparent; Object -> Penny "penny" class PennyClass with quantity 0; Object -> Quarter "quarter" class QuarterClass with quantity 56; Object MoreRoom "More" with description "More room.", n_to MainRoom, has light; Object -> Nickel "nickel" class NickelClass with quantity 7; Object -> Penny1 class PennyClass with quantity 23; Object -> Dime class DimeClass with quantity 1; Object -> DollarBills class DollarBillClass with quantity 5; Object -> ChangeMachine "change machine" with name 'change' 'machine' 'dial' 'large', initial "There is a large change machine here.", description "A large change machine, it looks like it's been \ through more than most war veterans.. A hand-painted \ sign reads `Put your money in, get your change out.' \ There is a slot for coins and one for bills. There is a \ large dial allowing you to choose any coin or bill you'd \ like, a coin release button and a make change button.", before [; Push: "You'll have to specify whether you want to press the \ coin release or the make change button."; Receive: if (~~(noun ofclass MoneyClass)) "Perhaps you should try putting money in the change machine!"; else { if ((noun ofclass DollarBillClass) && (random (10) < 3)) "The machine spits back ", (the) noun, "."; else { move noun to self; "You put ", (the) noun, " into ", (the) self, "."; } } SetTo: switch (second) { 'dollar', 'dollars', 'bill', 'bills': self.number = DollarBillClass; "You set the machine to release dollar bills."; 'quarter', 'quarters': self.number = QuarterClass; "You set the machine to release quarters."; 'dime', 'dimes': self.number = DimeClass; "You set the machine to release dimes."; 'nickel', 'nickels': self.number = NickelClass; "You set the machine to release nickels."; 'penny', 'pennies': self.number = PennyClass; "You set the machine to release pennies."; default: "The machine can be set to dollars, quarters, dimes, \ nickels, or pennies."; } LetGo: <>; Search: <>; ], number, has static; Object -> CM_slot "slot" with name 'slot', before [; Receive: <>; ], has scenery concealed container open; Object -> CM_release "coin release button" with name 'coin' 'release' 'button', before [; Push: while (child (ChangeMachine) ~= 0) move child (ChangeMachine) to CM_slot; "You press the button on the machine, releasing your \ money into the slot."; ], has scenery concealed; Object -> CM_make "make change button" with name 'make' 'change' 'button', before [; Push: "Funny, nothing happens. The machine must be busted."; ], has scenery concealed; [ Initialise; Location = MainRoom; print "^^^"; InitMoney (); ];