web-dev-qa-db-ja.com

リスト内のすべてのアイテムに遅延を生じさせるにはどうすればよいですか?

私は4色がある記憶ゲームを作ろうとしています。プログラムがリストに+1を追加している間、パターンを一致させる必要があります。

現在、ゲームにパターンを表示させる方法がわかりません。プレイヤーの入力を待ってゲームを終了するか、パターンに別の色を追加します。

これが私が思いつくことができるすべてです:

def addlist():
    if playerpattern == pattern:
        pattern.append(random.randint(1, 4)) 

def listcheck():
    if playerpattern == pattern:
        for i in pattern:
            if i == 1:
                topleft.color = (255, 0, 0)
            else:
                topleft.color = (100, 0, 0)
            if i == 2:
                topright.color = (0, 0, 255)
            else:
                topright.color = (0, 0, 175)
            if i == 2:
                bottomleft.color = (0, 255, 0)
            else:
                bottomleft.color = (0, 175, 0)
            if i ==4:
                bottomright.color = (255, 255, 0)
            else:
                bottomright.color = (175, 175, 0)

pattern = []
playerpattern = []
playing = True

while playing:
    clock.tick(10)
    print(pattern)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            playing = False
        if event.type == MOUSEBUTTONDOWN:
            mouseclick()

    mousehover()
    addlist()
    listcheck()
    draw()

pygame.quit()

基本的に、ゲームの開始時に、ゲームにパターン[0](4つの正方形の1つ)を点灯させます。

次に、プレーヤーがそれを正しく取得すると、pattern [0]を表示し、次にpattern [1]を遅延させて、それが終わるまで繰り返します。助けてくれてありがとう

5
A.J.

pygameにはタイマー機能があります pygame.time.set_timer()

イベントIDを定義します(7は任意の番号です。この番号を定義できます)

myEventID = pygame.USEREVENT+7

タイマーを特定の時間間隔で開始します。 1秒(1000ミリ秒)

pygame.time.set_timer(myEventID, 1000) # 1000 milliseconds interval

期間が終了するたびにイベント通知を取得します。

for event in pygame.event.get():

    if event.type == myEventID:
        # [...]

ミリ秒の引数に0を渡してタイマーを停止します。

pygame.time.set_timer(myEventID, 0)

ゲームの現在の状態を示すゲーム状態変数を追加し、この変数をタイマーで変更します。状態は整数であり、特定の意味があります。

gameState = 0
while playing: 

    for event in pygame.event.get():

        if event.type == myEventID:
            # change the game state - this is just an example
            if gameState == 0:
                gameState = 1 


    if gameState == 0:

        # do default

    Elif gameState == 1:

        # do something else

    Elif gameState == 2:

       # do something completely different

    else:

       # another case 
1
Rabbid76