为了账号安全,请及时绑定邮箱和手机立即绑定

蟒龟井字游戏

蟒龟井字游戏

郎朗坤 2021-11-16 09:52:12
所以我是 python 的新手,我用 Ai 编写了一个 tic tac toe 来对抗你。所以一切正常,但我使用文本框来通知 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 0box=onscreenclick(whichbox)print(box)很明显,在这种情况下,我希望 box 为 0 或 1,但 box 的值为None. 有谁知道如何解决这一问题?它必须对变量做一些事情,box因为 i 如果return 1用print("1")它替换它可以工作。我假设变量被定义得很快。我的第二个问题是是否有可能暂停程序直到玩家点击一个框,但首先看看第一个问题更重要。提前致谢:)
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

假设您已经在海龟模块中命名了 Screen(),那么您应该将


screen.onscreenclick(whichbox)

代替:


onscreenclick(whichbox)

例子:


from turtle import Turtle, Screen

turtle = Turtle()

screen = Screen()


def ExampleFunction():

    return 7


screen.onscreenclick(ExampleFunction)

此外,当 jasonharper 说 onscreenclick() 函数无法返回任何值时,他是正确的。因此,您可以在函数 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)))

它创建了一个 lambda 函数,该函数将 (x, y) 从 onscreenclick() 提供给包含 whichbox() 的打印语句。


查看完整回答
反对 回复 2021-11-16
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

这是我在评论中链接到的代码中的一个精简示例。如果您单击一个方块,它将在控制台窗口中打印其编号,从 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()

不涉及位置解码——我们让乌龟为我们处理。


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信