2016-08-01 10 views
-3

最初に、次のコードはおそらくあまり良くないと分かっています。だからこそ心配してくれるものを謝っています。より良い。初心者のハングマンプロジェクト:重複する文字の扱い

これは小さなハンママンゲームプロジェクトの一部です。文字列に重複する文字を扱う最良の方法を見つけようとしています。

これは、私は今のところ得たものである:私は、彼らは彼らの試合と一緒にブリットされているので、重複に対処するための簡単な方法を探しています

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が行く方法であるとは思えません。

誰かがこれを見て何らかのインプットを与えたいと思っていれば、私は非常に感謝しています。

お時間をいただきありがとうございます。

+5

あなたのコードの投稿を、質問している質問に関連するものだけに絞り込んでください。 –

+0

完了し、すべてのdownvotesしかしながら?この場所は、初心者や改善しようとする人々を見下ろすようなエリート主義のように定着していますか? 私はお尻として出会いたくはありませんが、私が投稿したすべての質問に得られる否定的な反応はちょっとイライラしています。私はまともな助けを他の場所で見なければなりませんか? – Wretch11

+1

@ Wretch11ようこそスタックオーバーフロー!ダウンボントはあなたの個人的な反省ではありません。あなたはここで大歓迎です。ダウンボイスは、あなたが提出したものを完全に拒否するのではなく、投稿を改善する必要があるというシグナルです。今、ここで何が起こっているのかわかりますか?ここで何が望ましい行動ですか?重複した文字列があるとどうなるでしょうか? – Ares

答えて

1

コメントに記載されている内容に基づいて、この場合はdictionaryオブジェクトを使用するのが妥当と思われます。あなたはその手紙を保管したいだけでなく、を保管したい場合は、の手紙が出ます。

辞書にはキーと値があります。たとえば、

{'jack': 4095, 'jill': 12} キーはで、値は4095です。

この場合、値としてintを使用しません。実際にはintの配列を使用しています。

だから、あなたの辞書には、次のようになります。これらの数字は文字がで遭遇したインデックスある

{'o':[1, 5, 6, 3, 2, 1]}。これは、任意の数の重複した文字に対して機能します。あなたのボタンでは、文字列と同じ順番になっているので、どの文字が「ブリット」するのかを知っています。

Pythonの辞書のドキュメント: https://docs.python.org/3/tutorial/datastructures.html

FWIW、いくつかのリファクタリングは、あなたがここにもサービスを提供するだろう。

+0

私は今それを試して、ディクティストリストの理解を見て、私はおそらく事をもっと早くすることができます。ありがとう、私はこれを試してみるときにチェックインします。 – Wretch11