Проверка крестиков-ноликов не работает так, как я хочу, в конце моего кода

#python #python-3.x #pygame #tic-tac-toe

#python #python-3.x #pygame #крестики-нолики

Вопрос:

Я пытаюсь создать эту игру в крестики-нолики, и в последней части моего кода предполагается проверить, соответствует ли число в circleList, однако единственная проверка, которая работает должным образом, — это 1,4,7. Потому что, когда я нажимаю поля 3,6,7,8,9, строка отображается сразу, я не знаю, почему

 import pygame

pygame.init()
wn = pygame.display.set_mode((640, 840))
wn.fill((8, 140, 120))
pygame.display.set_caption("Tic-Tac-Toe")
First = pygame.draw.rect(wn, (20, 189, 172), (10, 210, 200,200))
Second = pygame.draw.rect(wn, (20, 189, 172), (220, 210, 200,200))
Third = pygame.draw.rect(wn, (20, 189, 172), (430, 210, 200,200))
Fourth = pygame.draw.rect(wn, (20, 189, 172), (10, 420, 200,200))
Fifth = pygame.draw.rect(wn, (20, 189, 172), (220, 420, 200,200))
Sixth = pygame.draw.rect(wn, (20, 189, 172), (430, 420, 200,200))
Seventh = pygame.draw.rect(wn, (20, 189, 172), (10,630, 200,200))
Eight = pygame.draw.rect(wn, (20, 189, 172), (220, 630, 200,200))
Ninth = pygame.draw.rect(wn, (20, 189, 172), (430, 630, 200,200))
Circle = False

Flag = True
First_Empty = True
Second_Empty = True
Third_Empty = True
Fourth_Empty = True
Fifth_Empty = True
Sixth_Empty = True
Seventh_Empty = True
Eight_Empty = True
Ninth_Empty = True

circleList = []
xList = []


while Flag:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Flag = False

        if event.type == pygame.MOUSEBUTTONUP:
            pos = pygame.mouse.get_pos()

            if First.collidepoint(pos) and First_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (110, 310), 90, 20)
                    circleList.append(1)
                    Circle = False
                    First_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (40,230), (180,380),20)
                    pygame.draw.line(wn, (8, 140, 120), (180, 230), (40, 380), 20)
                    xList.append(1)
                    Circle = True
                    First_Empty = False

            if Second.collidepoint(pos) and Second_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (320, 310), 90, 20)
                    circleList.append(2)
                    Circle = False
                    Second_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (250,230), (380,380),20)
                    pygame.draw.line(wn, (8, 140, 120), (380, 230), (250, 380), 20)
                    xList.append(2)
                    Circle = True
                    Second_Empty = False

            if Third.collidepoint(pos) and Third_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (530, 310), 90, 20)
                    circleList.append(3)
                    Circle = False
                    Third_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (450,230), (600, 380), 20)
                    pygame.draw.line(wn, (8, 140, 120), (600, 230), (450, 380), 20)
                    xList.append(3)
                    Circle = True
                    Third_Empty = False

            if Fourth.collidepoint(pos) and Fourth_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (110, 520), 90, 20)
                    Circle = False
                    circleList.append(4)
                    Fourth_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (40,440), (180,580),20)
                    pygame.draw.line(wn, (8, 140, 120), (180, 440), (40, 580), 20)
                    xList.append(4)
                    Circle = True
                    Fourth_Empty = False

            if Fifth.collidepoint(pos) and Fifth_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (320, 520), 90, 20)
                    Circle = False
                    circleList.append(5)
                    Fifth_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (250,440), (380,590),20)
                    pygame.draw.line(wn, (8, 140, 120), (380, 440), (250, 590), 20)
                    xList.append(5)
                    Circle = True
                    Fifth_Empty = False

            if Sixth.collidepoint(pos) and Sixth_Empty:
                if Circle:
                    pygame.draw.circle(wn, (8, 140, 120), (530, 520), 90, 20)
                    Circle = False
                    circleList.append(6)
                    Sixth_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (450, 440), (600, 590), 20)
                    pygame.draw.line(wn, (8, 140, 120), (600, 440), (450, 590), 20)
                    xList.append(6)
                    Circle = True
                    Sixth_Empty = False

            if Seventh.collidepoint(pos) and Seventh_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (110, 730), 90, 20)
                    Circle = False
                    circleList.append(7)
                    Seventh_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (40,650), (180,800),20)
                    pygame.draw.line(wn, (8, 140, 120), (180, 650), (40, 800), 20)
                    xList.append(7)
                    Circle = True
                    Seventh_Empty = False

            if Eight.collidepoint(pos) and Eight_Empty:
                if Circle:
                    pygame.draw.circle(wn,(8, 140, 120), (320, 730), 90, 20)
                    Circle = False
                    circleList.append(8)
                    Eight_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (250,650), (380,800),20)
                    pygame.draw.line(wn, (8, 140, 120), (380, 650), (250, 800), 20)
                    xList.append(8)
                    Circle = True
                    Eight_Empty = False

            if Ninth.collidepoint(pos) and Ninth_Empty:
                if Circle:
                    pygame.draw.circle(wn, (8, 140, 120), (530, 730), 90, 20)
                    Circle = False
                    circleList.append(9)
                    Ninth_Empty = False
                else:
                    pygame.draw.line(wn, (8, 140, 120), (450, 650), (600, 800), 20)
                    pygame.draw.line(wn, (8, 140, 120), (600, 650), (450, 800), 20)
                    xList.append(9)
                    Circle = True
                    Ninth_Empty = False

            if 1 and 2 and 3 in circleList:
                pygame.draw.line(wn, (208, 240, 192), (10, 305), (630, 305), 20)
            elif 1 and 5 and 9 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)
            elif 1 and 4 and 7 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)

            elif 2 and 5 and 8 in circleList:
                pygame.draw.line(wn, (208, 240, 192), (10, 305), (630, 305), 20)
            elif 3 and 5 and 7 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)
            elif 3 and 6 and 9 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)
            elif 4 and 5 and 6 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)
            elif 7 and 8 and 9 in circleList:
                pygame.draw.line(wn, (208,240,192), (10, 305), (630, 305), 20)




    pygame.display.update()

pygame.quit()

  

Я знаю, что строка печатается в неправильном направлении, я намерен исправить это после того, как я это выясню, может действительно понадобиться чья-то помощь

Комментарии:

1. if 1 and 2 and 3 in circleList: и тому подобное работает не так, как вы предполагаете: он проверяет, является ли значение 1 истинным (оно есть, поскольку оно не равно 0), является ли 2 истинным (оно также есть), и если 3 in circleList это правда. Вы, вероятно, хотите if 1 in circleList and 2 in circleList and 3 in circleList ; аналогично для следующих elif строк.

2. 0 0 правильно… Это причина, по которой ваш код не работает. Для дальнейшего использования, если вы хотите избежать большого количества полученных вами отрицательных отзывов и получить лучшие ответы, вы должны предоставить минимальный объем кода, который приведет к получаемой вами ошибке. Людям намного проще отвечать на ваши вопросы

Ответ №1:

Во всех if 1 and 2 and 3 in circleList: строках вы должны попытаться заменить его на if 1 in circleList and 2 in circleList and 3 in circleList: , поскольку высказывание 1 and 2 and 3 in circleList на самом деле просто означает — если 1 — это значение, и если два — это значение, и если 3 находится в circleList, то продолжайте. Я надеюсь, вы понимаете, что исправление означает, что вам нужно проверить, есть ли 1 в circleList, есть ли 2 в circleList и есть ли в нем 3. Это также относится к elifs после него.