Питон черепаха крестики-нолики - PullRequest
0 голосов
/ 22 февраля 2019

так что я новичок в python и запрограммировал крестики-нолики с Ai, который играет против вас.Так что все работает, но я использовал текстовые поля, чтобы сообщить Ай, что игрок выбрал.Теперь я хочу обновить свою игру, чтобы игрок мог нажать на поле, которое он хочет заполнить, вместо того, чтобы вводить его в текстовое поле.Поэтому моя идея заключалась в том, чтобы использовать onscreenclick(), но у меня есть некоторые проблемы.onscreenclick() возвращает координаты, которые были нажаты на холсте, и я хочу использовать функцию, чтобы определить, в каком окне игрок нажал, я получил это:

from turtle import * 

def whichbox(x,y): #obviously i got 9 boxes but this is just an example for box 1
    if x<-40 and x>-120:
        if y>40 and y<120:
            return 1
        else:
            return 0
    else:
        return 0

box=onscreenclick(whichbox)
print(box)

Очевидно, что я хочу, чтобы поле было 0или 1 в этом случае, но вместо этого значение поля равно None.Кто-нибудь знает, как это исправить?Он должен что-то делать с переменной box, потому что, если заменить return 1 на print("1"), это работает.Я предполагаю, что переменная определяется быстро.Второй вопрос, который у меня возникает, - возможно ли приостановить программу, пока игрок не нажмет на поле, но важнее сначала посмотреть на первую проблему.Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вот урезанный пример из кода, на который я ссылался в моем комментарии .Если вы щелкнете по квадрату, он выведет в окно консоли его номер от 0 до 8:

from turtle import Turtle, mainloop

CURSOR_SIZE = 20
SQUARE_SIZE = 60

def drawBoard():
    for j in range(3):
        for i in range(3):
            square = Turtle('square', visible=False)
            square.shapesize(SQUARE_SIZE / CURSOR_SIZE)
            square.fillcolor('white')
            square.penup()
            square.goto((i - 1) * (SQUARE_SIZE + 2), (j - 1) * (SQUARE_SIZE + 2))

            number = j * 3 + i
            square.onclick(lambda x, y, number=number: whichsquare(number))
            square.showturtle()

def whichsquare(number):
    print(number)

drawBoard()

mainloop()

Расшифровка позиции не требуется - мы разрешим черепахе справиться с этим за нас.

0 голосов
/ 23 февраля 2019

Предполагая, что вы назвали свой Screen () в модуле черепахи, вы должны затем поставить

screen.onscreenclick(whichbox)

вместо:

onscreenclick(whichbox)

Пример:

from turtle import Turtle, Screen
turtle = Turtle()
screen = Screen()

def ExampleFunction():
    return 7

screen.onscreenclick(ExampleFunction)

Кроме того, Джейсон Харпер прав, когда говорит, что функция onscreenclick () не может вернуть какое-либо значение.Таким образом, вы можете включить функцию print в вашу функцию whichbox (), чтобы вывести значение, например:

def whichbox(x,y): 
    if x<-40 and x>-120:
        if y>40 and y<120:
            print(1)
            return 1
        else:
            print(0)
            return 0
    else:
        print(0)
        return 0

В качестве альтернативы, если вы хотите сохранить оператор печати вне whichbox (),Вы также можете сделать следующее:

screen.onscreenclick(lambda x, y: print(whichbox(x, y)))

, которая создает лямбда-функцию, которая передает (x, y) из onscreenclick () в оператор печати, содержащий whichbox ().

...