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

Sie sollten lernen, indem Sie den Kommentar beobachten, während Sie das Programm bewegen und die Bewegung beobachten

Wie auch immer, das Programm funktioniert und es ist Nambo. Die Quelle des Othello-Spiels ist heute etwas lang, aber ich werde es zuerst veröffentlichen, da es das Verständnis fördert, indem es damit herumspielt. Lassen Sie uns dies als neues Projekt für PyCharom erstellen.

Starten Sie PyCharm und erstellen Sie ein "Neues Projekt" aus dem Menü "Datei". Nennen Sie auch das Projekt ** Othello **. スクリーンショット 2020-05-24 17.06.53.png

Wählen Sie nach dem Erstellen des Projekts "Neu ..." aus dem Menü "Datei", wählen Sie die Python-Datei aus, nennen Sie sie othello_cui.py usw. und drücken Sie die Eingabetaste. Wird auftauchen.

スクリーンショット 2020-05-24 17.07.40.png スクリーンショット 2020-05-24 17.08.47.png

Kopieren Sie dann alle folgenden Programme und fügen Sie sie in othellocui.py ein. スクリーンショット 2020-05-24 17.14.59.png

Speichern Sie anschließend Ihr Projekt mit STRG + S (Befehl + S für Mac).

Othello Spielquelle

"""
Othello Game
Copyright 2020 (C) by tsFox
"""

class OthelloCls:
    def __init__(self):
        self.ot_bit = list()
        #Grundeinstellung = 4 Othello-Stücke auf das Brett legen
        for i in range(64):
            if i == 27 or i == 36:
                self.ot_bit.append('○')
            elif i == 28 or i == 35:
                self.ot_bit.append('●')
            else:
                self.ot_bit.append('・')
        self.ot_offdef = '●'                       #Welche Wendung
        self.ot_search = '○'                       #Die andere Hand
        #Verwenden eines Wörterbuchs zur Rahmenberechnung neben acht Richtungen
        #Erstellen Sie eine Berechnungstabelle (Richtung ist Schlüssel, berechneter Wert wird von Tupple definiert)
        self.ot_direction = dict()                  #Acht-Wege-Suchtabelle
        self.ot_direction = { 'ul' : ( -1 , -1 ) ,  #Diagonal oben links
                              'up' : (  0 , -1 ) ,  #Direkt darüber
                              'ur' : ( +1 , -1 ) ,  #Diagonal oben rechts
                              'lt' : ( -1 ,  0 ) ,  #links
                              'rt' : ( +1 ,  0 ) ,  #richtig
                              'dl' : ( -1 , +1 ) ,  #Diagonal unten links
                              'dn' : (  0 , +1 ) ,  #Direkt darunter
                              'dr' : ( +1 , +1 ) }  #Diagonal unten rechts
        #Kündigungsposition, wenn beurteilt wird, dass sie umgedreht werden kann
        self.ot_lastposX = 0                        #Ende X umdrehen
        self.ot_lastposY = 0                        #Ende Y umdrehen

    #Eingang
    def ot_inputXY(self,otstr):
        while True:
            myXY = input(otstr)
            if myXY == "":
                continue
            #Ich habe einige Möglichkeiten hinzugefügt, um im Kommentarbereich nachzuschauen!'20/5/30
            if myXY.isdigit() and (1 <= int(myXY) <= 8): 
                return int(myXY)
            print("Bubu ~! Geben Sie 1-8 ein!")

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

    #Du bist dran
    def ot_changeturn(self):
        self.ot_offdef = '●' if self.ot_offdef == '○' else '○'
        self.ot_search = '●' if self.ot_offdef == '○' else '○'

    #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

    #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

    #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

    #Verarbeitung, um den nächsten Zug auszuführen (einschließlich Verarbeitung, die nicht platziert werden kann)
    def ot_next_onepeace(self,ot_x,ot_y,ot_dir):
        #Wenn die nächste Bewegung in alle Richtungen von Ihrer Position aus die entgegengesetzte Hand und Ihre eigene Hand ist
        nx = self.ot_direction[ot_dir][0]
        ny = self.ot_direction[ot_dir][1]

        #Beurteilung, dass der nächste Zug nicht an erster Stelle stehen kann
        if ( nx < 0 and ot_x == 1 ) or ( ny < 0 and ot_y == 1 ) or ( nx == 1 and ot_x == 8 ) or ( ny == 1 and ot_y == 8 ):
            return -1

        #Holen Sie sich die nächste (links und oben sind von Ihrer Hand aus gesehen in Minusrichtung)
        nextpeace = self.ot_peace(ot_x+nx,ot_y+ny)

        #Urteil, dass Sie es nicht setzen können, wenn die nächste Hand Ihre eigene Hand ist
        if nextpeace == '・' or nextpeace == self.ot_offdef:
            return -1

        #Stellen Sie fest, ob sich nebenan ein Nachbar befindet
        cx = ot_x+(nx*2)
        cy = ot_y+(ny*2)

        #Beurteilt, dass es nicht platziert werden kann, wenn sich kein Nachbar daneben befindet (wenn die Richtung links oder oben ist, beurteilen Sie das linke Ende und das obere Ende)
        if ( nx < 0 and cx == 0 ) or ( nx > 0 and cx == 9 ) or ( ny < 0 and cy == 0 ) or ( ny > 0 and cy == 9 ):
            return -1

        #Ich kann den nächsten bekommen, also suche danach
        nextnextpeace = self.ot_peace(cx,cy)

        if nextnextpeace == '・' :
            return -1         #Ich kann die Benachrichtigung nicht umdrehen

        if nextnextpeace == self.ot_offdef:
            #Notieren Sie die Endposition, die umgedreht werden kann
            self.ot_lastposX = cx
            self.ot_lastposY = cy
            return 1         #Sie können die Benachrichtigung umdrehen

        #Wenn Ihre Hand und Ihre Hand fortfahren, rufen Sie Ihre Funktion erneut auf (rekursiv)
        return self.ot_next_onepeace(ot_x+nx, ot_y+ny, ot_dir)

    #Der Prozess des Umdrehens Ihrer Hand
    def ot_changepeace(self,ot_x,ot_y,ot_dir):
        #Wenn die nächste Bewegung in alle Richtungen von Ihrer Position aus die entgegengesetzte Hand und Ihre eigene Hand ist
        nx = self.ot_direction[ot_dir][0]
        ny = self.ot_direction[ot_dir][1]
        #Schreiben Sie den nächsten neu
        nextpeace = self.ot_peace(ot_x+nx,ot_y+ny,self.ot_offdef)
        #Neben den nächsten Koordinaten
        cx = ot_x+(nx*2)
        cy = ot_y+(ny*2)
        #Beenden Sie, wenn die Flip-Position die letzte Koordinate ist
        if cx == self.ot_lastposX and cy == self.ot_lastposY:
            return
        #Wenn Sie es noch umdrehen können, rufen Sie sich erneut an (rekursiv)
        return self.ot_changepeace(ot_x+nx, ot_y+ny, ot_dir)

    #Holen Sie sich die Hand an die angegebene Position (und schreiben Sie sie auch neu)
    def ot_peace(self,ot_x,ot_y,ot_chr=None):
        if ot_chr != None:
            self.ot_bit[(ot_y - 1) * 8 + (ot_x - 1)] = ot_chr
        return self.ot_bit[(ot_y-1)*8+(ot_x-1)]

    #Zeigen Sie die Tafel von Othello an
    def ot_display(self):
        print("X① ② ③ ④ ⑤ ⑥ ⑦ ⑧")
        for l in range(1,9):
            print("{}".format(l), end='' )
            for c in range(1,9):
                print(" {}".format(self.ot_bit[(l-1)*8+(c-1)]), end='')
            print()
        print("            ○:{} ●:{}".format(self.ot_bit.count('○'),self.ot_bit.count('●')))

if __name__ == '__main__':

    myot = OthelloCls()
    myot.ot_display()

    while True:
        #Bestimmen Sie, ob das Spiel beendet ist oder ob es einen Platz gibt, an dem Sie Ihre Hand legen können
        sts = myot.ot_checkendofgame()
        if sts == 1:            #Spiel ist aus
            break
        elif sts < 0:           #Ich kann meine Hand nicht legen
            continue

        #Zeigen Sie, welche Kurve
        myot.ot_yourturn()
        #Geben Sie die X- und Y-Koordinaten ein
        myx = myot.ot_inputXY("X = ")
        myy = myot.ot_inputXY("Y = ")
        #Legen Sie Ihre Hand auf die angegebenen Koordinaten
        myot.ot_place(myx,myy)

Lass uns einmal spielen! !!

Sie können das Programm starten, indem Sie im Menü PyCharm Run die Option Run othello_cui auswählen oder indem Sie in der Quelle ganz links neben `if name == '__ main __' auf das grüne Dreieck Run klicken. スクリーンショット 2020-05-24 17.18.35.png

Wenn das so ausgeführte Programm am unteren Rand des PyCharm-Bildschirms angezeigt wird, geben Sie X (horizontal) 1 bis 8 und dann Y (vertikal) 1 bis 8 ein, um die Familie einzugeben Versuche in Othello gegen jemanden zu spielen.

スクリーンショット 2020-05-24 17.22.23.png

Was passiert mit dem Bildschirm, wenn ich etwas tue? Nachdem ich das Spiel bis zum Ende gespielt habe und es überall beobachtet habe, möchte ich den Inhalt des Programms ab dem nächsten Mal ausführlich erläutern.

Python heute studieren = Variablen

In diesem Kapitel möchten wir etwas über Python-Variablen lernen.

Was sind Variablen? Es ist keine "seltsame Zahl". Stellen Sie sich das als einen Container vor, in dem die verschiedenen Werte gespeichert sind, die in Ihrem Programm vorkommen. Zum Beispiel werden beim Kochen die Zutaten im Voraus geschnitten und in eine Schüssel gegeben, und diese Schüssel spielt die gleiche Rolle wie eine Variable. Für diejenigen, die kochen, plötzlich Salz in einen Kochtopf geben, Zucker hinzufügen, Sojasauce hinzufügen und einmal in einen Messbecher einen halben Teelöffel Salz, einen Teelöffel Zucker, drei Esslöffel Sojasauce usw. geben. Sie legen es hinein, probieren es dort und geben es dann in einen Topf. Es besteht kein Zweifel, dass Sie sich diesen Wiegebecher als Variable vorstellen können.

Überlegen Sie, warum Sie Variablen benötigen. Wenn Sie über das Rezept nachdenken, können Sie sehen, dass, wenn es sich um ein Programm handelt, das nur Curry für 3 Personen zubereitet, entschieden wird, was Sie eingeben, und die Menge auch, nicht wahr? Aber was ist, wenn Sie ein Curry-Programm für so viele Leute machen möchten, wie Sie möchten? Zunächst ändert sich die Anzahl der Personen jedes Mal, sodass Sie die angegebene Anzahl von Personen in die Variable einfügen müssen. Da sich auch die Menge an Zutaten wie Kartoffeln ändert, muss diese ebenfalls in die Variable aufgenommen werden. Wenn ein Programm, das alles machen kann, besser ist als ein Programm, das nur Curry macht, ändern sich in Wirklichkeit die Anzahl der Arten von Zutaten, die Anzahl und die Menge der hinzuzufügenden Gewürze stetig. Verstehen Sie, dass Variablen für ein Programm unverzichtbar sind? ??

Heute möchte ich einige Variablen erklären.

Allgemeine Variablen und Operationen

Bei allgemeinen Variablen kann der Wert der Variablen natürlich umgeschrieben werden.

Wenn Sie "age = 12" ausführen, weisen Sie der Variablen "age" den Wert 12 zu. Wenn diese Person im Alter von 12 Jahren nächstes Jahr ein Jahr bekommt, kann sie 1 zum Alterswert hinzufügen, indem sie "Alter + = 1" schreibt. Dies nennt man ** Arithmetik **. Die folgenden Operatoren können zur Berechnung verwendet werden. Darüber hinaus hat die Operation eine Priorität, und sofern in () nichts anderes angegeben ist, wird die Operation gemäß der dem Bediener zugewiesenen Erscheinungsreihenfolge und Priorität ausgeführt.

Operator Bedeutung Berechnungspriorität
+ + Hinzufügen 3
- ziehen- 3
* Anruf 2
/ Teilen 2
// Kürzungsteilung 2
% Rest 2
** Leistung 1

Die folgenden Berechnungen werden in der Reihenfolge ihrer Priorität von links durchgeführt.

temp = 20 * 3 / 10 + 5 * 3
60 / 10 + 15
6 + 15
21

Sie können die Berechnungspriorität auch explizit angeben, indem Sie () hinzufügen.

temp = 20 * 3 / (10 + 5) * 3
60 / 15 * 3
4 * 3
12

Eine Variable namens Array

Es reicht aus, nur einen Wert in eine Variable einzufügen, aber manchmal möchten Sie eine große Anzahl von Werten in eine Variable einfügen. Verwenden Sie in solchen Fällen eine Variable namens ** array **. Wenn Sie beispielsweise Tage im Wert von 7 Tagen in Briefen haben möchten,

WeekDay = [ "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" , "Sunday" ]

Geben Sie beim Zugriff auf den Wert eines Arrays einen numerischen Wert an, der als Index oder Index bezeichnet wird, z. B. WeekDay [0]. Geben Sie für den Index 0 an, um auf den allerersten Wert zuzugreifen. Es ist wie 0 am Montag, 1 am Dienstag ...

Arrays haben die Idee von mehrdimensionalen Arrays. Im vorherigen Beispiel handelt es sich um ein eindimensionales Array mit 7 Zeichenfolgen. Wenn Sie jedoch beispielsweise Kalenderdaten haben möchten, können Sie ein Array mit 31 Arrays und 12 Zeichenfolgen erstellen, also Calendar [12] [ Sie können auch ein zweidimensionales Array mit dem Namen 31] erstellen. Es ist auch eine gute Idee, abhängig vom zu erstellenden Programm ein mehrdimensionales Array zu verwenden. Wenn es jedoch zu mehrdimensional ist, ist es schwer zu verstehen. Daher ist es besser, sich darauf zu konzentrieren, sauberen Code zu verstehen und zu schreiben. Machen wir das.

Beim nächsten Mal möchte ich etwas über Tupel und Wörterbuch lernen, die nur in Python verfügbar sind, während ich das Programm erkläre. Bitte spielen Sie zuerst mit dem Othello-Spiel! !!

c u

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

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 Blackjack mit Python gemacht!
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 meine eigene Python-Bibliothek erstellt
Ich habe mit Python eine Lotterie gemacht.
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
Ich habe versucht, PLSA in Python 2 zu implementieren
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
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
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)
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich überarbeitete "Ich habe versucht, Othello AI zu machen, als Programmieranfänger Python studierten"
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Auf Python 2.7.9 aktualisiert
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich möchte Dunnetts Test in Python machen
Ich habe mit Python eine Bot-Wettervorhersage gemacht.