如何在基于乌龟的游戏中轮换

时间:2016-12-09 01:00:42

标签: python turtle-graphics

print("Finished Loading!") 
print("x's turn")
xturn = True


if xturn == True:
    usl.onclick(x1)
    usc.onclick(yo)
    usr.onclick(x3)
    csr.onclick(x4)
    csl.onclick(x5)
    cs.onclick(x6)
    dsl.onclick(x7)
    dsc.onclick(x8)
    dsr.onclick(x9)
else:
    print("o's Turn")
    usl.onclick(o1)

我正在为一个班级创建一个Tic-tac-toe游戏并完成游戏机制(当有人点击一个盒子制作x / o时)但我现在正在努力转弯。以上摘录是我最需要动员的内容。我想知道是否有人知道如何使用乌龟图形中的事件来改变变量,或者是否有人知道一个好的系统来交替转弯会很棒!

1 个答案:

答案 0 :(得分:0)

我把这个问题作为一个挑战来编写尽可能少的乌龟代码来实现一个工作的tic-tac-toe接口。下面的代码在X& s& O转身并且不会让一个方格被重用。它不会尝试为游戏打分,也不会自己玩游戏,它只是构建智能游戏的最小界面:

from turtle import Turtle, Screen

UNIT_SIZE = 80
HALF_GRID_SIZE = 3 * UNIT_SIZE / 2
FONT_SIZE = 48  # adjust to taste

x_turn = True

def choosen(turtle):
    global x_turn

    turtle.onclick(None)  # taken so no longer responds

    x, y = turtle.position()
    magic_marker.goto(x, y - FONT_SIZE / 2)
    magic_marker.write("X" if x_turn else "O", font=("Arial", FONT_SIZE, "bold"), align="center")

    x_turn = not x_turn

magic_marker = Turtle(visible=False)
magic_marker.speed("fastest")
magic_marker.penup()

for row in range(-UNIT_SIZE, UNIT_SIZE + 1, UNIT_SIZE):
    if row >= 0:
        magic_marker.goto(-HALF_GRID_SIZE, row - UNIT_SIZE / 2)
        magic_marker.pendown()
        magic_marker.setx(HALF_GRID_SIZE)
        magic_marker.penup()

    for column in range(-UNIT_SIZE, UNIT_SIZE + 1, UNIT_SIZE):

        if column >= 0:
            magic_marker.goto(column - UNIT_SIZE / 2, -HALF_GRID_SIZE)
            magic_marker.pendown()
            magic_marker.sety(HALF_GRID_SIZE)
            magic_marker.penup()

        turtle = Turtle(shape="square", visible=False)
        turtle.shapesize(0.8 * (UNIT_SIZE / 20))  # 0.8 = a safety margin
        turtle.color("white")
        turtle.penup()
        turtle.goto(column, row)
        turtle.showturtle()  # still white on white but not clickable if not visible

        turtle.onclick(lambda x, y, t = turtle: choosen(t))

screen = Screen()
screen.mainloop()

它使用点击事件并将控制权交给主循环,以便其他事件也可以激活。

enter image description here