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 **.
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.
Kopieren Sie dann alle folgenden Programme und fügen Sie sie in othellocui.py ein.
Speichern Sie anschließend Ihr Projekt mit STRG + S (Befehl + S für Mac).
"""
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)
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.
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.
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.
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.
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
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