37 lines
1.2 KiB
Text
37 lines
1.2 KiB
Text
type NinetynineBottles
|
|
int DEFAULT_BOTTLES_COUNT = 99
|
|
model
|
|
int initialBottlesCount, bottlesCount
|
|
new by int =bottlesCount
|
|
me.initialBottlesCount = bottlesCount
|
|
end
|
|
fun subject = <|when(me.bottlesCount == 1, "bottle", "bottles")
|
|
fun bottles = <|when(me.bottlesCount == 0, "no more", text!me.bottlesCount)
|
|
fun goToWall = void by block
|
|
text line = me.bottles() + " " + me.subject() + " of beer on the wall, " +
|
|
me.bottles() + " " + me.subject() + " of beer."
|
|
if me.bottlesCount == 0 do line[0] = line[0].upper() end # text can be modified
|
|
writeLine(line)
|
|
end
|
|
fun takeOne = logic by block
|
|
if --me.bottlesCount < 0 do return false end # cannot take a beer down
|
|
writeLine("Take one down and pass it around, " + me.bottles() +
|
|
" " + me.subject() + " of beer on the wall.")
|
|
writeLine()
|
|
return true
|
|
end
|
|
fun goToStore = void by block
|
|
writeLine("Go to the store and buy some more, " + me.initialBottlesCount +
|
|
" bottles of beer on the wall.")
|
|
end
|
|
fun play = void by block
|
|
for ever
|
|
me.goToWall()
|
|
if not me.takeOne()
|
|
me.goToStore()
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
NinetynineBottles(when(Runtime.args.length > 0, int!Runtime.args[0], DEFAULT_BOTTLES_COUNT)).play()
|