Я играю в ti c ta c toe, и я в основном закончил все, что нужно для реализации, в которую вы играете, пока кто-то не выиграет 3 раза. Я попробовал это oop, но после первой игры оно продолжается бесконечно. Как сделать так, чтобы он дождался завершения метода main ()? Вот мой код: -
РЕДАКТИРОВАТЬ: Вот весь код. Я не понимаю, потому что в первый раз он ждет, пока метод не будет выполнен, но затем он уходит в бесконечность, даже позвольте мне сделать что-нибудь
import random
#initializacija programa in delovanja
rezultat = [
[" ", " ", " "," "],
[" ", " ", " "," "],
[" ", " ", " "," "],
[" ", " ", " "," "]
]
zmage1 = 0
zmage2 = 0
igralec = 'O'
def main():
izpis()
while True:
if isOver() == True:
print(preveriZmagovalca())
break
if aliJeIzenačeno() == True:
print('Igra je izenačena')
break
poteza(igralec)
if isOver()==False:
zamenjajIgralca()
def izpis():
tabela = ['+-1-+-2-+-3-+-4-+',
'a %s | %s | %s | %s |' %(rezultat[0][0],rezultat[0][1],rezultat[0][2],rezultat[0][3]),
'+---+---+---+---+',
'b %s | %s | %s | %s |' %(rezultat[1][0],rezultat[1][1],rezultat[1][2],rezultat[1][3]),
'+---+---+---+---+',
'c %s | %s | %s | %s |' %(rezultat[2][0],rezultat[2][1],rezultat[2][2],rezultat[2][3]),
'+---+---+---+---+',
'd %s | %s | %s | %s |' %(rezultat[3][0],rezultat[3][1],rezultat[3][2],rezultat[3][3]),
'+---+---+---+---+']
[print(i) for i in tabela]
def isOver():
global rezultat
#horizontalno preverjanje konca igre
for el in rezultat:
if len(set(el))==1 and " " not in set(el):
return True
#vertikalno preverjanje igre
for i in range(len(rezultat)):
a = set()
for el in rezultat:
a.add(el[i])
if len(a)==1 and " " not in a:
return True
#diagonalno preverjanje igre
if len(set([r[i] for i, r in enumerate(rezultat)]))==1 and " " not in set([r[i] for i, r in enumerate(rezultat)]) or len(set([r[-i-1] for i, r in enumerate(rezultat)]))==1 and " " not in set([r[-i-1] for i, r in enumerate(rezultat)]):
return True
return False
def poteza(igralec):
global rezultat
vnos = 'g6'
while vnos[0] not in ['a','b','c','d'] and vnos[1] not in [1,2,3,4]:
vnos = input('Vnesite potezo %s: ' %igralec)
vnos = [c for c in vnos]
if vnos[0]=='a':
vnos[0] = 0
elif vnos[0]=='b':
vnos[0] = 2
elif vnos[0]=='c':
vnos[0] = 2
elif vnos[0]=='d':
vnos[0] = 3
if rezultat[int(vnos[0])][int(vnos[1])-1] == ' ':
rezultat[int(vnos[0])][int(vnos[1])-1] = igralec
izpis()
def zamenjajIgralca():
global igralec
if igralec == 'O':
igralec = 'X'
elif igralec == 'X':
igralec = 'O'
def preveriZmagovalca():
global igralec1
global igralec2
global zmage1
global zmage2
if igralec1[1] == igralec:
return 'Zmagovalec je %s' %igralec1[0]
zmage1 += 1
else:
return 'Zmagovalec je %s' %igralec2[0]
zmage2 += 1
def aliJeIzenačeno():
global rezultat
for r in rezultat:
if " " in set(r):
return False
return True
#main game
igralec1 = input('Vnesite ime igralca 1: ')
igralec2 = input('Vnesite ime igralca 2: ')
r = random.randint(1,10)
if r%2==0:
igralec1 = igralec1.split()
igralec1.append('O')
igralec2 = igralec2.split()
igralec2.append('X')
print('%s ima prvo potezo' %igralec1[0])
izpis()
elif r%2==1:
igralec1 = igralec1.split()
igralec1.append('X')
igralec2 = igralec2.split()
igralec2.append('O')
print('%s ima prvo potezo' %igralec2[0])
while True:
main()
if zmage1==3:
print('Tri zmage je dosegel %s' %igralec1[0])
break
elif zmage2==3:
print('Tri zmage je dosegel %s' %igralec2[0])
break