How to add new features to my Hangman game?

纵饮孤独 提交于 2019-12-13 04:36:34

问题


I am working on a game, Hangman. I have the code down, I just want to display the word if you lose. How can I do that?

hangman's init()--by Londres on Stack Overflow

script hangman
property stdin : missing value
property stdout : missing value
property dict : missing value

on init()
    --starting up the game
    set stdin to parent's hangmanStdin's alloc()'s init()
    set stdout to parent's hangmanStdout's alloc()'s init()
    set dict to parent's hangmanDictionary's alloc()'s init()
    my mainLoop()
end init

on mainLoop()
    repeat --endless
        set option to stdin's getOptions("Lobby", "What would you like to do?", {"New Game", "Quit"})
        if option is "New Game" then
            set difficulty to stdin's getOptions("New Game", "Choose your difficulty", {"Normal", "Easy", "Hard"})
            --replace this line with an automatic word generator
            set x to parent's hangmanGame's alloc()'s initWithWordAndDifficulty(dict's getWord(), difficulty)

            if x's startgame() is false then
                return
            else
                stdout's printf("You've scored " & x's score & " points.")
            end if
            --game is over so clear it
            set x to missing value
        else
            exit repeat
        end if
    end repeat
end mainLoop

on shouldTerminate()
    return true
end shouldTerminate


on alloc()
    copy me to x
    return x
end alloc
end script

script hangmanGame
property parent : hangman

property wordToGuess : missing value
property maxFaults : missing value
property usedChars : missing value
property faults : missing value
property score : 0

on initWithWordAndDifficulty(theWord, theDifficulty)
    if theDifficulty = "Hard" then
        set my maxFaults to 5
    else if theDifficulty = "Normal" then
        set my maxFaults to 8
    else --easy or any other value will be handled as easy
        set my maxFaults to 12
    end if
    set my wordToGuess to theWord
    set my usedChars to {}
    set my faults to 0
    set my score to 0
    return me
end initWithWordAndDifficulty

on startgame()
    repeat --endless
        set __prompt to "Faults Left: " & maxFaults - faults & return & "The Word: " & my makeHiddenField()
        set c to parent's stdin's getChar(__prompt)
        if c = false then
            return false
        end if
        --first check if getChar did give us any result
        if length of c is not 0 then
            --check if teh character is valid
            if c is in "abcdefghijklmnopqrstuvwxyz" then
                --check if we already checked this before
                if c is not in my usedChars then
                    set end of my usedChars to c
                    --check if player guessed wrong character
                    if c is not in wordToGuess then
                        set faults to faults + 1
                    end if
                end if
            end if
        end if
        --check if player guessed all characters of word
        if my wordGuessed() then
            set my score to ((25 * (26 / (length of my usedChars))) as integer)
            return true
        end if
        --check if player reached the max faults he's allowed to make
        if my faults = my maxFaults then
            return 0
        end if
    end repeat
end startgame

on wordGuessed()
    repeat with aChar in every text item of my wordToGuess
        if aChar is not in my usedChars then
            return false
        end if
    end repeat
    return true
end wordGuessed

on makeHiddenField()
    set characterArray to {}
    repeat with aChar in every text item of my wordToGuess
        if aChar is in my usedChars then
            set end of characterArray to aChar as string
        else
            set end of characterArray to "_"
        end if
    end repeat
    set AppleScript's text item delimiters to space
    set hiddenField to characterArray as string
    set AppleScript's text item delimiters to ""
    return hiddenField
end makeHiddenField
end script

script hangmanDictionary
property parent : hangman
property wordsPlayed : missing value
property allWords : missing value

on init()
    set wordsPlayed to {}
    --try to get more words from a file for example
    set allWords to {"Hangman", "Police", "Officer", "Desktop", "Pencil", "Window", "Language", "Wealthy", "Trauma", "Spell", "Rival", "Tactical", "Thin", "Salty", "Bluish", "Falcon", "Distilery", "Ballistics", "Fumbling", "Limitless", "South", "Humble", "Foreign", "Affliction", "Retreat", "Agreeable", "Poisoner", "Flirt", "Fearsome", "Deepwater", "Bottom", "Twisted", "Morsel", "Filament", "Winter", "Contempt", "Drimys", "Grease", "Awesome", "Compulsive", "Crayon", "Prayer", "Blonde", "Backbone", "Dreamland", "Ballet", "Continuous", "Aerobatic", "Hideous", "Harmonic", "Lottery", "Encrypt", "Cable", "Aluminium", "Hunter", "National", "Hunter", "Mechanical", "Deadbeat", "Opposition", "Threat", "Decadent", "Gazelle", "Guild", "Authoritive", "Deliverance", "Severe", "Jerid", "Alarm", "Monochrome", "Cyanide", "External", "Potential", "Section", "Innocent", "Drifting", "Amnesia", "Domino", "Flimsy", "Flamethrowing", "Advocate", "Hirsute", "Brother", "Ephemeral", "Brutal", "Decade", "Drauma", "Dilemma", "Exquisite", "Glimmer", "Fugitive", "Digital", "Associate", "Ambivalent", "Ambulatory", "Apology", "Brawler", "Molecular", "Insurance", "Contractual", "Initial", "Calibration", "Heretical", "Disclosure", "Guerilla", "Dismember", "Minimal", "Altercation", "Eastern", "Integrate", "Femur", "Metallic", "Ambition", "Auxiliary", "Esoteric", "Converse", "Accepting", "Juvenile", "Efficacious", "Complex", "Imperil", "Division", "Onerous", "Astonish", "Scandalous", "Quaint", "Dominate", "Contrary", "Conspiracy", "Earthquake", "Embarrassment", "Exclude", "Ambiguous", "Captivate", "Compliance", "Migration", "Embryo", "Abandon", "Conservation", "Appreciate", "Applaud", "Pension", "Voyage", "Influence", "Consensus", "Incapable", "Economy", "Parameter", "Contrast", "Sensitive", "Meadow", "Chimney", "Familiar", "Serious", "Credibility", "Infrastructure", "Museum", "Relinquish", "Merit", "Coalition", "Retirement", "Transaction", "Official", "Composer", "Magnitude", "Committee", "Privilege", "Diamond", "Obligation", "Transition", "Jockey", "Reinforce", "Conflict", "Offensive", "Detective", "Effective", "Detector"}
    return me
end init

on getWord()
    set randomNr to (random number from 1 to (length of (my allWords))) as integer
    --you could do somethinh here when a word is used again
    return item randomNr of my allWords as string
end getWord
end script

script hangmanStdin
    property parent : hangman

on init()
    return me
end init

on getChar(__prompt)
    set x to display dialog __prompt buttons {"Go", "Quit"} default button "Go" default answer ""
    if button returned of x = "Quit" then
        return false
    end if

    if length of x's text returned = 0 then
        return ""
    end if

    return character 1 of x's text returned
end getChar

on getOptions(__title, __message, __options)
    return button returned of (display alert __title message __message buttons __options default button 1)
end getOptions
end script

script hangmanStdout
property parent : hangman

on init()
    return me
end init

on printf(__message)
    display dialog __message buttons {"OK"} default button 1
end printf
end script

How can I make it so if you lose the game, not only does it say the you got 0 points but also say the word that they missed. I'm trying my best to get this done. It's a project that I'm doing to get the basics of coding. Took me awhile.


回答1:


You are only checking the return result from hangmanGame’s startGame() handler for false or otherwise, but the handler returns 0 if all the faults are used. You could add an additional check in there, but the easiest way would probably be to add a dialog in the startGame() comparison, for example:

if my faults = my maxFaults then
  display dialog "The word was " & quoted form of wordToGuess
  return 0
end if


来源:https://stackoverflow.com/questions/55031272/how-to-add-new-features-to-my-hangman-game

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!