2016-08-02 7 views
3

私はpygameを使用してゲームを作成しようとしていますが、変数に基づいてキーゲームを確認するためにpygameを取得するのに苦労しています。pygameの可変キープレスの確認方法

私がこれまで持っているコードは次のとおりです。

import random, pygame, sys 
from pygame.locals import * 
points=0 
pygame.init() 

screen = pygame.display.set_mode((600,350)) 
pygame.display.set_caption("LETTERPRESS") 

while True: 
FONT = pygame.font.SysFont("Comic Sans MS",30) 
Letter=random.randint(1,26) 
Letters={ 
    1 :"a", 
    2 :"b", 
    3 :"c", 
    4 :"d", 
    5 :"e", 
    6 :"f", 
    7 :"g", 
    8 :"h", 
    9 :"i", 
    10:"j", 
    11:"k", 
    12:"l", 
    13:"m", 
    14:"n", 
    15:"o", 
    16:"p", 
    17:"q", 
    18:"r", 
    19:"s", 
    20:"t", 
    21:"u", 
    22:"v", 
    23:"w", 
    24:"x", 
    25:"y", 
    26:"z"} 
label = FONT.render(Letters[Letter],1,(255,0,0)) 
screen.blit(label,(285,160)) 
pygame.display.update() 
while True: 
    for event in pygame.event.get(): 
     if event.type==QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_[Letters[Letter]]: 
       points +=1 
       break 

コードの問題の一部は次のとおりです。

if event.key == pygame.K_[Letters[Letter]]: 

また、あなたは私が私のプログラムをクリーンアップすることができます任意の方法を持っている場合、してください教えてください。

感謝:)

答えて

3

一つの修正は、コード - あなたがこれまでを取ることができ、一般的なクリーンアップのために、その後、その上

Letters={ 
    1 :pygame.K_a, 
    2 :pygame.K_b, 
    3 :pygame.K_c, 

とにif event.key == Letters[Letter]:

を辞書を変更することであろう特に、リストの代わりに辞書を使用する理由はないと思う。

Letters = [pygame.K_a, pygame.K_b ...] 

リストにはインデックスが付けられているので、0は「a」であることを覚えておく必要があります。

label = FONT.render(Letters[Letter],1,(255,0,0))label = FONT.render(chr(Letter+65),1,(255,0,0))として改善することができます。これにより、文字の値を文字のままにする必要がなくなります。

最後にインデントされたブロックがないため、if event.type == pygame.KEYDOWN:という行に構文エラーがあります。

+0

pygame.K_aを使用すると、私は変数を行に印刷するので、実際にはうまくいきませんでした。 ** "label = FONT.render(Letters [Letter]、1、(255,0、 0)) "** 私は辞書を使用しています。私はこれを学んだ最初の方法であり、私が完全に慣れ親しんでいるものに固執したいので、ちょうど辞書を使用しています。 2番目の方法は、 "a"の代わりに "pygame.K_a"というテキストを画面に表示する方法です。 –

+0

これで問題は解決しました。数字を文字に変換する組み込み関数があり、それを使用する必要があります。 –

+0

"FONT.render(chr(Letter + 65)、1(255,0,0))"の修正はうまくいきました。意図しないブロックは、私が前にテキストを編集していたときのちょうどタイプミスでした。誤ってタブを削除しました。ありがとうございます。 :) –

関連する問題