Connect 4, гнездо для петель не зацикливание - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь построить игру connect 4 на python, и я борюсь с победными чеками.Мне удалось создать рабочий win-check для столбцов.Однако теперь я застрял, потому что мой nestled для петель не будет петли правильно.Я полный noob, поэтому код, вероятно, очень дерьмовый, но я просто хочу, чтобы он работал!

Вот код:

def turnPlan(matrix, rows):
    grid = []
    for r in matrix:
        r2=r[:]
        while len(r2)<rows:
            r2.append(" ")
        grid.append(r2)
    grid=list(zip(*grid))
    grid.reverse()
    return grid


def showPlan(matrix, rows, cols):
    print(end="  ")
    for i in range(cols):
        print(i,end="   ")
    print()
    l = len("┏━━━")
    plan = "┏"+(cols-1)*"━━━┳"+"━━━┓\n"+(rows-1)*("┃"+cols*" - ┃"+"\n"+"┣"+(cols-1)*"━━━╋"+"━━━┫\n")+"┃"+cols*" - ┃"+"\n┗"+(cols-1)*"━━━┻"+"━━━┛"
    matrix = turnPlan(matrix,rows)
    planAsList=list(plan)
    i=0
    while i < rows:
        j=0
        while j < cols:
            z = (2*i+1)*(cols*l+2)+l-2+l*j
            planAsList[z] = matrix[i][j]
            j+=1
        i+=1
    print ("".join(planAsList))
rows=5
cols=6
tur = 0
game_over = False

matrix = tuple([]*rows for x in range(cols))
showPlan(matrix, rows, cols)


def varning(cols):
    while cols <= sel_col:
        if cols <= sel_col:
            print("Välj en giltig kolumn! ")
        break

def full(matrix):
    if len(matrix[sel_col]) == rows:
        print("Kolumnen är full!")


#def vinst_lod(matrix):
    #for c in range(cols):
        #sel_col=matrix[c]
        #amount=len(sel_col)
        #for r in range(amount):
            #try:
                #if sel_col[r:amount]==['X','X','X','X'] or sel_col[r:amount]==["O","O","O","O"]:
                    #return True
            #except IndexError:
                #return
def vinst_vag(matrix, rows, cols):
    obj={}
    for c in range(cols):
        obj[c]=matrix[c]
    for r in range(rows):
        try:
            for x in range(cols):
                print(obj)
                if obj[x][r]=="X" and obj[x+1][r]=="X" and obj[x+2][r]=="X" and obj[x+3][r]=="X":
                    print(obj[x])
                    return True

        except (IndexError, KeyError) as error:
            return








while not game_over:
    if tur == 0:
        sel_col= int(input("Spelare 1 välj kolumn:"))
        varning(cols)
        if cols <= sel_col:
            continue
        full(matrix)
        if len(matrix[sel_col]) == rows:
            continue
        matrix[sel_col].append("X")
        showPlan(matrix,rows, cols)
        if vinst_vag(matrix, rows, cols):
            print("vinst1")
            game_over = True


    else:
        sel_col= int(input("Spelare 2 välj kolumn:"))
        varning(cols)
        if cols <= sel_col:
            continue
        full(matrix)
        if len(matrix[sel_col]) == rows:
            continue
        matrix[sel_col].append("O")
        showPlan(matrix,rows, cols)
        if vinst_vag(matrix, rows, cols):
            print("vinst2")
            game_over = True




    tur += 1
    tur = tur % 2

И это часть, с которой у меня возникают проблемы:

def vinst_vag(matrix, rows, cols):
    obj={}
    for c in range(cols):
        obj[c]=matrix[c]
    for r in range(rows):
        try:
            for x in range(cols):
                print(obj)
                if obj[x][r]=="X" and obj[x+1][r]=="X" and obj[x+2][r]=="X" and obj[x+3][r]=="X":
                    print(obj[x])
                    return True

        except (IndexError, KeyError) as error:
            return

Первый цикл в вложенном цикле работает правильно, но второй цикл не выполняется.Это всегда 0. Поэтому проверка выигрыша работает только тогда, когда в первом столбце (столбец 0) есть значение.

Я был бы признателен за любую помощь в этом, я просмотрел все, но не могубыть в состоянии решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...