如何为我的 Hangman 游戏添加新功能? [英] How to add new features to my Hangman game?

查看:47
本文介绍了如何为我的 Hangman 游戏添加新功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做游戏,刽子手.我有代码,如果你输了,我只想显示这个词.我该怎么做?

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

如果你输了比赛,我怎么能做到这一点,不仅说你得到了 0 分,而且还说他们错过了这个词.我正在尽我最大的努力完成这件事.这是我正在做的一个项目,目的是获得编码的基础知识.花了我一段时间.

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.

推荐答案

您只是在检查 hangmanGame 的 startGame() 处理程序的返回结果是否为 false 或其他,但如果所有故障被使用.您可以在那里添加额外的检查,但最简单的方法可能是在 startGame() 比较中添加一个对话框,例如:

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

这篇关于如何为我的 Hangman 游戏添加新功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆