Я пытаюсь построить игру 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) есть значение.
Я был бы признателен за любую помощь в этом, я просмотрел все, но не могубыть в состоянии решить эту проблему.