Форум сайта python.su
Добрался до ООП. Вроде разобрался, и попробовал написать какой то код, чтобы попрактиковаться. Но как правило, первый блин комом, поэтому прошу соображающих в этом деле людей, указать на ошибки.
ПС: на английский переводить на стал, поэтому если русский текст ломает глаза, не читайте - я предупредил.
# Программа "Ходилка" # С намёком на игру # Смысл программы в том, что бы перемещать некий объект по карте # и закрепить на практике теорию объектно ориентированного программирования. # Питон 3.4 # Кодировка UTF-8 class Клетка(object): """Свойства и состояния клетки карты""" клетка = [] дерево = "Х" пусто = " " class Генератор2дМассива(object): """Генерирует двумерный массив из заданных параметров.""" def генерация_массива(собств, вертикаль, горизонталь): массив = [] for координата_У in range(вертикаль): массив.append([]) for координата_Х in range(горизонталь): массив[координата_У].append([]) # Возвращаем созданный массив: return массив class ИгровойЭкран(Клетка, Генератор2дМассива): """Отображает на экране видимую область""" def __init__(собств, горизонталь=3, вертикаль=3): """ Инициализирует игровой экран (зону видимости персонажа) :param горизонталь: задаёт размер экрана, по ширине, :param вертикаль: задаёт размер экрана, по высоте, :return:возвращает двумерный массив экрана """ собств.экран = собств.создание_изображения_экрана(вертикаль, горизонталь) собств.ширина = горизонталь собств.высота = вертикаль собств.коорд_У = 1 собств.коорд_Х = 1 собств.выход = "" def перемещение_по_карте(собств, локация): """ Перемещает экран по карте локации. """ # Начинаем цикл с запросом на перемещение. print(локация.высота) while собств.выход != "выход": print("координаты камеры : У =", собств.коорд_У, "Х =", собств.коорд_Х) # Осуществляем срез с карты локации для проецирования на экран. for ц in range(собств.высота): собств.экран[ц] = локация.карта[собств.коорд_У + ц]\ [собств.коорд_Х: собств.коорд_Х + собств.ширина] # Выводим изображение на экран и запрашиваем у пользователя направление движения. собств.изображение() направление = собств.запрос_направления() собств.изменение_координат(локация, направление) def изменение_координат(собств, локация, направление): "Изменяет координаты экрана (перемещает по карте)." print(локация.высота) # Перемещаем камеру. if направление == "север": собств.коорд_У -= 1 elif направление == "юг": собств.коорд_У += 1 elif направление == "восток": собств.коорд_Х -= 1 elif направление == "запад": собств.коорд_Х += 1 elif направление == "выход": собств.выход = направление return собств.выход # выход из программы. else: print("Фраза", направление, "- не является возможным направлением.") # Проверяем координаты экрана на достижение границ карты. if собств.коорд_У < 0: собств.коорд_У = 0 elif собств.коорд_Х < 0: собств.коорд_Х = 0 elif собств.коорд_У >= локация.высота - собств.высота: собств.коорд_У = локация.высота - собств.высота elif собств.коорд_Х >= локация.ширина - собств.ширина: собств.коорд_Х = локация.ширина - собств.ширина # Возвращаем координаты камеры. return собств.коорд_Х, собств.коорд_У def запрос_направления(собств): """Запрашивает у пользователя направление движения.""" НАПРАВЛЕНИЕ = ["север", "юг", "запад", "восток", "выход"] направление = "" while направление not in НАПРАВЛЕНИЕ: направление = input( "Напишите, куда желаете направиться: север, юг, запад или восток? ").lower() if направление not in НАПРАВЛЕНИЕ: print("Неверная команда, попробуйте ещё раз.") return направление def изображение(собств): print(собств.экран[0][0], "|", собств.экран[1][0], "|", собств.экран[2][0]) print("--------------") print(собств.экран[0][1], "|", собств.экран[1][1], "|", собств.экран[2][1]) print("--------------") print(собств.экран[0][2], "|", собств.экран[1][2], "|", собств.экран[2][2]) def создание_изображения_экрана(собств, вертикаль=3, горизонталь=3): экран = собств.генерация_массива(вертикаль, горизонталь) return экран class КартаЛокации(Клетка, Генератор2дМассива): """Пространство, по которому перемещается герой""" def __init__(собств, горизонталь=10, вертикаль=10): """Создаёт карту локации и расставляет на ней деревья.""" собств.карта = собств.генерация_карты(вертикаль, горизонталь) собств.высота = вертикаль собств.ширина = горизонталь # Эта программа герерирует двумерный массив карты и объекты на ней. def генерация_карты(собств, вертикаль=10, горизонталь=10): """ Генерирует карту, и расставляет на ней деревья.""" import random карта = собств.генерация_массива(вертикаль, горизонталь) # Расставляем обозначения на карту. for у in range(вертикаль): for х in range(горизонталь): выбор_объекта = random.randint(0, 3) if выбор_объекта <= 1: карта[у][х].append(собств.пусто) else: карта[у][х].append(собств.дерево) return карта локация1 = КартаЛокации() экран = ИгровойЭкран() экран.перемещение_по_карте(локация1)
Отредактировано Mixeyka (Окт. 23, 2014 09:11:24)
Офлайн