Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)

Lassen Sie uns die Othello-Klasse Teil 2 erklären

Reden wir über Schimmelpilze

Sie haben eine Blutgruppe, richtig? Unabhängig davon, ob es wahr ist oder nicht, wie A-Typ, B-Typ, O-Typ, AB-Typ usw., hat der Typ seine eigenen Eigenschaften, wie "A-Typ, der akribisch ist" und "B-Typ, der egoistisch ist". Bei der Programmierung werden Typen verwendet, um wichtige Unterteilungen wie Blutgruppen vorzunehmen.

Ich habe bisher viel über ** Variablen ** gesprochen, aber ich habe es nicht gewagt, Typen zu erwähnen. Ich erklärte, dass das Array eine Klasse namens list () ist und die Wörterbuchvariablen auch eine Klasse namens dict () sind. Der Datentyp im Programm repräsentiert ebenso wie die Blutgruppe die Art der Daten.

Datentypname Datentyp Beschreibung
String str "Brief"Oder'Brief'
ganze Zahl int +-Numerischer Wert
Schwimmende Fraktion float +-Schwimmende Fraktion
Imaginäre Zahl complex +-Realteil+-Imaginäre Zahl部j
Authentizität bool Richtig oder falsch
Terminzeit datetime Datum (und Uhrzeit
Liste (Array) list Array unabhängig vom Datentyp
Taple (Referenzsequenz) tuple Array unabhängig vom Datentyp
Set (eindeutiges Array) set Blockarray mit eindeutigen und nicht in Ordnung befindlichen Daten
Wörterbuch (Keymap-Array) dict Schlüssel vs. Datenarray

In Python werden bei Verwendung von Variablen die Typen ohne besondere Berücksichtigung zugewiesen. Dies wird als "dynamisches Tippen" bezeichnet. Wenn Sie beispielsweise "age = 12" schreiben, ändert Python den Typ in int (). Um den zugewiesenen Typ herauszufinden, können Sie Typ (Alter) eingeben, um den Typ herauszufinden, der der Variablen Alter zugewiesen ist. Wie ich letztes Mal geschrieben habe, sind alle Typen Klassen, die die Funktionen enthalten, die zur Behandlung des Datentyps erforderlich sind. Wenn es einem unbeabsichtigten Typ zugewiesen ist, können Sie es explizit mit float () usw. angeben oder den Typ konvertieren.

Erklärung der Othello-Spielquelle (2) Funktionen der Othello-Klasse

Tastatureingabe

Erstens ist die Funktion, die Tastatureingaben ausführt. Zeigt die als Argument übergebene Zeichenfolge an und wartet auf Tastatureingaben. Wenn Sie die Eingabetaste leer drücken oder einen anderen Wert als 1 bis 8 eingeben, kehren Sie erneut zur Tastatureingabe zurück. Sobald die richtige Zahl eingegeben wurde, konvertiert int () sie zurück in ** Ganzzahl **. Wichtige Werte für diese Othello-Klasse sind die Nummern 1-8 für X und Y. Selbst wenn es sich um ein grafisches Othello handelt und die Position mit der Maus angeklickt wird, kann es intern in die X- und Y-Koordinaten von 1 bis 8 konvertiert werden, sodass die Funktionen der aktuellen Klasse unverändert verwendet werden können.

    #Eingang
    def ot_inputXY(self,otstr):
        while True:
            myXY = input(otstr)
            if myXY == "":
                continue
            if '1' <= myXY <= '8' :
                return int(myXY)

Funktionen für "Sie sind dran" (Zeichenketten und ternäre Operatoren)

Die Funktion "ot_yourturn ()" ist eine Funktion, die nur die Hand von "●" anzeigt. Oder welcher Spieler an der Reihe ist. Was angezeigt wird, ist eine in "~" eingeschlossene Zeichenkette, aber ** "Zeichenkette" ** ist die oben erwähnte Zeichenkettenklasse "str ()", also sogar eine Zeichenkette, die gerade als "aiueo" str geschrieben wurde Die in der Klasse () enthaltenen Funktionen können unverändert verwendet werden.

Das hier beschriebene {} und format () bei Verwendung des Zeichenfolgentyps sind sehr gebräuchliche Ausdrücke. Denken Sie also hier daran. {} Wird ** Ersatzfeld ** genannt und so weiter. Wenn Sie "str (" Aka {} Tana ".format (" sa ")" "ausführen, wird das Innere von {} durch die durch die Funktion format () angegebenen Daten ersetzt. In Python 3.6 oder höher das f-Zeichen Sie können jetzt Variablen als Spaltenoperation direkt in das Ersetzungsfeld einfügen, um die Lesbarkeit zu verbessern.

    name = input("Bitte geben Sie Ihren Namen ein=")
    print("Ein mutiger Mann, der oft kam{}Ja! !! Ich habe darauf gewartet, dass der Held den Dämonenkönig zerstört!".format(name))
    # Python3.Nach 6 ist es bequem wie folgt zu schreiben!
    print(f"Ein mutiger Mann, der oft kam{name}Ja! !! Ich habe darauf gewartet, dass der Held den Dämonenkönig zerstört!")

In ot_yourturn () in der aktuellen Othello-Klasse wird ● oder ○ angezeigt, da im Ersetzungsfeld die Variable ot_offdef angegeben ist, die die aktuelle Verschiebung speichert.

    #Du bist dran
    def ot_yourturn(self):
        print("{}Es ist deine Hand!".format(self.ot_offdef))

Die Funktion ot_changeturn () ist eine Funktion, die den Zug des Angreifers umschaltet.

    #Du bist dran
    def ot_changeturn(self):
        #Bewahren Sie das Stück des Angreifers auf
        self.ot_offdef = '●' if self.ot_offdef == '○' else '○'
        #Speichert das Gegenstück zum Angreifer
        self.ot_search = '●' if self.ot_offdef == '○' else '○'

Das Programm ist als ternärer Operator geschrieben. Es ist fast so, als würde man eine IF-Anweisung mit einem Excel-Makro schreiben, aber die Logik oben und die Logik unten sind genau gleich. Durch Schreiben von "Wert, wenn die Bedingung erfüllt ist, wenn Bedingung andernfalls Wert, wenn die Bedingung nicht erfüllt ist" kann die if-Bedingungsanweisung präzise in einer Zeile gespeichert werden. Der ternäre Operator aktualisiert das Programm je nach Schreibweise. Es wird jedoch empfohlen, es mit Vorsicht zu verwenden, da es eine sehr unlesbare Quelle ist, wenn es zwangsweise verwendet wird. Wenn Sie es schwer zu verstehen finden, können Sie es durch die folgende Quelle ersetzen.

    #Du bist dran
    def ot_changeturn(self):
        #Bewahren Sie das Stück des Angreifers auf
        if self.ot_offdef == '○':
            self.ot_offdef = '●'
        else:
            self.ot_offdef = '○'
        #Speichert das Gegenstück zum Angreifer
        if self.ot_offdef == '○':
            self.ot_search = '●'
        else:
            self.ot_search = '○'

Eine Funktion, die die nächste Aktion des Othello-Spiels berücksichtigt

Die Funktion ot_checkendofgame () ist ein Programm, das berücksichtigt, ob das Othello-Spiel endet. Informationen zur Operation finden Sie in (2) dieser Artikelserie.

Was wir dabei tun, ist wie folgt.

  1. Verwenden Sie die Funktion "ot_canplacemypeace ()", um festzustellen, ob ein Platz für das Stück des Angreifers vorhanden ist.
  2. Wenn die Figur des Angreifers nicht platziert werden kann, verwenden Sie "ot_changeturn ()", um die Figur des Angreifers in die Runde des Gegners zu schalten.
  3. Verwenden Sie die Funktion ot_canplacemypeace (), um festzustellen, ob ein Platz für das Stück des Angreifers vorhanden ist.
  4. Wenn festgestellt wird, dass es keinen Platz für beide gibt, vergleichen Sie die Zahlen von ● und ○, um festzustellen, welche gewonnen oder unentschieden gespielt wurden, zeigen Sie das Ergebnis an und geben Sie 1 zurück, um das Ende des Spiels anzuzeigen.
  5. Wenn in 1. oben nur der Angreifer keinen Platz hat, wird die Meldung "Es ändert sich der Zug des Gegners" angezeigt und -1 wird zurückgegeben, um diese Tatsache zu benachrichtigen.
  6. Wenn der Angreifer entscheidet, dass das Stück so platziert werden kann, wie es ist, gibt er 0 zurück und benachrichtigt dies.

In dieser Funktion ist count (), das als myot.ot_bit.count (●) bezeichnet wird, eine Funktion, die die Anzahl der im Array der list () -Klasse enthaltenen Daten zurückgibt.

    #Bestimmen Sie, ob es vorbei ist (ändern Sie den Zug, wenn Sie Ihre Hand einfach nicht legen können)
    def ot_checkendofgame(self):
        #Es gibt keinen Platz, an dem Sie Ihre eigene Hand legen können, und Sie können die Hand Ihres Gegners nicht legen
        if 0 > self.ot_canplacemypeace():
            self.ot_changeturn()
            if 0 > self.ot_canplacemypeace():
                bc = myot.ot_bit.count('●')
                wc = myot.ot_bit.count('○')
                if ( bc - wc ) > 0:
                    bws = "● Sieg"
                elif ( bc - wc ) < 0:
                    bws = "○ Sieg"
                else:
                    bws = "zeichnen"
                print("{}ist. Danke für deine harte Arbeit!".format(bws))
                return 1
            else:
                print("{}Es gibt keinen Platz, um es auszudrücken. Es wechselt zum Zug des Gegners! !!".format(self.ot_search))
                return -1
        else:
            return 0

Eine Funktion, die alle Orte findet, die umgedreht werden können

Das vorherige "ot_checkendofgame ()" bestimmte, ob das Spiel beendet war, ob es einen Platz gab, an dem Sie Ihre Hand legen konnten, oder wenn nicht, ob es einen Platz gab, an dem Sie die Hand Ihres Gegners legen konnten. Die Funktion "ot_canplacemypeace ()" denkt: "Gibt es einen Ort, an dem ich meine Hand legen kann?"

   #Finden Sie heraus, ob es einen Platz gibt, an dem Sie Ihre Hand halten können
    def ot_canplacemypeace(self):
        for n in range(64):
            if self.ot_bit[n] != '・':
                continue
            for d in self.ot_direction:
                if 1 == self.ot_next_onepeace(int(n%8)+1,int(n/8)+1, d):
                    return 0
        #Wenn es keinen Platz gibt, werde ich hierher kommen
        return -1

Folgendes machen wir:

  1. Auf dem 8x8-Board werden die Stellen, an denen die Frames bereits platziert sind, immer mehr übersprungen.
  2. Wenn es einen Ort gibt, an dem der Rahmen nicht platziert ist, konvertieren Sie diese Position von 0 in 63 in X- und Y-Koordinaten. Die X-Koordinate ist 1 relative X-Koordinate, und der Wert geteilt durch 8 plus 1 ist die Y-Koordinate.
  3. Überprüfen Sie in alle Richtungen (8 Richtungen), ob Sie Ihre Hand an den konvertierten X- und Y-Koordinatenpositionen platzieren können (gibt es eine Stelle, an der Sie den Rahmen des Gegners umdrehen können?). In dem Teil von "für d in self.ot_direction:" wird es für die Häufigkeit der Wörterbuchvariablen wiederholt, und die Schlüsselzeichenfolge, die die im Wörterbuch gespeicherte Richtung angibt, wird in der Variablen d gespeichert.
  4. Wenn ein Platz zum Platzieren des Rahmens gefunden wird, wird 0 zurückgegeben, um diese Tatsache zu benachrichtigen.
  5. Wenn der Frame nicht platziert werden kann, geben Sie -1 zurück, um dies zu benachrichtigen.

Platzieren Sie einen Rahmen an den angegebenen X- und Y-Koordinaten

Wie ich letztes Mal sagte, wenn Sie ein Stück an der angegebenen Stelle platzieren, müssen Sie beurteilen, ob es ein Ort ist, an dem Sie es platzieren können, und wenn Sie es platzieren können, müssen Sie das Stück des Gegners umdrehen. Und wenn der Ort, an dem Sie es platzieren, ein Ort ist, an dem Sie es nicht an erster Stelle platzieren sollten, müssen Sie diese Tatsache anzeigen.

    #Legen Sie Ihre Hand auf das Brett von Othello
    def ot_place(self, ot_x, ot_y):
        ot_change = False
        for d in self.ot_direction:
            if 1 == self.ot_next_onepeace(ot_x,ot_y,d):
                self.ot_peace(ot_x,ot_y,self.ot_offdef)
                self.ot_changepeace(ot_x,ot_y,d)
                ot_change = True
        #Wenn es keine gültige Richtung gibt
        if not ot_change:
            print("{}Konnte nicht platziert werden".format(self.ot_offdef))
            return -1
        #Zeigen Sie den Bildschirm an und wechseln Sie Ihre Hand zum Zug des Gegners
        self.ot_display()
        self.ot_changeturn()
        return 0

Diese Funktion wird aufgerufen, wenn Sie versuchen, einen Frame an einer vorgegebenen Stelle zu platzieren. An der angegebenen Stelle sind X und Y die Koordinaten, die durch die Werte 1 bis 8 angegeben sind. Lassen Sie uns das Programm dieser Funktion erklären.

  1. Initialisieren Sie "ot_change" mit "False" als Flag-Variable, um festzustellen, ob ein Frame platziert wurde oder nicht. Dies ist wahr, wenn ein Rahmen platziert werden kann.
  2. Wiederholen Sie das Array "ot_direction" einige Minuten (dh 8 Richtungen). Die Variable d enthält den Schlüsselwert von "ot_direction".
  3. Rufen Sie die Funktion ot_next_onepeace () auf, um zu sehen, ob und wie weit die aktuelle Richtung gespiegelt werden kann. Wenn der Rückgabewert der Funktion 1 ist, zeigt diese Richtung an, dass er umgedreht werden kann.
  4. Rufen Sie im dritten Argument die Funktion ot_peace () mit Ihrer Hand auf, um Ihren Frame an den angegebenen Koordinaten zu platzieren. Die Funktion "ot_peace ()" ist auch eine Funktion, die einen Frame an den angegebenen Koordinaten zurückgibt, wenn das dritte Argument weggelassen wird. Wenn das dritte Argument angegeben wird, wird der Rahmen an den angegebenen Koordinaten durch das angegebene Zeichen ersetzt.
  5. Rufen Sie die Funktion ot_changepeace () auf, um sie an einen Punkt zu spiegeln, an dem sie gespiegelt werden kann.
  6. Wenn ein Frame platziert ist, setzen Sie das Flag ot_change auf True. Wenn Sie nicht alle acht Richtungen umdrehen können, bleibt es falsch.
  7. Überprüfen Sie, ob das Flag "ot_change" beim Beenden der Iteration "False" ist. Wenn es falsch ist, bedeutet dies, dass Sie eine Koordinate angegeben haben, die nicht an erster Stelle platziert werden kann. Daher wird eine Nachricht angezeigt, die angibt, dass sie nicht an dieser Stelle platziert werden kann, und die Nachricht wird zurückgegeben.
  8. Wenn das Flag "ot_change" beim Beenden der Iteration "True" ist, hat der Flip-Prozess das Umschreiben der Board-Daten "ot_bit" abgeschlossen. Rufen Sie daher die Funktion "ot_display ()" auf, um das Board erneut anzuzeigen. Rufen Sie dann die Funktion ot_changeturn () auf, um den Zug des Angreifers zu ändern.

Das nächste Mal wird die Erklärung des Programms die letzte sein!

Das nächste Mal werde ich die Funktion "ot_next_onepeace ()" und die Funktion "ot_changepeace ()" erläutern, die möglicherweise am kompliziertesten sind. Diese beiden Funktionen werden als rekursive Funktionen bezeichnet. Dies sind die Funktionen, die Sie selbst aufrufen. Ich möchte sie daher erläutern.

Wir sehen uns wieder! !!

c u

<< Ich habe ein Othello erstellt, um Kindern Python3 beizubringen (4) Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (6) >>

Recommended Posts

Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (2)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (3)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (1)
Ich habe versucht, Othello dazu zu bringen, Kindern Python3 beizubringen (6) Final
Ich habe einen Passwortgenerator erstellt, um Kindern Python3 beizubringen (Bonus) * Vollständig neu erstellt
Ich habe einen Blackjack mit Python gemacht!
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe einen Python-Text gemacht
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe mit Python einen Blackjack gemacht.
Othello gemacht mit Python (wie GUI)
Ich habe Wordcloud mit Python gemacht.
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe eine Animation gemacht, die Othellos Stein mit POV-Ray zurückgibt
Ich habe einen Line-Bot mit Python gemacht!
Ich habe versucht, Python zu berühren (Installation)
Ich habe meine eigene Python-Bibliothek erstellt
Othello-Spieleentwicklung mit Python
Ich möchte mit Python debuggen
Ich habe mit Python einen Daemon erstellt
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe versucht, unerfahrenen Programmierern Python beizubringen
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe Python 3.5.1 installiert, um maschinelles Lernen zu studieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich möchte ein Glas aus Python verwenden
Ich wollte ABC160 mit Python lösen
Ich möchte eine Python-Umgebung erstellen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Hex-Map erstellt
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Was ich süchtig nach Python Autorun war
Ich wollte ABC172 mit Python lösen
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Was ich getan habe, um Python-Speicher zu speichern
Othello App (iOS App) erstellt mit Python (Kivy)
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen