Как я могу завершить свою игру на память, когда сопоставил все пары? - PullRequest
0 голосов
/ 19 сентября 2018

Я сделал почти весь код.Моя проблема в том, что счетчик, который я реализовал в соответствии с определением clicks (), не работает.У меня есть 16 пунктов, поэтому, когда мое сравнение цветов выполняется 8 раз, я хочу остановить функцию.Я вырезал много кода, который не имеет отношения, основное внимание уделяется первому, если утверждение о щелчках ().

import graphics as G
import random

WINDOW_WIDTH = 200
WINDOW_HEIGHT = 200
win = G.GraphWin('Memory Game', WINDOW_WIDTH, WINDOW_HEIGHT)

def run_game():
    random_assignment()
    clicks()
        #if count == 8:
        #    game_running = False
        #if clicks() == True:
        #    count += 1
        #if count == 8:
        #    game_running = False
    #if game_running = False:


def clicks():
    game_running = True
    while game_running:
        first_click = win.getMouse()
        x_cell1 = int(first_click.getX()//50)
        y_cell1 = int(first_click.getY()//50)
        (first_r, first_c) = click_loc(first_click)
        first_r.undraw()
        second_click = win.getMouse()
        x_cell2 = int(second_click.getX()//50)
        y_cell2 = int(second_click.getY()//50)
        (second_r, second_c) = click_loc(second_click)
        second_r.undraw()
        rgb1 = circles[y_cell1][x_cell1]
        rgb2 = circles[y_cell2][x_cell2]
        count = 0
        if rgb1[0] == rgb2[0] and rgb1[1] == rgb2[1] and rgb1[2] == rgb2[2]:
            count += 1
        elif count == 8:
            game_running = False
        else:
            first_r.draw(win)
            second_r.draw(win)
    win.close()
def click_loc(click):
    x_cell = int(click.getX()//50)
    y_cell = int(click.getY()//50)
    (r, c) = board[x_cell][y_cell]
    return (r, c)


run_game()

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Сначала убедитесь, что count = 0 не находится внутри цикла while, потому что вы постоянно сбрасываете его во время итерации.Во-вторых, измените elif count == 8 на if count == 8, так как при использовании elif
он может пропустить elif count == 8, когда счет фактически достигнет 8 из оператора:

if rgb1[0] == rgb2[0] and rgb1[1] == rgb2[1] and rgb1[2] == rgb2[2]: count += 1

, поэтому замена его на if гарантирует, что он проверит состояние счетчика.

конечный код будет выглядеть так:

def clicks():
count = 0
game_running = True
while game_running:
    first_click = win.getMouse()
    x_cell1 = int(first_click.getX()//50)
    y_cell1 = int(first_click.getY()//50)
    (first_r, first_c) = click_loc(first_click)
    first_r.undraw()
    second_click = win.getMouse()
    x_cell2 = int(second_click.getX()//50)
    y_cell2 = int(second_click.getY()//50)
    (second_r, second_c) = click_loc(second_click)
    second_r.undraw()
    rgb1 = circles[y_cell1][x_cell1]
    rgb2 = circles[y_cell2][x_cell2]
    if rgb1[0] == rgb2[0] and rgb1[1] == rgb2[1] and rgb1[2] == rgb2[2]:
        count += 1
    if count == 8: 
        game_running = False
    else:
        first_r.draw(win)
        second_r.draw(win)
win.close()
0 голосов
/ 19 сентября 2018

Чтобы заставить цикл while работать, вы хотите поместить инициализацию счетчика (count = 0) вне цикла while.

Также, если вы хотите выйти из цикла, когда счетчик достигнет 8, вам нужночтобы позволить ему проверить количество (if count >= 8).Использование elif означает, что это не будет проверяться, если if -условие равно True.

def clicks():
    game_running = True
    count = 0 # Initialize count before while loop
    while game_running:
        first_click = win.getMouse()
        x_cell1 = int(first_click.getX()//50)
        y_cell1 = int(first_click.getY()//50)
        (first_r, first_c) = click_loc(first_click)
        first_r.undraw()
        second_click = win.getMouse()
        x_cell2 = int(second_click.getX()//50)
        y_cell2 = int(second_click.getY()//50)
        (second_r, second_c) = click_loc(second_click)
        second_r.undraw()
        rgb1 = circles[y_cell1][x_cell1]
        rgb2 = circles[y_cell2][x_cell2]
        if rgb1[0] == rgb2[0] and rgb1[1] == rgb2[1] and rgb1[2] == rgb2[2]:
            count += 1
        if count >= 8: # use if instead of elif here 
            game_running = False
        else:
            first_r.draw(win)
            second_r.draw(win)
    win.close()

В качестве незначительного предложения, которое не должно иметь значения в вашем случае, но которое я считаю более обоснованным, следует использовать «равно или больше» >= вместо «равно» ==.

...