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

王林
Freigeben: 2023-05-08 23:43:17
nach vorne
2392 Leute haben es durchsucht

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()
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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

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

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)
Nach dem Login kopieren

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 dem Login kopieren

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
Nach dem Login kopieren

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;)
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage