!! 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:
<<LetGo CM_slot second>>;
Search:
<<Search CM_slot>>;
],
number,
has static;
Object -> CM_slot "slot"
with name 'slot',
before [;
Receive:
<<Insert noun ChangeMachine>>;
],
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 ();
];