diff --git a/LaddersV1.py b/LaddersV1.py deleted file mode 100755 index 726f3f5..0000000 --- a/LaddersV1.py +++ /dev/null @@ -1,186 +0,0 @@ -import random -from Player import Player - - -class LaddersV1(): - - def dice(self): - diced = random.randint(1, 6) - print(f'{diced} was diced') - return diced - - def move(self, 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(self, 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 0 <= e < 10: - line += ' ' + str(e) - else: - line += str(e) - - line += ' ' - print(line) - - def game_loop(self, auto, field): - random.seed() - - exit_game = False - stop_game = False - winner = None - result = 0 - - # Инициализируем список игроков - players = [Player("red"), Player("green"), Player("blue"), Player("yellow")] - - if not auto: - # Изначально вывести пустое поле без игроков - self.draw(field, players) - - # Игровой цикл (бесконечный) - while True: - - # Если дана команда выйти из игры - if exit_game: - if not auto: - # Рисуем поле - self.draw(field, players) - - # Вывод информации - print("Игра прервана") - - # Сохранить результат - result = -1 - break - - # Если у игры выявлен победитель - if winner is not None: - if not auto: - # Нарисовать поле - self.draw(field, players) - - # Вывести победителя - print((f'{winner.color} is winner')) - print(f'moves of winner are {winner.dices}') - - # Сохранить результат - result = len(winner.dices) - - break - - # Если выходим по причине зацикливания - if stop_game: - if not auto: - # Рисуем поле - self.draw(field, players) - - # Вывод информации - print("Игра прервана по причине зацикливания") - - # Сохранить результат - result = -1 - 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 - - # Бросаем кубик с возможностью повторить - repeat = True - while repeat: - # Бросает кубик один раз - diced = self.dice() - - # Двигаем игрока на кол-во шагов с кубика - # Возвращает True, если нужно повторить ход - repeat = self.move(p, diced, field) - - # Сохраняем значение кубика - p.dices.append(diced) - - # Eсли игрок попал в последнюю клетку - if p.position == len(field) - 1: - # Установить победителя (таким образом дать команду выйти из игры) - winner = p - - # Прервать цикл обработки игроков - break - - # Проверяем "зацикливание" - if len(p.dices) >= 1000: - # Даем команду прервать игру - stop_game = True - - # Прервать цикл обработки игроков - break - - if not auto: - # Пустая строка - print() - - # Рисует поле - self.draw(field, players) - - # Возвращаем кол-во бросков - return result - - diff --git a/LaddersV2.py b/LaddersV2.py deleted file mode 100755 index f3d1549..0000000 --- a/LaddersV2.py +++ /dev/null @@ -1,8 +0,0 @@ -import random -from LaddersV1 import LaddersV1 - - -class LaddersV2(LaddersV1): - - def dice(self): - return random.randint(1, 3) diff --git a/LaddersV3.py b/LaddersV3.py deleted file mode 100755 index 51b903e..0000000 --- a/LaddersV3.py +++ /dev/null @@ -1,9 +0,0 @@ -from LaddersV1 import LaddersV1 - - -class LaddersV3(LaddersV1): - - def move(self, player, steps, field): - super().move(player, steps, field) - - player.skip = False diff --git a/LaddersV4.py b/LaddersV4.py deleted file mode 100755 index 3d2b55f..0000000 --- a/LaddersV4.py +++ /dev/null @@ -1,16 +0,0 @@ -from LaddersV1 import LaddersV1 - - -class LaddersV4(LaddersV1): - - def move(self, player, steps, field): - super().move(player, steps, field) - - # Возвращаем True если значение поля отрицательное - return field[player.position] < 0 - - - - - - diff --git a/LaddersV5.py b/LaddersV5.py deleted file mode 100755 index 1562b7d..0000000 --- a/LaddersV5.py +++ /dev/null @@ -1,25 +0,0 @@ -from LaddersV1 import LaddersV1 - - -class LaddersV5(LaddersV1): - - def move(self, player, steps, field): - # считаем сколько клеток осталось до конца - r = len(field) - 1 - player.position - - super().move(player,steps, field) - - # если количество клеток, которые игроку надо пройти, больше чем клеток до конца - if steps > r: - # двигаем игрока назад от конца поля - # на количество клеток в виде разнице оставшихся клеток до конца и клеток которые надо пройти - player.position = len(field) - 1 - (steps - r) - - # Возвращаем True если значение поля отрицательное - return field[player.position] < 0 - - - - - - diff --git a/Player.py b/Player.py deleted file mode 100755 index cb23d20..0000000 --- a/Player.py +++ /dev/null @@ -1,7 +0,0 @@ -class Player: - - def __init__(self, color): - self.color = color - self.position = -1 - self.skip = False - self.dices = [] diff --git a/TestGit.txt b/TestGit.txt deleted file mode 100644 index e69de29..0000000 diff --git a/files.py b/files.py deleted file mode 100755 index 85514e4..0000000 --- a/files.py +++ /dev/null @@ -1,33 +0,0 @@ -import os - - -def list_levels(): - files = os.listdir(path='.') - result = [] - for file in files: - if file.lower().endswith('.txt'): - result.append(file) - - return result - - -def load(file): - # 1. Загрузить весь файл в строку - f = open(file, 'r') - s = f.read() - - # 2. Заменить все пробелы и переводы строки на "ничего" - s = s.replace(' ', '') - s = s.replace('\n', '') - - # 3. Из полученной строки создать массив, используя разделитель "," - a = s.split(',') - - # a - массив строк, в которых хранятся числа - b = [] - for x in a: - b.append(int(x)) - # b - массив чисел из а - - f.close() - return b \ No newline at end of file diff --git a/find_second_max.py b/find_second_max.py deleted file mode 100755 index 4e63586..0000000 --- a/find_second_max.py +++ /dev/null @@ -1,60 +0,0 @@ -def find_second_max(array): - # Проверяем входные данные - if array and len(array) > 0: - # Максимальное значение - первое значение - my_max = array[0] - # Второе по величине число пока не найдено - my_second_max = None - - # Проходим все элементы массива - for i in array: - # Если текущий элемент массива больше максимального - if i > my_max: - # Бывшее до сих пор максимальное значение - становится вторым по величине - my_second_max = my_max - # Текущий элемент становится максимальным значением - my_max = i - # Если текущий элемент массива меньше максималььного - elif i < my_max: - # Если второе по величине значение еще не найдено - if my_second_max is None: - # Текущий элемент становится вторым по величине значением - my_second_max = i - # Если второе по величине значение уже определено - else: - # Если текущий элемент больше текущего второго по величине значения - if i > my_second_max: - # Текущий элемент становится вторым по величине значением - my_second_max = i - - # Вариант когда текущий элемент равен минимальному значению, мы не рассматриваем, - # т.к. он никак не влияет на найденные значения - - return my_second_max - - # Если массив пустой или вообще не имеет значения - return None - - -################################################# -def verifier(test_name, actual, expected): - print(test_name) - if actual != expected: - print("=======> FAILED! <=======") - print(f"Got value <{actual}>") - print(f"Expected value is <{expected}>") - else: - print("PASSED") - print() - - -second_max_tests = [([1, 6, 3, 6, 54, 3, 6, 3, 1, 2, 8], 8), - ([2, 2, 2, 2, 2, 2, 2, 2, 2], None), - ([2, 2, 2, 2, 2, 2, 2, 2, 4], 2), - ([], None), - ([1, 0, -1], 0), - ([4, -7, 6, 23, -5, 23, -4, 5, 7, 100], 23)] - -for i in range(len(second_max_tests)): - verifier(f"Second max test {i+1}", find_second_max(second_max_tests[i][0]), second_max_tests[i][1]) - diff --git a/level1.txt b/level1.txt deleted file mode 100755 index 83200ef..0000000 --- a/level1.txt +++ /dev/null @@ -1,10 +0,0 @@ -0, 0, 2, 3, 4, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 1, 0 \ No newline at end of file diff --git a/level2.txt b/level2.txt deleted file mode 100755 index 5474b09..0000000 --- a/level2.txt +++ /dev/null @@ -1,10 +0,0 @@ -0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 4, 0, 0, 0, -0, 7, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 6, 0, 0, 0, 0, 3, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 5, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 1, 0 \ No newline at end of file diff --git a/level3.txt b/level3.txt deleted file mode 100755 index 670fcde..0000000 --- a/level3.txt +++ /dev/null @@ -1,10 +0,0 @@ -6, 0, 2, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 5, 0, 0, 0, 0, 0, 0, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 1, 1, 1, 1, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 3, 1, 0 \ No newline at end of file diff --git a/level4.txt b/level4.txt deleted file mode 100755 index e6920de..0000000 --- a/level4.txt +++ /dev/null @@ -1,10 +0,0 @@ -0, 0, -1, -1, -1, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 9, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 9, 0, 8, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 4, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 5, 6, 7, 1, 0 \ No newline at end of file diff --git a/level5.txt b/level5.txt deleted file mode 100755 index 5bb4ed2..0000000 --- a/level5.txt +++ /dev/null @@ -1,10 +0,0 @@ -0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 9, 0, 9, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 3, 0, 0, 4, 0, 5, 0, 6, 0, -0, 0, 0, 0, 0, 0, 0, 80, 0, 0, -0, 0, 0, 9, 9, 0, 8, 90, 7, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 9, 0, 0, 9, 9, 9, 1, 0 \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100755 index 095f91d..0000000 --- a/main.py +++ /dev/null @@ -1,136 +0,0 @@ -from run import run -from files import list_levels -from files import load - - -def level_menu(levels): - for i in range(1, len(levels) + 1): - print(f'{i}. Level {i}') - print(f'{len(levels) + 1}. Назад') - - -def level_menu_loop(levels): - while True: - level_menu(levels) - inp = input() - if inp.isnumeric(): - op = int(inp) - if 1 <= op <= len(levels) + 1: - if op <= len(levels): - # Выбор уровня - return levels[op - 1] - else: - # Выход из меню - return None - - else: - print('Выберите номер из меню!') - else: - print('Вводите только цифры!') - - -# Добавляем подменю для выбора версии игры -def game_versions_menu(): - ## 1 ## - max_version = 6 - for i in range(1, max_version): - print(f'{i}. Version {i}') - - print(f'{max_version}. Назад') - - -def game_version_loop(): - ## 2 ## - while True: - game_versions_menu() - inp = input() - if inp.isnumeric(): - op = int(inp) - if 1 <= op <= 6: - ## 3 ## - if op <= 5: - return op - else: - # Выход из меню - return 0 - else: - print('Выберите номер из меню!') - else: - print('Вводите только цифры!') - - -def main_menu(): - print('1. Выбор уровня') - print('2. Выбор кол-ва запусков') - print('3. Выбор версии игры') ## 4 ## - print('4. Запуск') - print('5. Выход') - - -def main_menu_loop(): - levels = list_levels() - level = '' - runs = 1 - version = 0 ## 5.1 ## - - while True: - print(f'Выбранный уровень: {level}') - print(f'Кол-во запусков: {runs}') - print(f'Выбранная версия правил: {version}') - - print() - - # Вывод меню на экран - main_menu() - # Ввод от пользователя - inp = input() - - # Валидация ввода пользователя - if inp.isnumeric(): - op = int(inp) - if 1 <= op <= 5: - # Ввод пользователя валидирован, выполняем действие - if op == 1: - # Выбор уровня - ret = level_menu_loop(levels) - - if ret is not None: - level = ret - - elif op == 2: - # Ввод кол-во запусков - inp2 = input('Введите кол-во запусков: ') - if inp2.isnumeric(): - runs = int(inp2) - else: - print('Вводите только цифры!') - - ## 5.2 ## - elif op == 3: - # Выбор версии игры - ret = game_version_loop() - - if ret > 0: - version = ret - - elif op == 4: - # Запуск - if level in levels: - if version > 0: - run(load(level), runs, version) ## 7 ## - else: - print('Для начала выберите версию!') ## 8 ## - else: - print('Для начала выберите уровень!') - - else: - # Завершение программы - break - - else: - print('Выберите номер из меню!') - else: - print('Вводите только цифры!') - - -main_menu_loop() diff --git a/run.py b/run.py deleted file mode 100755 index da0c4ba..0000000 --- a/run.py +++ /dev/null @@ -1,31 +0,0 @@ -from LaddersV1 import LaddersV1 -from LaddersV2 import LaddersV2 -from LaddersV3 import LaddersV3 -from LaddersV4 import LaddersV4 - - -def run(level, runs, version): - if version == 1: - game = LaddersV1() - if version == 2: - game = LaddersV2() - if version == 3: - game = LaddersV3() - if version == 4: - game = LaddersV4() - - # Ручной или авто режим - auto = False - - # Если больше одного запуска - if runs > 1: - # Автоматически включаем авто режим - auto = True - - results = [] - - for i in range(runs): - results.append(game.game_loop(auto, level)) - - print(f'Average: {sum(results)/runs}') - print() \ No newline at end of file