Python刽子手问题

时间:2015-04-14 01:46:13

标签: python

所以我的刽子手几乎正在工作,但它只是在第一行放置了第一个正确的猜测,如果我猜错第二个字母就不会继续。而且,不管我猜的是什么字母,它总是在猜测的第三个字母上画出头。我把它缩小到我的getGuessLocationInPuzzle函数,即使我猜到了我的第二个字母,我的索引总是打印出零。我已经盯着这段代码了2个半小时,但无法解决。请帮忙!

''' Import Statements '''
from graphics import *
import copy
import random
import string

def drawGallows(window):
    gallows = Rectangle(Point(300,280),Point(200,300))
    gallows.draw(window)
    gallows = Line(Point(250,300),Point(250,100))
    gallows.draw(window)
    gallows = Line(Point(250,100),Point(120,100))
    gallows.draw(window)
    gallows = Line(Point(120,100),Point(120,120))
    gallows.draw(window)

def getPuzzle():
    fh = open("puzzle.txt","r")
    fileList = fh.read()
    files = string.split(fileList)
    puzzle = random.choice(files)
    return puzzle


def drawPuzzle(length, window):
    lines = Line(Point(15,275),Point(25,275))
    for index in range(length):
        newline = copy.copy(lines)
        newline.move(20,0)
        newline.draw(window)

def getGuess(entry, window):   
    letter = entry.getText()
    return letter




def getValidGuess(Validguesses, entry, window):
    guess = getGuess(entry, window)
    for index in Validguesses:
        if guess == index:
            return guess






def createTextOverlay(guess):
    textstring = ""
    num = ord(guess)
    for index in range(num - ord("a")):
        textstring = textstring + " "
    textstring= textstring + guess
    for index in range(25-(ord(guess)-ord("a"))):
        textstring = textstring+" "

    overlay = Text(Point(150, 375), textstring)
    overlay.setFace("courier")
    overlay.setFill("red")
    return overlay

def updateGallows(numWrongGuesses, window):
    if numWrongGuesses==1:
        head = Circle(Point(120,140),20)
        head.draw(window)
    if numWrongGuesses==2:
        body = Line(Point(120,220),Point(120,160))
        body.draw(window)
    if numWrongGuesses==3:
        arms1 = Line(Point(100,200),Point(120,160))
        arms1.draw(window)
    if numWrongGuesses==4:
        arms2 = Line(Point(120,160),Point(140,200))
        arms2.draw(window)
    if numWrongGuesses==5:
        leg1 = Line(Point(120,220),Point(100,250))
        leg1.draw(window)
    if numWrongGuesses==6:
        leg2 = Line(Poin(120,220),Point(140,250))
        leg2.draw(window)

def updatePuzzleDisplay(locations, letter, window):
    # For each value in the locations list, print out the letter above the
    # appropriate blank space.
    # For each value in locations list, create a text object. 
    locationonspaces = 35
    for index in locations:
        locationonspaces = locationonspaces + 5
        letterthatisguessed = Text(Point(locationonspaces, 265 ), letter)
        letterthatisguessed.draw(window)

        # Create text object

def getGuessLocationInPuzzle(puzzle, guess):
    word = len(puzzle)
    locations = []
    for index in range(word):
        if puzzle[index]==guess:
            locations.append(index)
        print guess
        print index
        return locations


def main():


    window = GraphWin("Hangman Final", 400, 400)
    drawGallows(window)

    lettersToGuess = Text(Point(150, 375), "abcdefghijklmnopqrstuvwxyz")
    lettersToGuess.setFace("courier")
    lettersToGuess.draw(window)

    guessInput = Entry(Point(250, 325), 10)
    guessInput.draw(window)


    puzzle = getPuzzle()
    print puzzle
    length = len(puzzle)
    drawPuzzle(length,window)

    guess = getGuess(guessInput,window)
    window.getMouse()

    Validguesses = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]

    numWrongGuesses=0

    while True:
        guess = getValidGuess (Validguesses,guessInput,window)
        #print guess
        window.getMouse

        locations = getGuessLocationInPuzzle(puzzle,guess)
 #       print locations
        if locations == []:
            overlay = createTextOverlay(guess)
            overlay.draw(window)

            updateGallows(numWrongGuesses,window)

            numWrongGuesses = numWrongGuesses + 1
        else:
            updatePuzzleDisplay(locations, guess, window)
            overlay = createTextOverlay(guess)
            overlay.draw(window)
        if guess !=0:
            Validguesses.remove(guess)
        window.getMouse()



    window.getMouse()



main()

0 个答案:

没有答案