# Javított változat, 2020 12 16.
class TicTacToe:
"""Játék személy kezdéssel"""
def __init__(self, szamlista):
self.szamlista = szamlista
self.szam = str
self.uj_tabla(szamlista)
self.lepes_szam = 0
self.kettes_alas = False
self.gyozelem = False
self.benne = False
@staticmethod
# A játéktábla kiíratása.
def uj_tabla(szamlista):
for index, elem in enumerate(szamlista, start=1):
print(elem, end=' ' if index % 3 else '\n')
def input_bevitel(self):
while True:
self.szam = input("\n A játékostól kérek egy számot!")
# Benne van e a listában az a szám amit a játékos megadott.
self.benne = self.szam in self.szamlista
# Ellenőrzés
if self.benne is True:
break
else:
print("Hibás számot vagy karaktert adtál meg! De az is lehet, hogy foglal a szám!")
def szemely_szama(self):
self.lepes_szam += 1
print("\n Játékos 'X' lépése:")
# Végrehajtja a behelyettesítést, szám helyébe = X
for index, elem in enumerate(self.szamlista):
if elem == self.szam:
self.szamlista[index] = "X"
self.uj_tabla(self.szamlista)
def gep_valasz1(self):
print("\n Gép '$' válaszlépése:")
if self.szamlista[4] == '5':
self.szamlista[4] = "$"
self.uj_tabla(self.szamlista)
else:
self.szamlista[0] = "$"
self.uj_tabla(self.szamlista)
def gep_valasz2(self):
"""A gép első válasza, jele ha a középső 5 számra került, vagy az 1 számra."""
print("\n Gép '$' válaszlépése:")
# A játékos kettes állásainak a blokkolása.
if self.szamlista[4] == "$":
"""X=(1-szám, 0-index)"""
if self.szamlista[0] == "X" and self.szamlista[1] == "X":
self.szamlista[2] = "$"
if self.szamlista[0] == "X" and self.szamlista[2] == "X":
self.szamlista[1] = "$"
if self.szamlista[0] == "X" and self.szamlista[3] == "X":
self.szamlista[6] = "$"
if self.szamlista[0] == "X" and self.szamlista[6] == "X":
self.szamlista[3] = "$"
if self.szamlista[0] == "X" and self.szamlista[7] == "X":
self.szamlista[5] = "$"
if self.szamlista[0] == "X" and self.szamlista[5] == "X":
self.szamlista[7] = "$"
if self.szamlista[0] == "X" and self.szamlista[8] == "X":
self.szamlista[5] = "$"
"""X=(2-szám, 1-index)"""
if self.szamlista[1] == "X" and self.szamlista[2] == "X":
self.szamlista[0] = "$"
if self.szamlista[1] == "X" and self.szamlista[3] == "X":
self.szamlista[0] = "$"
if self.szamlista[1] == "X" and self.szamlista[6] == "X":
self.szamlista[0] = "$"
if self.szamlista[1] == "X" and self.szamlista[7] == "X":
self.szamlista[5] = "$"
if self.szamlista[1] == "X" and self.szamlista[8] == "X":
self.szamlista[2] = "$"
if self.szamlista[1] == "X" and self.szamlista[5] == "X":
self.szamlista[2] = "$"
"""X=(3-szám, 2-index)"""
if self.szamlista[2] == "X" and self.szamlista[3] == "X":
self.szamlista[0] = "$"
if self.szamlista[2] == "X" and self.szamlista[5] == "X":
self.szamlista[8] = "$"
if self.szamlista[2] == "X" and self.szamlista[6] == "X":
self.szamlista[1] = "$"
if self.szamlista[2] == "X" and self.szamlista[7] == "X":
self.szamlista[5] = "$"
if self.szamlista[2] == "X" and self.szamlista[8] == "X":
self.szamlista[5] = "$"
"""X=(4-szám, 3-index)"""
if self.szamlista[3] == "X" and self.szamlista[5] == "X":
self.szamlista[1] = "$"
if self.szamlista[3] == "X" and self.szamlista[6] == "X":
self.szamlista[0] = "$"
if self.szamlista[3] == "X" and self.szamlista[7] == "X":
self.szamlista[0] = "$"
if self.szamlista[3] == "X" and self.szamlista[8] == "X":
self.szamlista[7] = "$"
"""X=(6-szám, 5-index)"""
if self.szamlista[5] == "X" and self.szamlista[6] == "X":
self.szamlista[8] = "$"
if self.szamlista[5] == "X" and self.szamlista[7] == "X":
self.szamlista[8] = "$"
if self.szamlista[5] == "X" and self.szamlista[8] == "X":
self.szamlista[2] = "$"
"""X=(7-szám, 6-index)"""
if self.szamlista[6] == "X" and self.szamlista[7] == "X":
self.szamlista[8] = "$"
if self.szamlista[6] == "X" and self.szamlista[8] == "X":
self.szamlista[7] = "$"
"""X=(8-szám, 7-index)"""
if self.szamlista[7] == "X" and self.szamlista[8] == "X":
self.szamlista[6] = "$"
self.uj_tabla(self.szamlista)
elif self.szamlista[0] == "$":
"""X=(4-szám, 3-index)"""
if self.szamlista[4] == "X" and self.szamlista[1] == "X":
self.szamlista[7] = "$"
if self.szamlista[4] == "X" and self.szamlista[2] == "X":
self.szamlista[6] = "$"
if self.szamlista[4] == "X" and self.szamlista[3] == "X":
self.szamlista[5] = "$"
if self.szamlista[4] == "X" and self.szamlista[5] == "X":
self.szamlista[3] = "$"
if self.szamlista[4] == "X" and self.szamlista[6] == "X":
self.szamlista[2] = "$"
if self.szamlista[4] == "X" and self.szamlista[7] == "X":
self.szamlista[1] = "$"
if self.szamlista[4] == "X" and self.szamlista[8] == "X":
self.szamlista[2] = "$"
self.uj_tabla(self.szamlista)
def kiertekelo(self):
""" A győzelem kijelentése bármelyik három egy forma jelnél. Ha nincs győzetes a False
döntetlent ír ki. A return leállítja vagy tovább engedi a futási ciklust."""
# Ha a játékosnak van egy vonalon hármasa.
if (self.szamlista[0] == 'X' and self.szamlista[1] == 'X' and self.szamlista[2] == 'X') \
or (self.szamlista[3] == 'X' and self.szamlista[4] == 'X' and self.szamlista[5] == 'X')\
or (self.szamlista[6] == 'X' and self.szamlista[7] == 'X' and self.szamlista[8] == 'X')\
or (self.szamlista[0] == 'X' and self.szamlista[3] == 'X' and self.szamlista[6] == 'X')\
or (self.szamlista[1] == 'X' and self.szamlista[4] == 'X' and self.szamlista[7] == 'X')\
or (self.szamlista[2] == 'X' and self.szamlista[5] == 'X' and self.szamlista[8] == 'X')\
or (self.szamlista[0] == 'X' and self.szamlista[4] == 'X' and self.szamlista[8] == 'X')\
or (self.szamlista[2] == 'X' and self.szamlista[4] == 'X' and self.szamlista[6] == 'X'):
print("\n Játékos győzelem!")
self.gyozelem = True
return True
# Ha a gépnek van egyy vonalon három egyforma.
elif (self.szamlista[0] == '$' and self.szamlista[1] == '$' and self.szamlista[2] == '$') \
or (self.szamlista[3] == '$' and self.szamlista[4] == '$' and self.szamlista[5] == '$')\
or (self.szamlista[6] == '$' and self.szamlista[7] == '$' and self.szamlista[8] == '$')\
or (self.szamlista[0] == '$' and self.szamlista[3] == '$' and self.szamlista[6] == '$')\
or (self.szamlista[1] == '$' and self.szamlista[4] == '$' and self.szamlista[7] == '$')\
or (self.szamlista[2] == '$' and self.szamlista[5] == '$' and self.szamlista[8] == '$')\
or (self.szamlista[0] == '$' and self.szamlista[4] == '$' and self.szamlista[8] == '$')\
or (self.szamlista[2] == '$' and self.szamlista[4] == '$' and self.szamlista[6] == '$'):
print("\n A gép győzött!")
self.gyozelem = True
return True
if self.gyozelem is False and self.lepes_szam == 5:
print("\n Vége, döntetlen.")
return True
def gep_valasz3(self):
"""Vizsgálat, hogy van e két egyforma karakter a sorokban, átlókban és függőlegesen."""
print("\nGép '$' válaszlépése:")
# A 0 indexű, az '1' hely vizsgálata, hogy kiegészthető e 3 egyformára.
if (self.szamlista[1] == '$' and self.szamlista[2] == '$' and self.szamlista[0] == '1') \
or (self.szamlista[3] == '$' and self.szamlista[6] == '$' and self.szamlista[0] == '1') \
or (self.szamlista[4] == '$' and self.szamlista[8] == '$' and self.szamlista[0] == '1'):
self.szamlista[0] = '$'
self.kettes_alas = True
# Az 1 indexű, a '2' hely vizsgálata, hogy kiegészthető e 3 egyformára.
elif (self.szamlista[0] == '$' and self.szamlista[2] == '$' and self.szamlista[1] == '2') \
or (self.szamlista[4] == '$' and self.szamlista[7] == '$' and self.szamlista[1] == '2'):
self.szamlista[1] = '$'
self.kettes_alas = True
# A 2 indexű, a '3' hely vizsgálata, hogy kiegészthető e 3 egyformára.
elif (self.szamlista[0] == '$' and self.szamlista[1] == 'é' and self.szamlista[2] == '3') \
or (self.szamlista[5] == '$' and self.szamlista[8] == '$' and self.szamlista[2] == '3') \
or (self.szamlista[4] == '$' and self.szamlista[6] == '$' and self.szamlista[2] == '3'):
self.szamlista[2] = '$'
self.kettes_alas = True
# A 3 indexű, a '4' hely vizsgálata, hogy kiegészíthető e 3 egyformára.
elif (self.szamlista[4] == '$' and self.szamlista[5] == '$' and self.szamlista[3] == '4') \
or (self.szamlista[0] == '$' and self.szamlista[6] == '$' and self.szamlista[3] == '4'):
self.szamlista[3] = '$'
self.kettes_alas = True
# A 4 indexű, a '5' hely vizsgálata, hogy kiegészíthető e 3 egyformára.
elif (self.szamlista[3] == '$' and self.szamlista[5] == '$' and self.szamlista[4] == '5') \
or (self.szamlista[1] == '$' and self.szamlista[7] == '$' and self.szamlista[4] == '5')\
or (self.szamlista[0] == '$' and self.szamlista[8] == '$' and self.szamlista[4] == '5')\
or (self.szamlista[2] == '$' and self.szamlista[6] == '$' and self.szamlista[4] == '5'):
self.szamlista[4] = '$'
self.kettes_alas = True
# A 5 indexű, a '6' hely vizsgálata, hogy kiegészíthető e 3 egyformára.
elif (self.szamlista[2] == '$' and self.szamlista[8] == '$' and self.szamlista[5] == '6') \
or (self.szamlista[3] == '$' and self.szamlista[4] == '$' and self.szamlista[5] == '6'):
self.szamlista[5] = '$'
self.kettes_alas = True
# A 6 indexű, a '7' hely vizsgálata, hogy kiegészthető e 3 egyformára.
elif (self.szamlista[0] == '$' and self.szamlista[3] == '$' and self.szamlista[6] == '7') \
or (self.szamlista[7] == '$' and self.szamlista[8] == '$' and self.szamlista[6] == '7') \
or (self.szamlista[4] == '$' and self.szamlista[2] == '$' and self.szamlista[6] == '7'):
self.szamlista[6] = '$'
self.kettes_alas = True
# A 7 indexű, a '8' hely vizsgálata, hogy kiegészíthető e 3 egyformára.
elif (self.szamlista[6] == '$' and self.szamlista[8] == '$' and self.szamlista[7] == '8') \
or (self.szamlista[1] == '$' and self.szamlista[4] == '$' and self.szamlista[7] == '8'):
self.szamlista[7] = '$'
self.kettes_alas = True
# A 8 indexű, a '9' hely vizsgálata, hogy kiegészthető e 3 egyformára.
elif (self.szamlista[6] == '$' and self.szamlista[7] == '$' and self.szamlista[8] == '9') \
or (self.szamlista[2] == '$' and self.szamlista[5] == '$' and self.szamlista[8] == '9') \
or (self.szamlista[0] == '$' and self.szamlista[4] == '$' and self.szamlista[8] == '9'):
self.szamlista[8] = '$'
self.kettes_alas = True
# Vizsgálat az ellenfél állása szempontjából.
# A 0 indexű, az '1' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[1] == 'X' and self.szamlista[2] == 'X' and self.szamlista[0] == '1') \
or (self.szamlista[3] == 'X' and self.szamlista[6] == 'X' and self.szamlista[0] == '1') \
or (self.szamlista[4] == 'X' and self.szamlista[8] == 'X' and self.szamlista[0] == '1'):
self.szamlista[0] = '$'
self.kettes_alas = True
# Az 1 indexű, a '2' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[0] == 'X' and self.szamlista[2] == 'X' and self.szamlista[1] == '2') \
or (self.szamlista[4] == 'X' and self.szamlista[7] == 'X' and self.szamlista[1] == '2'):
self.szamlista[1] = '$'
self.kettes_alas = True
# A 2 indexű, a '3' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[0] == 'X' and self.szamlista[1] == 'X' and self.szamlista[2] == '3') \
or (self.szamlista[5] == 'X' and self.szamlista[8] == 'X' and self.szamlista[2] == '3') \
or (self.szamlista[4] == 'X' and self.szamlista[6] == 'X' and self.szamlista[2] == '3'):
self.szamlista[2] = '$'
self.kettes_alas = True
# A 3 indexű, a '4' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[4] == 'X' and self.szamlista[5] == 'X' and self.szamlista[3] == '4') \
or (self.szamlista[0] == 'X' and self.szamlista[6] == 'X' and self.szamlista[3] == '4'):
self.szamlista[3] = '$'
self.kettes_alas = True
# A 4 indexű, a '5' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[3] == 'X' and self.szamlista[5] == 'X' and self.szamlista[4] == '5') \
or (self.szamlista[1] == 'X' and self.szamlista[7] == 'X' and self.szamlista[4] == '5') \
or (self.szamlista[0] == 'X' and self.szamlista[8] == 'X' and self.szamlista[4] == '5') \
or (self.szamlista[2] == 'X' and self.szamlista[6] == 'X' and self.szamlista[4] == '5'):
self.szamlista[4] = '$'
self.kettes_alas = True
# A 5 indexű, a '6' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[2] == 'X' and self.szamlista[8] == 'X' and self.szamlista[5] == '6') \
or (self.szamlista[3] == 'X' and self.szamlista[4] == 'X' and self.szamlista[5] == '6'):
self.szamlista[5] = '$'
self.kettes_alas = True
# A 6 indexű, a '7' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[0] == 'X' and self.szamlista[3] == 'X' and self.szamlista[6] == '7') \
or (self.szamlista[7] == 'X' and self.szamlista[8] == 'X' and self.szamlista[6] == '7') \
or (self.szamlista[4] == 'X' and self.szamlista[2] == 'X' and self.szamlista[6] == '7'):
self.szamlista[6] = '$'
self.kettes_alas = True
# A 7 indexű, a '8' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[6] == 'X' and self.szamlista[8] == 'X' and self.szamlista[7] == '8') \
or (self.szamlista[1] == 'X' and self.szamlista[4] == 'X' and self.szamlista[7] == '8'):
self.szamlista[7] = '$'
self.kettes_alas = True
# A 8 indexű, a '9' hely vizsgálata, hogy BLOKKOLHATÓ e a 3 egyforma.
elif (self.szamlista[6] == 'X' and self.szamlista[7] == 'X' and self.szamlista[8] == '9') \
or (self.szamlista[2] == 'X' and self.szamlista[5] == 'X' and self.szamlista[8] == '9') \
or (self.szamlista[0] == 'X' and self.szamlista[4] == 'X' and self.szamlista[8] == '9'):
self.szamlista[8] = '$'
self.kettes_alas = True
# Ha a fenti kettes felételek nem állnak akkor, egy üres hely elfoglalása.
else:
indexal = 0
szamol = 1
while True:
if self.szamlista[indexal] == str(szamol):
self.szamlista[indexal] = '$'
break
indexal += 1
szamol += 1
self.uj_tabla(self.szamlista)
list_int = list(range(1, 10))
list_string = list(map(str, list_int))
print("\n A kezdő tábla:")
jatek = TicTacToe(list_string)
while True:
# Első forduló
jatek.input_bevitel()
jatek.szemely_szama()
jatek.gep_valasz1()
# Második forduló
jatek.input_bevitel()
jatek.szemely_szama()
jatek.gep_valasz2()
# Harmadik forduló
jatek.input_bevitel()
jatek.szemely_szama()
leallito = jatek.kiertekelo()
if leallito is True:
break
jatek.gep_valasz3()
leallito = jatek.kiertekelo()
if leallito is True:
break
# Negyedik forduló
jatek.input_bevitel()
jatek.szemely_szama()
leallito = jatek.kiertekelo()
if leallito is True:
break
jatek.gep_valasz3()
leallito = jatek.kiertekelo()
if leallito is True:
break
# Ötödik, játékos befejező lépése.
jatek.input_bevitel()
jatek.szemely_szama()
leallito = jatek.kiertekelo()
if leallito is True:
break