井字游戏问题?
Tic-Tac-Toe problems?
因此,对于我的编程基础 class 我的最后一个作业,我正在上学,你应该使用我们在 class 中学到的工具来创建你选择的程序。其中一个想法是剪刀石头布,但我认为这太基础了,所以我尝试制作一款井字游戏。
我终于完成了,我知道有很多更好的方法可以对此进行编程,使其更简单、重复更少、效率更高等。但是它有两个主要问题,我想看看它们是否可以修复.
我有一个问题,玩家可以在棋盘上继续相同的 spaces,即使那个 space 被选中。我在想,如果我制作一个董事会列表,记录人们在董事会上的位置,然后检查他们试图反对的地方,我可以做第一部分,但我不知道我将如何检查它在哪里他们正试图离开。
我还有一个问题,一旦 win 为真,它仍将 运行 程序的其余部分,直到它再次回到 while 命令的开头。我明白它为什么这样做但是有没有办法绕过它或者让它在 "true".
时自动停止
我试图查看两个不同的 while 命令是否可以工作,但我认为它只会产生更多问题。谢谢您的帮助!
#Jacob Gilger
#4/20/17
#Drawing a house with elif
import turtle
def X1(t):
t.penup()
t.setposition(-95,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X2(t):
t.penup()
t.setposition(-45,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X3(t):
t.penup()
t.setposition(5,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X4(t):
t.penup()
t.setposition(-95,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X5(t):
t.penup()
t.setposition(-45,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X6(t):
t.penup()
t.setposition(5,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X7(t):
t.penup()
t.setposition(-95,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X8(t):
t.penup()
t.setposition(-45,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X9(t):
t.penup()
t.setposition(5,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def O1(t):
t.penup()
t.setposition(-77.5,10)
t.pendown()
t.circle(17.5)
def O2(t):
t.penup()
t.setposition(-27.5,10)
t.pendown()
t.circle(17.5)
def O3(t):
t.penup()
t.setposition(22.5,10)
t.pendown()
t.circle(17.5)
def O4(t):
t.penup()
t.setposition(-77.5,60)
t.pendown()
t.circle(17.5)
def O5(t):
t.penup()
t.setposition(-27.5,60)
t.pendown()
t.circle(17.5)
def O6(t):
t.penup()
t.setposition(22.5,60)
t.pendown()
t.circle(17.5)
def O7(t):
t.penup()
t.setposition(-77.5,110)
t.pendown()
t.circle(17.5)
def O8(t):
t.penup()
t.setposition(-27.5,110)
t.pendown()
t.circle(17.5)
def O9(t):
t.penup()
t.setposition(22.5,110)
t.pendown()
t.circle(17.5)
def menu():
print("-----------------------------")
print("| ~Tic-Tac-Toe~ |")
print("| 1 ~ Bottom Left |")
print("| 2 ~ Bottom Center |")
print("| 3 ~ Bottom Right |")
print("| 4 ~ Middle Left |")
print("| 5 ~ Middle Center |")
print("| 6 ~ Middle Right |")
print("| 7 ~ Top Left |")
print("| 8 ~ Top Center |")
print("| 9 ~ Top Right |")
print("-----------------------------")
def main():
t=turtle.Turtle()
t.speed(0)
t.hideturtle()
x=-50
y=100
for loop in range(2):
t.penup()
t.setposition(-100,y)
t.pendown()
t.forward(150)
y=y-50
t.right(90)
for loop in range(2):
t.penup()
t.setposition(x, 150)
t.pendown()
t.forward(150)
x=x+50
t.left(90)
playerOne=[]
playerTwo=[]
winPossible=[1,2,3]
winPossible2=[4,5,6]
winPossible3=[7,8,9]
winPossible4=[1,4,7]
winPossible5=[2,5,8]
winPossible6=[3,6,9]
winPossible7=[1,5,9]
winPossible8=[3,5,7]
menu()
win="false"
while(win != "true"):
option=input("Choose where to draw an X.")
if(option=="1"):
X1(t)
playerOne.append(1)
elif(option=="2"):
X2(t)
playerOne.append(2)
elif(option=="3"):
X3(t)
playerOne.append(3)
elif(option=="4"):
X4(t)
playerOne.append(4)
elif(option=="5"):
X5(t)
playerOne.append(5)
elif(option=="6"):
X6(t)
playerOne.append(6)
elif(option=="7"):
X7(t)
playerOne.append(7)
elif(option=="8"):
X8(t)
playerOne.append(8)
elif(option=="9"):
X9(t)
playerOne.append(9)
elif(option=="end"):
win="true"
option=input("Choose where to draw an O.")
if(option=="1"):
O1(t)
playerTwo.append(1)
elif(option=="2"):
O2(t)
playerTwo.append(2)
elif(option=="3"):
O3(t)
playerTwo.append(3)
elif(option=="4"):
O4(t)
playerTwo.append(4)
elif(option=="5"):
O5(t)
playerTwo.append(5)
elif(option=="6"):
O6(t)
playerTwo.append(6)
elif(option=="7"):
O7(t)
playerTwo.append(7)
elif(option=="8"):
O8(t)
playerTwo.append(8)
elif(option=="9"):
O9(t)
playerTwo.append(9)
elif(option=="end"):
win="true"
t.penup()
t.forward(10)
#pointless forward so O will be drawn now instead of later
if(set(playerOne)>=set(winPossible)):
win="true"
elif(set(playerOne)>=set(winPossible2)):
win="true"
elif(set(playerOne)>=set(winPossible3)):
win="true"
elif(set(playerOne)>=set(winPossible4)):
win="true"
elif(set(playerOne)>=set(winPossible5)):
win="true"
elif(set(playerOne)>=set(winPossible6)):
win="true"
elif(set(playerOne)>=set(winPossible7)):
win="true"
elif(set(playerOne)>=set(winPossible8)):
win="true"
if(set(playerTwo)>=set(winPossible)):
win="true"
elif(set(playerTwo)>=set(winPossible2)):
win="true"
elif(set(playerTwo)>=set(winPossible3)):
win="true"
elif(set(playerTwo)>=set(winPossible4)):
win="true"
elif(set(playerTwo)>=set(winPossible5)):
win="true"
elif(set(playerTwo)>=set(winPossible6)):
win="true"
elif(set(playerTwo)>=set(winPossible7)):
win="true"
elif(set(playerTwo)>=set(winPossible8)):
win="true"
main()
I have a problem that a player can go on the same spaces on the board
even if that space is taken.
这是您可以使用的创可贴。此代码在哪里:
option=input("Choose where to draw an X.")
改为:
option = None
while not option or int(option) in playerOne or int(option) in playerTwo:
option = input("Choose where to draw an X.")
执行相同但略有修改的操作,修复您找到的位置:
option=input("Choose where to draw an O.")
这不是最佳选择,但可以帮助您克服这个特殊障碍。
I also had a problem that once win was true it will still run the rest
of the program until it gets back to the start of the while command
again.
这需要您将测试逻辑封装到一个函数中,正如其他人在他们的评论中指出的那样,并在每个玩家的移动之后应用它,而不是在两个玩家移动之后应用它。
因此,对于我的编程基础 class 我的最后一个作业,我正在上学,你应该使用我们在 class 中学到的工具来创建你选择的程序。其中一个想法是剪刀石头布,但我认为这太基础了,所以我尝试制作一款井字游戏。
我终于完成了,我知道有很多更好的方法可以对此进行编程,使其更简单、重复更少、效率更高等。但是它有两个主要问题,我想看看它们是否可以修复.
我有一个问题,玩家可以在棋盘上继续相同的 spaces,即使那个 space 被选中。我在想,如果我制作一个董事会列表,记录人们在董事会上的位置,然后检查他们试图反对的地方,我可以做第一部分,但我不知道我将如何检查它在哪里他们正试图离开。
我还有一个问题,一旦 win 为真,它仍将 运行 程序的其余部分,直到它再次回到 while 命令的开头。我明白它为什么这样做但是有没有办法绕过它或者让它在 "true".
时自动停止我试图查看两个不同的 while 命令是否可以工作,但我认为它只会产生更多问题。谢谢您的帮助!
#Jacob Gilger
#4/20/17
#Drawing a house with elif
import turtle
def X1(t):
t.penup()
t.setposition(-95,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X2(t):
t.penup()
t.setposition(-45,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X3(t):
t.penup()
t.setposition(5,10)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,10)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X4(t):
t.penup()
t.setposition(-95,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X5(t):
t.penup()
t.setposition(-45,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X6(t):
t.penup()
t.setposition(5,60)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,60)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X7(t):
t.penup()
t.setposition(-95,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-60,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X8(t):
t.penup()
t.setposition(-45,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(-10,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def X9(t):
t.penup()
t.setposition(5,110)
t.pendown()
t.left(45)
t.forward(50)
t.penup()
t.setposition(40,110)
t.pendown()
t.left(90)
t.forward(50)
t.right(135)
def O1(t):
t.penup()
t.setposition(-77.5,10)
t.pendown()
t.circle(17.5)
def O2(t):
t.penup()
t.setposition(-27.5,10)
t.pendown()
t.circle(17.5)
def O3(t):
t.penup()
t.setposition(22.5,10)
t.pendown()
t.circle(17.5)
def O4(t):
t.penup()
t.setposition(-77.5,60)
t.pendown()
t.circle(17.5)
def O5(t):
t.penup()
t.setposition(-27.5,60)
t.pendown()
t.circle(17.5)
def O6(t):
t.penup()
t.setposition(22.5,60)
t.pendown()
t.circle(17.5)
def O7(t):
t.penup()
t.setposition(-77.5,110)
t.pendown()
t.circle(17.5)
def O8(t):
t.penup()
t.setposition(-27.5,110)
t.pendown()
t.circle(17.5)
def O9(t):
t.penup()
t.setposition(22.5,110)
t.pendown()
t.circle(17.5)
def menu():
print("-----------------------------")
print("| ~Tic-Tac-Toe~ |")
print("| 1 ~ Bottom Left |")
print("| 2 ~ Bottom Center |")
print("| 3 ~ Bottom Right |")
print("| 4 ~ Middle Left |")
print("| 5 ~ Middle Center |")
print("| 6 ~ Middle Right |")
print("| 7 ~ Top Left |")
print("| 8 ~ Top Center |")
print("| 9 ~ Top Right |")
print("-----------------------------")
def main():
t=turtle.Turtle()
t.speed(0)
t.hideturtle()
x=-50
y=100
for loop in range(2):
t.penup()
t.setposition(-100,y)
t.pendown()
t.forward(150)
y=y-50
t.right(90)
for loop in range(2):
t.penup()
t.setposition(x, 150)
t.pendown()
t.forward(150)
x=x+50
t.left(90)
playerOne=[]
playerTwo=[]
winPossible=[1,2,3]
winPossible2=[4,5,6]
winPossible3=[7,8,9]
winPossible4=[1,4,7]
winPossible5=[2,5,8]
winPossible6=[3,6,9]
winPossible7=[1,5,9]
winPossible8=[3,5,7]
menu()
win="false"
while(win != "true"):
option=input("Choose where to draw an X.")
if(option=="1"):
X1(t)
playerOne.append(1)
elif(option=="2"):
X2(t)
playerOne.append(2)
elif(option=="3"):
X3(t)
playerOne.append(3)
elif(option=="4"):
X4(t)
playerOne.append(4)
elif(option=="5"):
X5(t)
playerOne.append(5)
elif(option=="6"):
X6(t)
playerOne.append(6)
elif(option=="7"):
X7(t)
playerOne.append(7)
elif(option=="8"):
X8(t)
playerOne.append(8)
elif(option=="9"):
X9(t)
playerOne.append(9)
elif(option=="end"):
win="true"
option=input("Choose where to draw an O.")
if(option=="1"):
O1(t)
playerTwo.append(1)
elif(option=="2"):
O2(t)
playerTwo.append(2)
elif(option=="3"):
O3(t)
playerTwo.append(3)
elif(option=="4"):
O4(t)
playerTwo.append(4)
elif(option=="5"):
O5(t)
playerTwo.append(5)
elif(option=="6"):
O6(t)
playerTwo.append(6)
elif(option=="7"):
O7(t)
playerTwo.append(7)
elif(option=="8"):
O8(t)
playerTwo.append(8)
elif(option=="9"):
O9(t)
playerTwo.append(9)
elif(option=="end"):
win="true"
t.penup()
t.forward(10)
#pointless forward so O will be drawn now instead of later
if(set(playerOne)>=set(winPossible)):
win="true"
elif(set(playerOne)>=set(winPossible2)):
win="true"
elif(set(playerOne)>=set(winPossible3)):
win="true"
elif(set(playerOne)>=set(winPossible4)):
win="true"
elif(set(playerOne)>=set(winPossible5)):
win="true"
elif(set(playerOne)>=set(winPossible6)):
win="true"
elif(set(playerOne)>=set(winPossible7)):
win="true"
elif(set(playerOne)>=set(winPossible8)):
win="true"
if(set(playerTwo)>=set(winPossible)):
win="true"
elif(set(playerTwo)>=set(winPossible2)):
win="true"
elif(set(playerTwo)>=set(winPossible3)):
win="true"
elif(set(playerTwo)>=set(winPossible4)):
win="true"
elif(set(playerTwo)>=set(winPossible5)):
win="true"
elif(set(playerTwo)>=set(winPossible6)):
win="true"
elif(set(playerTwo)>=set(winPossible7)):
win="true"
elif(set(playerTwo)>=set(winPossible8)):
win="true"
main()
I have a problem that a player can go on the same spaces on the board even if that space is taken.
这是您可以使用的创可贴。此代码在哪里:
option=input("Choose where to draw an X.")
改为:
option = None
while not option or int(option) in playerOne or int(option) in playerTwo:
option = input("Choose where to draw an X.")
执行相同但略有修改的操作,修复您找到的位置:
option=input("Choose where to draw an O.")
这不是最佳选择,但可以帮助您克服这个特殊障碍。
I also had a problem that once win was true it will still run the rest of the program until it gets back to the start of the while command again.
这需要您将测试逻辑封装到一个函数中,正如其他人在他们的评论中指出的那样,并在每个玩家的移动之后应用它,而不是在两个玩家移动之后应用它。