Так что я делаю игру connect4, за исключением того, что вместо 4, это должно быть 5 последовательных символов, чтобы выиграть.Я уже на проверочной части.Итак, у меня есть функция isWin, и я хочу иметь возможность проверить, появляется ли фигура 5 раз подряд где-либо в сетке, и объявить победителя и остановить прибытие, когда это произойдет.Проблема в том, что я не совсем понимаю свою сетку, потому что я просто скорректировал некоторые значения, пока она не заработала, поэтому я не могу точно понять, как работает система координат, поэтому мне труднофункция isWin тоже.
Так вот мой код для сетки:
def displayGrid(grid,grid_height,grid_width):
for row in range(1,grid_height):
#print(row) #for checking
for col in range(grid_width):
#print(col)
print("|", end="")
print(str(grid[row-1][col-1]),end = "")
print("|")
print(" "+" ".join([str(i) for i in range(1, grid_width+1)]))
return grid
def updateGrid(grid,grid_height,grid_width,move,p_char):
for i in range(1,grid_height+1):
#print(i) #ROW COUNTING STARTS FROM 1
if grid[grid_height-i][move-2] == " ":
grid[grid_height-i][move-2]= p_char #REPLACES THE " " TO THE CURRENT PLAYER'S CHARACTER (p_char)
else:
continue
break
return grid
Это мой код (рекомендуемый код) для функции isWin: (она проверяет по горизонтали, вертикали и диагонали):
def isWin(p_char,grid,grid_height,grid_width):
# Horizontal
for i in range(grid_height):
for j in range(grid_width - 4):
if set(grid[i][j:j+5]) == {p_char}:
return True
# Vertical
for i in range(grid_height - 4):
for j in range(grid_width):
if { grid[i+k][j] for k in range(5) } == {p_char}:
return True
# Diagonal
for i in range(grid_height - 4):
for j in range(grid_width - 4):
if { grid[i+k][j+k] for k in range(5) } == {p_char}:
return True
return False