Pastey Modified hangman
- Posted by Lnettnay Apr 24, 2012
include std/sort.e include std/text.e include std/map.e include std/sequence.e include std/os.e include std/console.e function mask_word(sequence word, map letters) --> {string,int} integer underscores=0 for i = 1 to length(word) do integer ch = upper(word[i]) if not has(letters,ch) then word[i] = '_' underscores += 1 end if end for return {word,underscores} end function function should_update(map letters, integer char) --> bool integer normalized = upper(char) integer res = not has(letters,normalized) and 65 <= normalized and normalized <= 90 -- within A..Z return res end function procedure update_letters(map letters, integer char) put(letters, upper(char), 0) end procedure procedure you_won() puts(1,"\nYou won!! congratulations!\n") -- ***** added newline end procedure procedure you_lost(sequence word) puts (1,"\nYou lost.. :(\n" ) printf(1, "the word was: %s\n", {word}) -- ***** added newline end procedure procedure main() integer allowed = 20 , unique_chars = 0 integer keypress sequence words = {"puzzle", "apple", "tree", "word", "bird", "hangman"} -- ******** changed line sequence word = words[rand(length(words))] -- ***** select word from list map letters = new() sequence letters_so_far integer underscores = -1 any_key("Hello! please click any key to start") while 1 do unique_chars = size(letters) -- flow conditions if underscores = 0 then you_won() exit end if if unique_chars>=allowed then you_lost(word) exit end if sequence masked = mask_word(word,letters) sequence word_output = masked[1] underscores = masked[2] sleep(0.1) clear_screen() puts (1, "The word is:\n") puts (1,join(upper(word_output)," ") & "\n\n") printf(1,"%d / %d\n\n", {unique_chars, allowed}) letters_so_far = join(sort(keys(letters))," ") puts(1,"\t" & letters_so_far) -- give time to print, then check key. -- check key presses keypress = get_key() -- if no key, refresh if keypress = -1 then continue end if -- ESC to exit the program. if keypress = 27 then exit end if if should_update(letters,keypress) then update_letters(letters,keypress) end if end while end procedure main()


