新手的刽子手项目:处理重复的字母

时间:2016-08-01 20:03:20

标签: python pygame

首先,我意识到下面的代码可能不是很好,所以对任何令你畏缩的事情表示道歉,我只是想尽可能多地编写代码,以期变得更好。

这是一个小型刽子手游戏项目的一部分,我正试图找出处理字符串中重复字母的最佳方法。

这就是我现在所得到的:

def checkDupes(word):

    global dupeList
    global repeatTimesDupes

    if repeatTimesDupes != 0:
        dupeCount = 0
        for i in range(len(word)):
            temp = word[i]
            print("temp letter is: ", temp)

            for j in range(i+1,len(word)):
                if word[j] == temp:
                    if temp not in dupeList:
                        dupeList.append(word[j])
                        print("the dupeList contains: ", dupeList)#debug


    repeatTimesDupes -= 1

def getLetter(position,buttons,word):
    i = 96
    index = 0
    letter = chr(i)

    for button in buttons:
        if button != None:
            i+=1
            if button.collidepoint(position):
                print("the position is: ", position)
                print(i)
                for j in range(len(word)):
                    print(word[j] , chr(i))
                    if word[j] == chr(i):
                        index = j
                        return chr(i), index

        else:
            return '?', -1



def checkForLetter(word,letter):

    inWord = " "
    for i in range(len(word)):
        if word[i] == letter:
            inWord = True
            break
        else:
            print(len(word))
            print (word[i])
            inWord = False

    return inWord

#========================== Start Loop ===========================================

while done == False:
    events = pygame.event.get()
    screen.fill(BGCOLOR)
    timedelta = clock.tick_busy_loop(60)
    timedelta /= 1000 # Convert milliseconds to seconds
    for event in events: 
        if event.type == pygame.QUIT:
            done = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:                
                done = True

        if event.type == pygame.MOUSEBUTTONUP:
            if event.button == MOUSEBUTTONLEFT:
                pos = pygame.mouse.get_pos()
                for button in buttonsList:
                    if button.collidepoint(pos):
                        if button != None:
                            checkDupes(gameWord)
                            letter, atIndex = getLetter(pos,buttonsList,gameWord)
                            letterSelected = True
                            moveCounter+=1


    screen.blit(blackBG,(0,0))
    showButtons(letterList)
    showLetterSlots(gameWord,screenRect)
    setCounters(moveMade,mistakeMade)

    if letterSelected:
        inGameWord = checkForLetter(gameWord, letter)
        if inGameWord:
            print(atIndex)
            print(letter)
            letterRen = wordFonts.render(letter,1,(0,255,0))
            renderList[atIndex] = letterRen
            print("The render list is: ", renderList)

            renCount = 0
            for r in lineRectList:
                if renderList[renCount] != '?' :
                    screen.blit(renderList[renCount],((r.centerx-10),430))
                if renCount <= len(gameWord):
                    renCount+=1



#update game screen
    clock.tick(60)
    pygame.display.update()



#========================== End Loop =============================================

pygame.quit()  

我正在寻找快速处理重复的方法,因此他们会与他们的比赛一起进行。我已经慢慢放下了所有循环的字母blits,所以我不确定我现在的getDupes是否可行。

如果有人愿意看这个并提供一些意见,我会非常感激。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

根据您在评论中描述的内容,在这种情况下使用dictionary对象似乎是合理的。您不仅要存储该字母,还要存储 那些字母。

字典有一个键和一个值。例如:

{'jack': 4095, 'jill': 12} 关键是jack,值为4095

在这种情况下,我们不会使用int作为值。我们实际上将使用一组int。

因此,您的字典可能如下所示:

{'o':[1, 5, 6, 3, 2, 1]}其中这些数字是遇到该字母的索引。这适用于任意数量的重复字母。然后,在你的按钮中,你知道哪些是'blit',因为它们与字符串的顺序相同。

Python字典文档: https://docs.python.org/3/tutorial/datastructures.html

FWIW,你也可以在这里进行一些重构。