[PYTHON] 〇✕ Ich habe ein Spiel gemacht

Motivation

Als ich klein war, gab es eine Zeit, in der es mein Boom war, in kurzer Zeit mit meinen Freunden das Spiel der dreiäugigen Aufstellung zu spielen. Also habe ich beschlossen, es dieses Mal zu machen.


Ausführungsergebnis

Screenshot (39) .png


Inhalt

Machen Sie Bildschirme und Schaltflächen

from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3

class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))


def main():
    root = Tk()
    root.title('〇✕ Spiel')
    TictapApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

〇 und ✕ werden angezeigt

def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')


Denken Sie an die Taste, die Sie gedrückt haben


def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0


Beurteilung, ob die dritte Zeile in einer Reihe steht

    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

Informieren Sie den Sieg oder die Niederlage

   def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Glückwunsch!', 'Führender Sieg')
        else:
            messagebox.showinfo('Glückwunsch!', 'Zweiter Angriffssieg')
        self.finish = 1

Wenn Sie sich nicht niederlassen können

    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()

Quellcode

from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3


class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))

    def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')

    def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

    def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Glückwunsch!', 'Führender Sieg')
        else:
            messagebox.showinfo('Glückwunsch!', 'Zweiter Angriffssieg')
        self.finish = 1

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()


def main():
    root = Tk()
    root.title('OX-Spiel')
    TictacApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

Eindrücke, die ich gemacht habe

Ich schrieb das Programm, während ich mir "Ich habe versucht, eine GUI mit Python und Tkinter nebeneinander zu erstellen" ansah, auf das ich mich diesmal bezog, aber ich überprüfte, was ich tat. 〇✕ Ich hatte große Probleme, nur ein Spiel zu machen. Auch diesmal gab es etwas, auf das ich mich beziehen konnte, aber ich dachte, es wäre sehr schwierig, es von Grund auf neu zu machen. Von nun an beschloss ich zu studieren, damit ich es von Grund auf selbst schaffen konnte.


Verweise

Recommended Posts

〇✕ Ich habe ein Spiel gemacht
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe einen Python-Text gemacht
Ich habe einen Zwietrachtbot gemacht
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Ren’py ein Einführungsspiel für das Schulfest gemacht
Ich habe mit Sense HAT ein gefallenes Monospiel gemacht
Ich habe eine C ++ - Lernseite erstellt
Ich habe einen Line-Bot mit Python gemacht!
Ich habe ein CUI-basiertes Übersetzungsskript erstellt (2)
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe mit Python eine Lotterie gemacht.
Ich habe ein CUI-basiertes Übersetzungsskript erstellt
Zura machte wie ein Lebensspiel
Ich habe mit Python einen Daemon erstellt
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe ein Numer0n-Kampfspiel in Java gemacht (ich habe auch KI gemacht)
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich berührte "Orator" und machte mir eine Notiz
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Anfänger: Ich habe einen Launcher mit dem Wörterbuch erstellt
Ich habe einen Gesprächspartner wie Siri gemacht
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Hex-Map erstellt
Ich habe einen Hanko-Generator mit GAN gemacht
Ich habe ein automatisches Stempelwerkzeug für den Browser erstellt.
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe ein Spiel namens Battle Ship mit Pygame und Tkinter gemacht
Ich habe einen Pokerspielserver Chat-Holdem mit Websocket mit Python erstellt
Lass uns ein Squashspiel machen
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe einen Ersatz2-Algorithmus für uWSGI billiger gemacht
Ich habe ein nützliches Tool für Digital Ocean erstellt
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Ich möchte ein Spiel mit Python machen
Ich habe ein verrücktes Ding namens getipptes Tupel gemacht
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe ein Router-Konfigurationssammlungstool Config Collecor erstellt
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Ich habe einen Downloader für wortverteilte Ausdrücke erstellt
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe einen sqlite3.OperationalError
Ich habe einen Ansible-Installer gemacht
Ich habe ein Tool erstellt, um neue Artikel zu erhalten