Я пытаюсь построить систему «четыре в ряд» в рамках проекта. Я предполагал реализовать метод, который вычисляет количество очков с вновь помещенного диска. Однако мой код продолжает проваливать определенные тестовые случаи, но проходит другие. Я в полном замешательстве и буду рад любой помощи.
Я пытался запустить этот код
class GameBoard:
def __init__(self, size):
self.size = size
self.num_disks = [0] * size
self.items = [[0] * size for i in range(size)]
self.points = [0] * 2
def num_free_positions_in_column(self, column):
count = 0
for i in range(self.size):
if self.items[column] == 0:
count += 1
return count
def game_over(self):
num = 0
for i in range(self.size):
if self.num_free_positions_in_column(i) == 0:
num += 1
if num == self.size:
return True
return False
def display(self):
for row in range(self.size - 1, -1, -1):
for colum in range(self.size):
item = self.items[colum][row]
if item == 0:
print(" ", end=" ")
elif item == 1:
print("o", end=" ")
elif item == 2:
print("x", end=" ")
print()
print("-" * ((2 * self.size) - 1))
for colum in range(self.size):
print(colum, end=" ")
print()
print(f"Points player 1: {self.points[0]}")
print(f"Points player 2: {self.points[1]}")
def add(self, column, player):
if self.num_free_positions_in_column(column) > 0:
row = self.num_disks[column]
self.items[column][row] = player
self.num_disks[column] += 1
return row
else:
return -1
def num_new_points(self, column, row, player):
totals = 0
count = 0
for i in range(self.size):
if self.items[row] == player:
count += 1
if count >= 4:
totals += 1
else:
count = 0
count = 0
for x in range(self.size):
if self.items[column][x] == player:
count += 1
if count >= 4:
totals += 1
else:
count = 0
count = 0
s_col, s_row = column, row
while s_col > 0 and s_row > 0:
s_col -= 1
s_row -= 1
while s_col < self.size and s_row < self.size:
if self.items[s_col][s_row] == player:
count += 1
if count == 4:
totals += 1
else:
count = 0
s_col += 1
s_row += 1
count = 0
s_col, s_row = column, row
while s_col < self.size - 1 and s_row > 0:
s_col += 1
s_row -= 1
while s_col >= 0 and s_row < self.size:
if self.items[s_col][s_row] == player:
count += 1
if count == 4:
totals += 1
else:
count = 0
s_col -= 1
s_row += 1
self.points[player - 1] = totals
return totals
Тестовый пример:
board.add(0,1)
board.add(0,2)
board.add(1,1)
board.add(1,2)
board.add(2,1)
board.add(2,2)
board.add(3,1)
board.add(3,2)
board.add(4,1)
print("Newly created 4-in-a-row sequences: ",board.num_new_points(4,0,1))
board.display()```
The expected output should be:
Newly created 4-in-a-row sequences: 1
x x x x
o o o o o
-
0 1 2 3 4
Points player 1: 2
Points player 2: 1
\*however, the got output is \*
Newly created 4-in-a-row sequences: 2
x x x x
o o o o o
-
0 1 2 3 4
Points player 1: 2
Points player 2: 0
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-project