diff options
Diffstat (limited to 'itl/hangman')
-rw-r--r-- | itl/hangman | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/itl/hangman b/itl/hangman new file mode 100644 index 0000000..b2feb3a --- /dev/null +++ b/itl/hangman @@ -0,0 +1,165 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +if (!globals.contains("irc")) { + globals.irc = log +} + +hm = { + max_errors = 6 + + h_word = null + h_arr = null + guesses = 0 + errors = 0 + a_arr = null + misses = "" + + if (irc) { + hangman_output = irc + } else { + hangman_output = log + } + + function str2arr(str) { + var arr = [] + + for (i in range(str.len())) { + arr.add(str.substr(i, 1)) + } + + return arr + } + + function init(s) { + s = s.upper() + h_word = s + h_arr = str2arr(h_word) + guesses = 0 + errors = 0 + a_arr = h_arr.clone() + misses = "" + + for (x in range(a_arr.len())) { + a_arr[x] = (h_arr[x] == " ") + } + } + + function print_progress() { + var ir + + for (x in range(a_arr.len())) { + if (a_arr[x]) { + ir += h_arr[x] + } else { + ir += "_" + } + + ir += " " + } + + hangman_output(ir) + hangman_output(errors + "/" + (max_errors + 1) + " errors made: " + misses) + } + + function create_hint() { + var r = Math.floor(Math.random() * a_arr.len()) + if (!a_arr[r]) { + a_arr[r] = true + for (x in range(h_arr.len())) { + if (h_arr[x] == h_arr[r]) { + a_arr[x]=true + } + } + } else { + if (a_arr.contains(false)) { + create_hint() + } else { + winner() + } + } + + if (!a_arr.contains(false)) { + winner() + } + } + + function hint(i) { + for (x in range(i)) { + create_hint() + } + + print_progress() + } + + function winner() { + if (h_word) { + hangman_output("Congratulations, you are a winner in " + guesses + " guesses.") + h_word = null + } + } + + function guess(s) { + if (!h_word) { + hangman_output("Please set a word with hm.init(\"word\")") + return + } + + s = s.upper() + + if (s.len() != 1) { + hangman_output("NEIN!") + return + } + + var correct = false + for (x in range(h_arr.len())) { + if (h_arr[x] == s) { + a_arr[x] = true + correct = true + } + } + + if (!correct) { + misses += s + " " + errors += 1 + } + + print_progress() + + guesses += 1 + + if (!a_arr.contains(false)) { + winner() + return + } + + if (errors > max_errors) { + hangman_output("You died...") + hangman_output(" ________") + hangman_output(" |/ |") + hangman_output(" | (_)") + hangman_output(" | \\|/") + hangman_output(" | |") + hangman_output(" | / \\") + hangman_output(" |") + hangman_output("_|___") + remove("h_word") + return + } + } + + function clone() { + var n = Dictionary.prototype.clone.call(this) + + if (h_arr) { + n.h_arr = h_arr.clone() + } + + if (a_arr) { + n.a_arr = a_arr.clone() + } + + return n + } +} + |