我正在为tic tac toe写一个程序,作为我正在上的一门课的作业。目前,我正在尝试创建一个使用海龟在皮查姆井字游戏。我的目的是有一个游戏,我运行程序,它开始随机选择一个玩家开始,然后显示被选择的玩家的海龟,一旦该玩家开始,他们可以使用箭头键移动海龟在棋盘周围,并按空格绘制一个x或o,然后它自动结束他们的回合并开始下一个玩家转身。这应该持续到一个或另一个连续三次宣布胜利者为止。到目前为止,我已经在Turtle中创建了一个3x3板,制作了一个玩家Turtle,并让它能够移动到9个方格中的任何一个方格的中心,然后在空间上绘制一个X或O。
我的问题开始于球员的转换我的意图是有一个for循环,将运行5次(这将给10个回合,只有9个空间),在这个for循环,我想有两个while循环(每个球员一个)。我定义了player turtles,这样我只需要在while循环中调用player_1,它就会创建一个可以在我的程序中控制的turtle。然后,我计划将while循环设置在一个true或false变量上,每当按下空格键将players标记放在板上时,变量将被更改,以便while循环结束并移动到下一个player。但我很快发现这个方法的问题是,我的玩家乌龟被无限地重新创建为while命令循环,因此当玩家试图移动这个片段时,它很快就会重置为其原始状态。
我可以看到需要发生的是,我需要找到一种方法,使while语句在等待玩家做出决定时保持不变,但我不知道什么样的命令可以做到这一点。有人知道我如何告诉程序等待while语句,直到海龟做出选择?
import turtle
Window = turtle.Screen()
Window.bgcolor()
Window.title("Tic Tac Toe")
# Drawing the Board
def border():
border_outer = turtle.Turtle()
border_outer.speed(0)
border_outer.penup()
border_outer.setposition(-375, -375)
border_outer.pendown()
border_outer.pensize(3)
for num in range(4):
border_outer.forward(750)
border_outer.left(90)
border_outer.hideturtle()
# inside border
border_inner1 = turtle.Turtle()
# border_inner1.color("red")
border_inner1.speed(0)
border_inner1.penup()
border_inner1.setposition(-125, 375)
border_inner1.pendown()
border_inner1.pensize(3)
border_inner1.right(90)
border_inner1.forward(750)
border_inner1.left(90)
border_inner1.forward(250)
border_inner1.left(90)
border_inner1.forward(750)
border_inner1.hideturtle()
border_inner2 = turtle.Turtle()
# border_inner2.color("red")
border_inner2.speed(0)
border_inner2.penup()
border_inner2.setposition(-375, 125)
border_inner2.pendown()
border_inner2.pensize(3)
border_inner2.forward(750)
border_inner2.right(90)
border_inner2.forward(250)
border_inner2.right(90)
border_inner2.forward(750)
border_inner2.hideturtle()
# Player 1 Turtle
def player_1():
# Player 1
global player
player = turtle.Turtle()
player.shape("circle")
player.penup()
player.color("blue")
player.speed()
playerspeed = 250
# Moving the player #1
def move_left():
x = player.xcor()
x -= playerspeed
if x < -375:
x = -250
player.setx(x)
def move_right():
x = player.xcor()
x += playerspeed
if x > 375:
x = 250
player.setx(x)
def move_down():
y = player.ycor()
y -= playerspeed
if y < -375:
y = -250
player.sety(y)
def move_up():
y = player.ycor()
y += playerspeed
if y > 375:
y = 250
player.sety(y)
def set_position():
x = player.xcor()
y = player.ycor()
player.goto(x, y - 50)
player.pendown()
player.pensize(10)
player.circle(50, None, None)
player.penup()
player.goto(x, y)
global flag
flag = False
# Keyboard Bindings for player 1
turtle.listen()
turtle.onkey(move_left, "Left")
turtle.onkey(move_right, "Right")
turtle.onkey(move_up, "Up")
turtle.onkey(move_down, "Down")
turtle.onkey(set_position, "space")
flag = 'false'
border()
while flag == True:
player_1
turtle.mainloop()