import random def dice(): return random.randint(1, 6) def move(player, steps, field): # Алгоритм действий такой: # сначала увеличиваем позицию игрока на кол-во шагов. player.position += steps if player.position >= len(field): player.position = len(field) - 1 # Затем проверяем, нет ли особых действий на клетке, на которую попал игрок. cell = field[player.position] if cell > 0: # Если есть, то либо перемещаем игрока на новую позицию, либо выставляем свойство skip. if cell == player.position: # Пропусти следующий ход! player.skip = True else: player.position = cell def draw(field, players): for i in range(0, len(field), 10): sub = field[i:i+10] line = '' for j in range(len(sub)): e = sub[j] pos = i + j player_found = False for player_index in range(len(players)): pl = players[player_index] if pl.position == pos: line += pl.color[:2] player_found = True break if not player_found: if e < 10: line += ' ' + str(e) else: line += str(e) line += ' ' print(line) def game_loop(auto, field): random.seed() exit_game = False winner = None result = 0 # Инициализируем список игроков players = [Player("red"), Player("green"), Player("blue"), Player("yellow")] if not auto: # Изначально вывести пустое поле без игроков draw(field, players) # Игровой цикл (бесконечный) while True: # Если дана команда выйти из игры if exit_game: if not auto: # Рисуем поле draw(field, players) # Вывод информации print("Игра прервана") # Сохранить результат result = -1 break if winner is not None: if not auto: # Нарисовать поле draw(field, players) # Вывести победителя print((f'{winner.color} is winner')) print(f'moves of winner are {winner.dices}') # Сохранить результат result = len(winner.dices) break # Выполняет действия для каждого игрока for p in players: # Если игрок должен пропустить ход if p.skip: if not auto: # Вывести на экран информацию о том, что он пропускает ход print(f'{p.color} skips') # Не пропускать СЛЕДУЮЩИЙ ход p.skip = False # Если ход пропускать не надо else: if not auto: # Выводит текст на экран и ждет ввода inp = input(f'{p.color} to move') else: inp = '' # Обработка ввода # Если пользователь ввел exit или quit if inp == 'exit' or inp == 'quit': # Даем команду выйти из игры exit_game = True # Прервать цикл обработки игроков break # Бросает кубик diced = dice() # Двигаем игрока на кол-во шагов с кубика move(p, diced, field) # Сохраняем значение кубика p.dices.append(diced) # Eсли игрок попал в последнюю клетку if p.position == len(field) - 1: # Установить победителя (таким образом дать команду выйти из игры) winner = p # Прервать цикл обработки игроков break if not auto: # Пустая строка print() # Рисует поле draw(field, players) # Возвращаем кол-во бросков return result