Помогите с Python
Что за ошибка??? Вроде всё правильно написал, помогите, кто знает
Что за ошибка??? Вроде всё правильно написал, помогите, кто знает
В игре Colonization Сида нашего Мейера в распоряжении города имеется 9 клеток для ведения хозяйственной деятельности:
Однако, фон карты как-бы намекает, что игровое поле можно растянуть ещё на одну клеточку в бок. Как, например в той же Цивилизации.
Может быть кто-то в курсе, что можно подправить, чтобы расширить городскую территорию?
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Как-то давно я сам запилил игру на Action Script 2 (хотя я не программист так-то). Игра была сделана к празднику HR менеджеров, но так и не была выложена в сеть и осталась лежать у где-то меня в дальнем ящике. Игра оч простая и по времени занимает около 5 минут. Вы управляете HR менеджером, который должен ловить в папку падающие резюмешки.
Цель игры: необходимо словить как можно больше резюме, пропустить можно только 5 раз.
Я знаю, что никто не читает длинные описания, поэтому постараюсь изложить суть без лишней воды.
Логлайн:
Группа людей, которые никак друг с другом не связаны, неизвестным образом внезапно оказываются в странной кубической комнате, каждая грань которой снабжена люком, ведущим в другую такую же комнату. Единственная разница между комнатами – это их цвет и наличие разнообразных смертоносных ловушек.
Для начала кадр из фильма для тех, кто не смотрел или не помнит:
Как это выглядит в игре:
Уже было несколько попыток сделать подобную игру: одна недоделана, а вторая мало что имеет общего с оригинальной идеей. Мне тоже пришлось отойти от строгого следования канону. Отчасти из-за геймдизайна, отчасти из-за технических трудностей.
Итак, сводная информация об игре:
Куб, как и в фильме, размером 26x26x26 комнат
Комнаты по 5 метров вместо оригинальных 4.3
Комнаты не перемещаются
Ничего считать не надо. Просто идете по координатам до нулевой комнаты
Последние два пункта сделаны в угоду геймдизайну. Ни один игрок не будет вникать в математику фильма (тем более она там с ошибками) и сидеть высчитывать куда надо идти.
Перемещаться можно как в верхние комнаты, так и в нижние
Нельзя открыть все двери.
При открытии двери все остальные двери автоматически закрываются. Сделано это ради оптимизации. Используется всего две комнаты (видео в самом низу). При открытии двери комнаты другая комната перемещается в нужное место и конфигурируется согласно сгенерированным данным. Плюс есть небольшой геймдизайнерский момент: не получиться быстро проскакивать комнаты с ловушками, вылетая из одного шлюза и влетая в другой, получая при этом минимальный урон.
Можно вывалиться из крайних комнат за пределы куба.
Исключение - верхние крайние комнаты. Двери на потолках у таких комнат не открываются.
Мультиплеера нет.
Во-первых, мне лень писать для этого код,. Во-вторых, я не представляю как бы я делал анимацию перемещения по стенам и шлюзам. Выходит слишком геморно. Подозреваю, что во втором проекте создатели отказались от любого вертикального перемещения именно по этой причине.
Зато есть четыре условных персонажа, за которых можно играть: математик, инженер, полицейский и доктор.
У каждого персонажа свои характеристики. Кратко опишу некоторые особенности персонажей:
Математик. Ему чаще других попадаются подсказки, указывающие направление к более безопасному пути (об этом чуть позже), но он получает наибольший урон от ловушек.
Инженер. Может давать подсказки о ловушках. Также он быстрее всех открывает двери.
Полицейский. Имеет регенерацию, получает из квартета наименьший урон, быстро передвигается.
Доктор. Регенерирует быстрее полицейского, отсутствует побочные эффекты от некоторых ловушек (например, двоение в глазах от газа), самый медленный из всех.
Вся вариация происходит по девяти параметрам.
После смерти персонажа игрок выбирает другого и начинает с последней безопасной комнаты.
Кидать ботинки (и не только) можно, но шнурков, чтобы их обратно вытянуть, нет.
Придется смириться с потерей или идти подбирать на свой страх и риск.
В игре существуют следующие предметы: ботинки, фломастер, аптечка, противогаз и трупы, у которых это все можно забрать.
В оригинале никаких противогазов и тем более аптечек не было, но с ними есть хоть какое-то разнообразие и помощь в прохождении. Возможно, в будущем добавлю уровни сложности, где этих предметов не будет.
Да, с фломастером можно рисовать на стенах.
Каждый предмет может получать урон от ловушек.
У ловушек есть четыре вида сенсоров, реагирующих на следующее: давление на пол, обнаружение объектов, скорость передвижения и уровень шума.
Можно с шумом грохнуться с высоты и получить шилом в жопу. Дайте знать, если нафантазируете еще какие-либо принципы работы.
Придумывать ловушки оказалось труднее, чем я думал. Если у кого-то есть идеи, то можете написать в комментах.
На старте игры генерируется рандомный путь к нулевой комнате. Комнаты на этом пути имеют пониженную вероятность нахождения в них ловушки (зеленый цвет). Ближе к нулю более опасные ловушки начинают встречаться чаще. Чем дальше игрок удаляется от этого пути, тем чаще будут появляться подсказки, указывающие направление к этому пути (стрелки на дверных панелях).
Со стороны выглядит это как-то так:
Замечания приветствуются.
Всем привет! Никогда не имел опыта в программировании и вот, в 35 лет, решил начать изучать питон. Начал с самого начала, "Hello World!" все дела. Учился самостоятельно в течение года и когда добрался до библиотеки pygame, решил сделать небольшую игру. Она простенькая, и конечно можно еще многое добавить или поправить, но для первого проекта думаю сойдет. Кому интересно можете попробовать поиграть, сделал инстальник, ссылку прикреплю. Вирусов там нет.
Цель игры: уворачиваться от падающих листьев и пёселя)
Автор текста: dlinyj
Когда я разбирался с программируемыми калькуляторами, то думал, как бы элегантнее протестировать функциональность устройства. Один из известных способов проверки – это реализация какой-либо игры.
Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.
Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.
В предыдущей своей статье "Калькуляторы с обратной польской нотацией" я делал обзор литературы для программируемых калькуляторов. Среди которой была замечательная книга А.Г. Гайшут "Калькулятор твой помощник и соперник в играх".
В этой книге приводится огромное количество примеров игр на калькуляторе и, в частности, пример игры в крестики-нолики:
Мне не удалось найти описания логики работы этих игр, а автор книги, к сожалению, умер в 2015 году. Попытка искать ответ в публикациях автора, любезно предоставленных на его личном сайте, не увенчалась успехом.
Поэтому придётся разбираться с этой программой самостоятельно. Приведу текст и описание программы из книги под спойлером:
Описание программы Крестики-нолики из книги:
Главная задача – это перенос этого кода с МК-61 на калькулятор HP-32S. Для начала, разберёмся как эта программа работает.
Первое, что я сделал – это перенабрал код из книги в формате, который понимает онлайн-эмулятор МК-61.
Кстати, если интересно, то можно попробовать поиграть в эмуляторе, чтобы понять принцип работы. Для этого копируем код, вставляем в область «Код программы:» и нажимаем кнопку «Ввести в память». Картинка из книжки выше подсказывает нам, что калькулятор даёт координаты, куда ставить "X", а мы ему в ответ передаём координаты, куда ставить "O".
Координаты для игры
Чтобы начать играть на клавиатуре калькулятора, нужно нажать кнопку [С/П]. В ответ будет выведено число, первое число всегда «9» (центр поля). В ответ необходимо ввести свою координату, например, «2» и нажать [С/П]. И так далее, пока вы не проиграете (калькулятор выведет «77», либо будет ничья (калькулятор выведет «0»).
Калькулятор победил
Чтобы посмотреть последний ход калькулятора, надо обменять регистры X и Y местами, для этого нужно нажать на клавишу [⟷].
Проверка показала, что всё прекрасно работает как в эмуляторе, так и на живом калькуляторе, и ошибок в программе нет.
Для понимания работы программы, я переписал её на python. Конечно, даже при переносе на привычный язык программирования, код будет выглядеть немного диковато, поскольку реализовывался на совершенно иных принципах, но он хотя бы будет читаемым для остальных пользователей.
Особенность программирования МК-61 в том, что он пропускает команду перехода, если условие истинно, и исполняет — если ложно! Поэтому все условия для python пришлось инвертировать. Плюс, я для удобства ввёл дополнительные функции, которые также перенёс впоследствии в HP-32S: функция вывода координат крестиков и ввода ноликов, функция ничья и победа калькулятора:
Первое – инициализирую регистры калькулятора:
После всех подпрограмм идёт головная программа:
Можно увидеть, что в любом случае в самом начале крестик будет стоять на координате 9. Вся основная логика сокрыта в подпрограмме.
Из всего кода я понял, что второй ход калькулятора будет на единицу меньше оппонента, а если ход был в координату «1», то равен восьми. Но вот что делает остальная логика программы, особенно зачем там тригонометрическая функция, для меня осталось загадкой. Буду рад читателям, если кто-то сможет прояснить, как же работает эта программа.
Исходный код доступен в репозитории проекта.
И, да, код вполне себе работоспособен, в чём несложно убедиться:
Напомню, что калькулятор HP-32S, который есть у меня, принадлежит семейству калькуляторов HP10B/14B/17B/17BII/19BII/20S/21S/22S/27S/28S/32S/32SII/42S, таким образом, всё, что приводится ниже, с небольшими адаптациями можно будет перенести и на другие модели этой серии.
Трудозатраты в предыдущей главе, по переносу кода на python, были проделаны с двумя целями:
Понять, как же работает этот код (увы, не выполнено).
Более удобно переносить на другую модель калькулятора.
Этакая программная блок-схема, которая позволяет понять, какие регистры нужны, какие переходы и прочее.
Вооружившисьдокументацией на калькулятор HP-32S, я переписал программу крестиков-ноликов с питона для него. Для удобства я делал это в таблицах Exel. Как я уже говорил, особенность калькулятора в том, что он маркирует каждую строку буквой и цифрой, а любая метка – это смена буквы. Таблицы идеально подходят для этого.
Ниже под спойлером, приведён код программы. Если вы хоть немного знаете ассемблер и какой-то другой язык программирования, хоть тот же BASIC, то без труда сможете понять, что же там происходит.
Код программы для калькулятора HP-32S:
В силу того, что на калькуляторе HP-32S можно сделать вывод на экран конкретного регистра (с указанием имени регистра), а также запрос ввода другого конкретного регистра, то ввод-вывод становится чуть более интерактивным и интересным.
Лучше один раз увидеть, чем тысячу раз прочитать.
Изначально задача казалась мне такой простой, но заняла у меня достаточно приличное время. Её ценность состояла в том, что мне удалось разобраться — как же программировать для калькулятора HP-32S. В результате оказалось, что из модельного ряда калькуляторов, с которыми я занимался — эта версия оказалась самая дружелюбная и удобная.
Другой задачей, которую я хотел решить — это разобраться, каким образом изобретались подобные программы для микрокалькуляторов. Из-за того, что у калькулятора ограничена память программ, производилась какая-то дичайшая оптимизация, поэтому она выглядит так запутанно. Но, к моему сожалению, ни толковой литературы, ни описания, как это делалось, мне не удалось найти.
Поэтому, если у вас, уважаемые читатели, есть идеи о том, как же работает программа крестики-нолики (можно анализировать код python), то я с удовольствием их выслушаю.
Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.
Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.
Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.
Выспаться, провести генеральную уборку, посмотреть все новые сериалы и позаниматься спортом. Потом расстроиться, что время прошло зря. Есть альтернатива: сесть за руль и махнуть в путешествие. Как минимум, его вы всегда будете вспоминать с улыбкой. Собрали несколько нестандартных маршрутов.
Приветствую!
Начать рассказ о себе без пары слов о прошлом было бы странно. Поэтому коротко и ясно, без лишних подробностей: мне 35 лет, и по меркам нынешней молодёжи, я уже "дед". Последние 10 лет я посвятил маркетингу и рекламе, а в свободное время запустил YouTube-канал по программированию, помогая новичкам осваивать эту невероятную сферу современного мира — IT.
Мужчина 35-ти лет, смотрящий на игровой остров, как я в свои 35 смотрящий на будущее моей игры!
Моя семья — это моя опора: супруга и двое детей. Благословен тем, у кого есть время для хобби. Одно из моих — программирование.
Мои годы в играх
Моя молодость пронеслась в мире виртуальных приключений, где я накопил более 10 000 часов в таких играх, как:
Dota 2: 2,748.5 часов
CS:GO: 931.8 часов
RUST: 899.7 часов
Miscreated: 1,586.2 часа
Age of Empires 2, 3 & 4: примерно 700 часов
И множество других...
К 30 годам я решил отказаться от всех игр на ПК и консолях, отдав последние в дар родственникам.
Вдохновение из прошлого
Поворотным моментом стала статья о первых текстовых играх 1980-х. Вспомнив свои опыты с текстовыми играми во времена wap-интернета, я задумался: а что если совместить мои хобби в одном проекте?
Первые шаги
Начинал я без понятия о том, как создавать игры. Но теперь я знаю, что такое игровой сеттинг, ЛОР и другие ключевые элементы разработки. Моя цель — создать огромный виртуальный мир, где игрока не сковывает линейность.
Технические детали
Я начал с Python 3 и написал логику для генерации игровой карты размером в 1,000,000 ячеек — это 100 на 100 километров. Создать такой масштаб в текстовом формате было вызовом: каждая ячейка — это 100 на 100 метров.
Примерно через 3 дня стараний я сделал это:
Техническая картинка, которая получена сугубо скриптом Python
А в игре для игроков это выглядит красивее и примерно вот так:
По мере прокачки вы получаете больше информации и карта дает ее в том числе
Альфа-версия: Игра уже доступна для тестирования с функциями изучения местности, крафта, добычи ресурсов и прочим.
Бета-версия: Очень скоро.
Релиз.
Еженедельные обновления.
Я ищу активное участие и обратную связь. Ваши комментарии и советы помогут улучшить игру и сделать её интереснее для всех.
Присоединяйтесь!
Проверьте наш игровой бот: Telegram
Мой канал на YouTube: Andrievskii
Официальный сайт игры: Wild World Fun
Я верю в силу честности и открытости. Поделитесь вашими впечатлениями и помогите мне сделать игру лучше!
Я не знаю, принято ли сейчас говорить правду, говорят это не модно и т.д. Но в свои 35 я верю, что даже горькая правда лучше сладкой лжи. Написал я здесь по следующим причинам:
Мне нужны игроки в игру
Мне интересно получить мнение со стороны
Мне интересен эффект от этой статьи, как маркетолога
Я верю, кто-то здесь поможет мне в развитии игры, как минимум советами и сюжетом
Давайте так, ваши комментарии и реакции пусть покажут мне, насколько стоит продолжать описания о игре здесь и вообще здешней аудитории это интересно или нет!
А пока вам скрины с телеграмм бота самой игры:
Скрины из самой игры, это примерно 30% того, что уже есть в игре...