Как я могу пока l oop ждать завершения метода, прежде чем перейти к другой итерации в python? - PullRequest
0 голосов
/ 01 мая 2020

Я играю в 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


1 Ответ

0 голосов
/ 01 мая 2020

Я забывал обнулять доску после каждой итерации, поэтому она сходила с ума, потому что думала, что выигрывает каждый раз.

...