Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?

Wie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?

王林
王林nach vorne
2023-05-08 23:43:172341Durchsuche

Fenster

Universelles Fenster, alle Implementierungsfenster können einfach geändert und verwendet werden:

from tkinter import *
root = Tk()         #窗口名称
root.title("憨憨制作的三子棋")
f1=Frame(root)
f1.pack()
w1 = Canvas(f1, width=580,height=580,background='lightcyan')#创建一个画布,设置大小和背景颜色
w1.pack()
root.mainloop()

Wie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?

Zeichnen Sie das Schachbrett

#画出棋盘
for i in range(0, 4):
    w1.create_line(i * 180 + 20, 20, i * 180 + 20, 560)
    w1.create_line(20, i * 180 + 20, 560, i * 180 + 20)

Wie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?

Zeichnen Sie horizontale und vertikale Linien, vier horizontale Linien und vier vertikale Linien, um neun Gitter zu erzeugen . Sie können auch zwei horizontale und zwei vertikale Linien zeichnen, was der Tic-Tac-Toe-Form näher kommt. Zeichnen Sie einfach ein paar Linien weniger, zum Beispiel:

for i in range(1, 3):
    w1.create_line(i * 180 + 20, 20, i * 180 + 20, 560)
    w1.create_line(20, i * 180 + 20, 560, i * 180 + 20)

Wie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?

num = 0       #记录点击的次数,用来决定点击后该画哪种图形
A = np.full((3, 3), 0)            #记录每个位置的图形

Algorithmus

Nach jedem Klick müssen wir ein Bild zeichnen und beurteilen, ob die Gewinnbedingungen erfüllt sind. „Stellen Sie die Funktion ein.“ Das Klicken auf den verbleibenden Teil des Quadrats führt zu einer Fehlausrichtung der Grafiken. Durch weitere Analyse wurde festgestellt, dass das angeklickte Quadrat durch die jeweilige Lokalisierung der horizontalen und vertikalen Koordinaten der angeklickten Position bestimmt werden kann.

def dawn(event):
    global w1
    global num, A
    for i in range(0, 3):
        for j in range(0, 3):
            if 20 + j * 180 < event.y and event.y <= 20 + (j+1) * 180:
                break
        if 20 + i * 180 <= event.x and event.x <= 20 + (i+1) * 180:
            break
    if num % 2 == 0 and A[i][j] == 0:
        A[i][j] = 1
        w1.create_line(110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),
                       110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))
        w1.create_line(110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),
                       110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))
        num += 1
    if num % 2 != 0 and A[i][j] == 0:
        A[i][j] = 2
        w1.create_oval(20 + 180 * i, 20 + 180 * j, 20 + 180 * (i + 1), 20 + 180 * (j + 1))
        num += 1
    if A[0][0] == A[0][1] == A[0][2] == 2 or A[1][0] == A[1][1] == A[1][2] == 2 or A[2][0] == A[2][1] == A[2][
        2] == 2 or \
            A[0][0] == A[1][0] == A[2][0] == 2 or A[0][1] == A[1][1] == A[2][1] == 2 or A[0][2] == A[1][2] == \
            A[2][
                2] == 2 or \
            A[0][0] == A[1][1] == A[2][2] == 2 or A[2][0] == A[1][1] == A[0][2] == 2:
        tkinter.messagebox.showinfo(&#39;消息提示&#39;, &#39;圆圈获胜&#39;)
    elif A[0][0] == A[0][1] == A[0][2] == 1 or A[1][0] == A[1][1] == A[1][2] == 1 or A[2][0] == A[2][1] == A[2][
        2] == 1 or \
            A[0][0] == A[1][0] == A[2][0] == 1 or A[0][1] == A[1][1] == A[2][1] == 1 or A[0][2] == A[1][2] == \
            A[2][
                2] == 1 or \
            A[0][0] == A[1][1] == A[2][2] == 1 or A[2][0] == A[1][1] == A[0][2] == 1:
        tkinter.messagebox.showinfo(&#39;消息提示&#39;, &#39;叉号获胜&#39;)
w1.bind("<Button -1>", dawn)

Nachdem wir die Position bestimmt haben, beginnen wir zu beurteilen, ob die aktuelle Position Grafiken zeichnen kann und welche Grafiken gezeichnet werden sollten. Das Zeichnen ❌ ist mühsamer und erfordert komplexe Berechnungen, aber das Zeichnen ⚪ ist relativ einfach.

for i in range(0, 3):
        for j in range(0, 3):
            if 20 + j * 180 < event.y and event.y <= 20 + (j+1) * 180:
                break
        if 20 + i * 180 <= event.x and event.x <= 20 + (i+1) * 180:
            break

Nach der Auslosung müssen wir beurteilen, ob die Gewinnbedingungen erfüllt sind. Ich habe mir hier keine einfache Methode ausgedacht, aber zum Glück gibt es nur eine Handvoll Gewinnsituationen, nur acht (3 horizontal, 3 vertikal und zwei). Listen Sie also acht Situationen auf, um festzustellen, ob die Gewinnbedingungen erfüllt sind. Dabei müssen beide Grafiken aufgeführt werden.

if num % 2 == 0 and A[i][j] == 0:            #若为偶数就画叉号
        A[i][j] = 1
        w1.create_line(110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),
                       110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))
        w1.create_line(110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),
                       110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))
        num += 1
    if num % 2 != 0 and A[i][j] == 0:        #若为奇数就画圆圈
        A[i][j] = 2
        w1.create_oval(20 + 180 * i, 20 + 180 * j, 20 + 180 * (i + 1), 20 + 180 * (j + 1))
        num += 1

Legen Sie abschließend die Einstellungen für die Klickzeiterfassung und die Schaltfläche zum Beenden fest.

if A[0][0] == A[0][1] == A[0][2] == 2 or A[1][0] == A[1][1] == A[1][2] == 2 or A[2][0] == A[2][1] == A[2][
        2] == 2 or \
            A[0][0] == A[1][0] == A[2][0] == 2 or A[0][1] == A[1][1] == A[2][1] == 2 or A[0][2] == A[1][2] == \
            A[2][
                2] == 2 or \
            A[0][0] == A[1][1] == A[2][2] == 2 or A[2][0] == A[1][1] == A[0][2] == 2:
        tkinter.messagebox.showinfo(&#39;消息提示&#39;, &#39;圆圈获胜&#39;)
    elif A[0][0] == A[0][1] == A[0][2] == 1 or A[1][0] == A[1][1] == A[1][2] == 1 or A[2][0] == A[2][1] == A[2][
        2] == 1 or \
            A[0][0] == A[1][0] == A[2][0] == 1 or A[0][1] == A[1][1] == A[2][1] == 1 or A[0][2] == A[1][2] == \
            A[2][
                2] == 1 or \
            A[0][0] == A[1][1] == A[2][2] == 1 or A[2][0] == A[1][1] == A[0][2] == 1:
        tkinter.messagebox.showinfo(&#39;消息提示&#39;, &#39;叉号获胜&#39;)

Jeder Code des Spiels wurde hier erklärt.

Anbei ist der vollständige Code:

w1.bind("<Button -1>", dawn)
def quit():
    root.quit()
button1 = Button(root, text="退出", font=(&#39;楷体&#39;, 20), command=quit)
button1.pack()

Das obige ist der detaillierte Inhalt vonWie schreibe ich ein einfaches Tic-Tac-Toe-Spiel in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen