Пытаюсь сделать игру Connect 4. Вот мой код:
board = {}
for i in range(1,8):
board[f'{i}_column'] = {}
for a in range(1,7):
board[f'{i}_column'][f'{i}x{a}_position'] = 'Empty'
class Checker:
def __init__(self,color):
self.color = color
def find_column_amount(self,column):
self.column_num = 0
self.column_full = False
for i in range(0,6):
if board[f'{column}_column'][f'{column}x{6-i}_position'] != 'Empty':
self.column_num += 1
else:
pass
if self.column_num >= 6:
self.column_full = True
def place(self,column):
self.find_column_amount(column)
if self.column_full == False:
if column <= 7 and column > 0:
board[f'{column}_column'][f'{column}x{6-self.column_num}_position'] = self.color.title()
else:
print('You\'re out of the range!')
else:
print(f'Column {column} is full!\nTry another one!')
def check_win(self):
for d in range(1,7):
for c in range(1,5):
for b in range(c,c+4):
vars()[f'value_{b-c+1}'] = board[f'{b}_column'][f'{b}x{d}_position']
if value_1 == value_2 == value_3 == value_4 and (value_1 and value_2 and value_3 and value_4) != 'Empty':
self.win()
def win(self):
print('You won!')
Чтобы проверить, сработало ли это, я запустил это:
p1 = Checker('red')
p1.place(1)
p1.place(2)
p1.place(3)
p1.place(4)
p1.check_win()
Я пробовал этот код, но он не работал. Неправильно была функция check_win. Я протестировал код вне функции и изменил self.win () на print («Вы выиграли!»), И он сработал.
for d in range(1,7):
for c in range(1,5):
for b in range(c,c+4):
vars()[f'value_{b-c+1}'] = board[f'{b}_column'][f'{b}x{d}_position']
if value_1 == value_2 == value_3 == value_4 and (value_1 and value_2 and value_3 and value_4) != 'Empty':
print('You won!')
Результат был следующим:
You won!
Когда я снова подключил его к функции, это не сработало. Я не знаю, что делаю не так. Может кто подскажет, как это исправить?