Files
basic-computer-games/00_Alternate_Languages/03_Animal/MiniScript/animal.ms

91 lines
2.4 KiB
Plaintext

print " "*32 + "Animal"
print " "*15 + "Creative Computing Morristown, New Jersey"
print; print; print
print "Play 'Guess the Animal'"
print
print "Think of an animal and the computer will try to guess it."
print
// Ask a yes/no question, and return "Y" or "N".
getYesNo = function(prompt)
while true
inp = input(prompt + "? ").upper
if inp and (inp[0] == "Y" or inp[0] == "N") then return inp[0]
print "Please answer Yes or No."
end while
end function
// Our data is stored as a list of little maps.
// Answers have only an "answer" key.
// Questions have a "question" key, plus "ifYes" and "ifNo"
// keys which map to the index of the next question or answer.
data = [
{"question":"Does it swim", "ifYes":1, "ifNo":2},
{"answer":"fish"},
{"answer":"bird"}]
// List all known animals.
listKnown = function
print; print "Animals I already know are:"
for item in data
if item.hasIndex("answer") then print (item.answer + " "*17)[:17], ""
end for
print; print
end function
// Ask the question at curIndex, and handle the user's response.
doQuestion = function
q = data[curIndex]
if getYesNo(q.question) == "Y" then
globals.curIndex = q.ifYes
else
globals.curIndex = q.ifNo
end if
end function
// Check the answer at curIndex. If incorrect, get a new question
// to put at that point in our data.
checkAnswer = function
node = data[curIndex]
inp = getYesNo("Is it a " + node.answer)
if inp == "Y" then
print "Why not try another animal?"
else
actual = input("The animal you were thinking of was a? ").lower
print "Please type in a question that would distinguish a"
print actual + " from a " + node.answer
q = {}
q.question = input
q.question = q.question[0].upper + q.question[1:] - "?"
data[curIndex] = q
k = data.len
data.push node // old answer at index k
data.push {"answer":actual} // new answer at index k+1
if getYesNo("For a " + actual + " the answer would be") == "Y" then
data[curIndex].ifYes = k+1
data[curIndex].ifNo = k
else
data[curIndex].ifNo = k+1
data[curIndex].ifYes = k
end if
end if
end function
// Main loop. (Press Control-C to break.)
while true
while true
inp = input("Are you thinking of an animal? ").upper
if inp == "LIST" then listKnown
if inp and inp[0] == "Y" then break
end while
curIndex = 0
while true
if data[curIndex].hasIndex("question") then
doQuestion
else
checkAnswer
break
end if
end while
end while