簡體   English   中英

井字游戲問題?

[英]Tic-Tac-Toe problems?

因此,對於我上學的編程班基礎的最后一次分配,您應該使用我們在課堂上學到的工具來創建自己選擇的程序。 其中一個想法是剪刀石頭布,但我認為這太基礎了,所以我嘗試制作井字游戲。

我終於完成了工作,我知道有很多更好的方法可以對其進行編程,以使其更簡單,重復性更小,效率更高,等等。但是我有兩個主要的問題,我想看看它們是否可以解決。

我有一個問題,即使占用了一個空間,玩家也可以在棋盤上的相同空間上走。 我在想,也許如果我制作一個董事會名單,記錄下人們在董事會中去過的地方,然后檢查他們在哪里試圖與之背道而馳,那我可以做第一部分,但我不知道如何針對哪里去做他們正在努力去。

我還遇到一個問題,一旦獲勝,它將繼續運行程序的其余部分,直到再次返回while命令的開始為止。 我知道為什么這樣做,但是有一種方法可以繞過它,或者當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()

我有一個問題,即使占用了一個空間,玩家也可以在棋盤上的相同空間上走。

這是您可以使用的創可貼。 這段代碼在哪里:

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.")

這不是最佳選擇,但可以幫助您克服這一特殊障礙。

我還遇到一個問題,一旦獲勝,它將繼續運行程序的其余部分,直到再次返回while命令的開始為止。

正如其他人在評論中所指出的那樣,這需要您將測試邏輯封裝到一個函數中,並在每個參與者移動之后而不是在兩個都消失之后應用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM