如何在基于海龟的gam中交替转弯

2024-10-02 12:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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),但我现在正在为转弯而挣扎。上面的节选是我最可能需要的主题。我想知道是否有人知道如何使用海龟图形中的事件来改变一个变量,或者如果有人知道一个好的交流系统,那就太好了!在


Tags: true游戏ifusruslturnprintx1
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:15

我把这个问题看作是一个挑战,要编写尽可能少的turtle代码来实现一个有效的tic-tac-toe接口。下面的代码在X的和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

相关问题 更多 >

    热门问题