class Magic8Ball {
private var questions: Responder = Responder()
private var answers: Responder = Responder()
init() {
// Affirmative responses
answers.addResponse("It is certain")
answers.addResponse("It is decidedly so")
answers.addResponse("Without a doubt")
answers.addResponse("Yes definitely")
answers.addResponse("You may rely on it")
answers.addResponse("As I see it, yes")
answers.addResponse("Most likely")
answers.addResponse("Outlook good")
answers.addResponse("Yes")
answers.addResponse("Signs point to yes")
// Non-Committal responses
answers.addResponse("Reply hazy, try again")
answers.addResponse("Ask again later")
answers.addResponse("Better not tell you now")
answers.addResponse("Cannot predict now")
answers.addResponse("Concentrate and ask again")
// Negative responses
answers.addResponse("Don’t count on it")
answers.addResponse("My reply is no")
answers.addResponse("My sources say no")
answers.addResponse("Outlook not so good")
answers.addResponse("Very doubtful")
// Recognizable question patterns
questions = Responder(
"will i", "can i expect", "should i", "is it a good idea",
"will it be a good idea for me to", "is it possible", "future hold",
"will there be"
)
}
func setQuestions(_ q: Responder) {
questions = q
}
func setAnswers(_ a: Responder) {
answers = a
}
func getQuestions() -> Responder {
return questions
}
func getAnswers() -> Responder {
return answers
}
func engage(_ ear: String) -> Bool {
guard !ear.isEmpty else { return false }
return questions.strContainsResponse(ear)
}
func reply() -> String {
return answers.getAResponse()
}
}