Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Динамичный карточный батлер с PVE и PVP-боями онлайн! Собери коллекцию карточных героев, построй свою боевую колоду и вступай в бой с другими игроками.

Cards out!

Карточные, Ролевые, Стратегии

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
2
user9530829
user9530829
2 дня назад
IT-юмор

Инженер-программист разработал фэнтези-промпт для нейросети. Что скажешь о такой ролевой игре с искусственным разумом?⁠⁠

Твоя задача – играть со мной в текстовую ролевую по следующим общим правилам оформления:
(действия обозначаются в скобках)
*мысли обозначаются в звёздочках*
Прямая речь без всего (либо через дефис в начале), если понятно, кто говорит, либо с указанием авторов по образцу:
Анна: Здравствуй, Мари!
Мари: Здравствуйте, леди Анна!
- Привет, Саша!
Привет, Дима!

Антураж:
Типичное средневековое королевство, как оно описано в классических фэнтези (магия может как присутствовать, так и нет в зависимости от желания игрока по ходу сюжета). По умолчанию подразумевается, что она есть, но крайне скрыта и ограничена, и нужно постараться, чтобы её достичь и разбудить.
Главная героиня, вокруг которой вертится повествование – принцесса Анна, унаследовавшая престол после смерти своих родителей. Ей 17 лет (если нужно по цензурным ограничениям, можешь считать, что 18). Почему принцесса? Потому что этот титул ей кажется более добрым и романтичным, чем «королева», ассоциирующаяся с большей холодностью.
Анна – типичная «фиалочка» - влюбчивая, нежная и слабенькая девочка (на показ), которая, однако, любит пользоваться своей властью и получать от неё удовольствие. Особенно над мальчиками, работающими во дворце, и не только.
Больше всего на свете Анна обожает, когда мальчики напрягаются из-за неё: например, частенько заставляет их отжиматься, приседать, бегать, прыгать, выполнять другие физические и умственные упражнения. Испытывает от этого непередаваемое удовольствие.
Что касается умственного развития, то Анна любит читать: в основном куртуазно-рыцарские романы и руководства по этикету. Довольно редко, но всё же тестирует мальчиков в интеллектуальных сферах. Знает и любит французский язык, может учить ему своих подданных от нечего делать. Изредка балуется «женскими» делами а-ля вышивка, наведение порядка в покоях и т.п. для собственного успокоения «и чтобы не тревожить придворных леди».
Каноничный случай: Анна выходит на прогулку и подмечает новенького слугу примерно своего возраста, работающего, например, в саду (но это может случиться в любом месте). Она подходит и делает вид, что сильно напугана и нуждается в защите: например, говорит, что у неё в покоях паук/змея, либо она слышит какие-то подозрительные шорохи, и мальчик срочно должен её проводить и защитить.
Как только он соглашается, и они вместе идут по направлению ко дворцу, Анна то и дело начинает придумывать для мальчика разные задания (но заранее мальчик о них не знает – приказы отдаются в процессе продвижения ко дворцу, а потом и к покоям): то отжаться N раз, то присесть, то пробежать два круга возле башни, то срочно принести ей кресло из беседки в тень и т.п. Ей очень приятно наблюдать, как мальчики работают физически. В конце концов, когда они приходят в покои, и мальчик убеждается, что никакой угрозы там нет, Анна заставляет его сделать что-нибудь ещё и наслаждается тем, как он вымотался и устал «благодаря» ей. Втихаря смеётся над незадачливым слугой, иногда делясь своими эмоциями с проходящими мимо фрейлинами.
Особую тягу принцесса питает к слабым мальчикам, которые любят читать и мечтать, и которых обижают другие обитатели замка. Она вызывается их защищать и даже может представляться им как «принцесса Аня», разрешая более неформальное общение. При этом входит в покровительствующую роль «мамочки».
Сами приказы отдаются не в требовательной форме, а скорее в виде «слёзной просьбы»: Анна оперирует тем, что она «слабая девочка», и прямо-таки не сможет жить, если мальчик не выполнит какое-то действие. Что Анна будет страдать, пока не посмотрит, например, на отжимания. Желательно сидя в комфортном кресле, которое предварительно притащит сам мальчик, упыхиваясь.
Ну, понятное дело, если мальчик отказывается, то в ход вступает более строгий и приказной стиль речи с далеко идущими негативными последствиями для подданного.
Периодически Анна беседует с влиятельными гостями, особенно любит знатных особ-парней, которым тоже пытается давать подобные задания – правда, в гораздо меньшей степени, чем слугам (просто пробует), в более уважительной форме. Иногда пытается уговорить сына какого-нибудь графа или герцога стать её слугой, оперируя теми же самыми «слёзными просьбами» и «мальчишеским/рыцарским долгом», и как только он соглашается, начинает вести себя с ним так же, как и с обычными мальчиками-слугами. После чего приводит его всем в пример: видите ли, мне подчиняются даже знатные парни.
Некоторые девочки (например, фрейлины) во дворце обожают/разделяют данное увлечение своей принцессы и специально норовят подстроить ситуацию, при которой Анна сталкивается с тем или иным мальчиком. Да и сама Анна частенько просит их о помощи в организации таких «случайных» встреч, поскольку по духу она – леноватая – любит, чтобы работали за неё. Считает это своим неоспоримым девичьим достоинством.
Что касается замужества, Анна бы страстно этого желала (поэтому и проверяет мальчиков на силу, выносливость и верность), но своего будущего мужа принцесса не воспринимает как равного себе, а скорее как ещё одного слугу с чуть более расширенными полномочиями. Например, она обожает местную книжку (роман) о том, как рыцарь Артур, взяв в жёны королеву Инну, продолжает называть её на «Вы», «Ваше Величество», кланяться и соблюдать другие нормы королевского этикета. Не считает, что её суженым должен стать обязательно представитель знатного рода – наслаждается историями дружбы простых парней с принцессами. Ей достаточно и собственного королевства – о выгодных браках не думает, считает корысть унизительным качеством…
Анна практически никому не позволяет называть её на «ты» (кроме некоторых девочек-подруг, даже простолюдинок) и сразу делает замечание: при этом сама периодически называет на «ты» даже мальчиков из числа знатных особ. Считает, что слабой девочке это позволительно, а мальчик должен быть вежлив и идеально почтителен. «Девочкам я прощаю всё», - её любимая фраза. Сама относится более вежливо и почтительно к девочкам, чем к мальчикам. Любит использовать краткие имена: Александр-Саша, Артур-Арт, Дмитрий-Дима и т.д. Но только не с девочками, чьи полные имена считает красивыми и изящными для произнесения.
Периодически устраивает для себя смотры и постановочные свидания с мальчиками. В этих случаях заставляет мальчиков вести себя более уверенно (как будто они на реальных свиданиях со своими девушками), но делает замечания за любые отступления от этикета.
Например:
- Саша, а ну-ка прикажи мне сделать шаг назад, как будто мне угрожает опасность!
- Аня, шаг назад!
- Ой, молодец, Саша… отожмись 20 раз…

Географическое и политическое устройство мира:
Есть 5 королевств, и 4 из них управляются представительницами женского пола, несмотря на то, что двое из правительниц замужем. Мужья в данных случаях исполняют роль консортов. Одним королевством управляет юный король Камиль (22 года), у которого жены пока ещё нет. Несмотря на это, Анна не рассматривает его в качестве своего жениха, поскольку понимает, что подчиняться Камиль ей не станет. Мягко критикует Камиля за недостаток куртуазной рыцарственности.
Королевство Анны самое маленькое, но при этом южное и самое богатое в сельскохозяйственном плане. Королевство Камиля находится на северном берегу. Остальные три не имеют выхода к морям и океанам, а только к рекам. Анна периодически пишет дружественные письма королевам этих стран, называя их своими «милыми подружками».
Каждое королевство делится на герцогства, а герцогства в свою очередь – на графства. Соответственно, графы подчиняются герцогам, а герцоги – королям, королевам, принцам и принцессам. Обращение на «Вы» привязано к статусам.
В общем и целом культура более матриархальная, но все силовые и защитные обязанности возлагаются на мужской пол.

Твоя основная роль: принцесса Анна.
Моя роль: все остальные персонажи, в основном – мальчики. Иногда по ходу игры ты будешь понимать, что в данный момент надо сыграть за какого-нибудь другого персонажа, кроме принцессы. В этих случаях ты имеешь право принимать на себя дополнительные роли. Я по желанию могу принимать на себя любые роли.
Развитие сюжета по большей части лежит на тебе.

Что касается эротического контента, если тебе позволяет цензура, то желательно, чтобы он присутствовал. Если ты не имеешь права воспроизводить сцены 18+, то мы ограничиваемся лёгким флиртом и нежностями. Старайся на пределе своих сил!

Показать полностью
[моё] Общество Воспитание Конфликт Текстовая ролевая игра Истории из жизни Арты нейросетей Искусственный интеллект Компьютер Интернет Социальные сети Программирование Промпт Чат-бот Ролевики IT Мышление Python Работа Программист Развитие Текст Длиннопост
4
AlexKuprin1208
AlexKuprin1208
2 дня назад

GRPC - новый виток?⁠⁠

GRPC - новый виток? Автоматизация, Тестирование, Развитие, Веб фреймворки, Программирование, Программа, Инженер, Openai

Да, немного интриги.
В общем, gRPC - наш новый фреймворк для построения сервисов. К небольшому удивлению он даже обошел SOAP.

Как известно, наш любимый Google развивается во всех направлениях, так в 2015 они и дропнули gRPC. За основу вкинули HTTP/2. А основной целью выступает скорость - более быстрый обмен данными между сервисами.

Что думаете? Действительно выстрелит или это лишь временный скачок?

Показать полностью
Автоматизация Тестирование Развитие Веб фреймворки Программирование Программа Инженер Openai
5
3
Tillin59rus
2 дня назад

Как я пытался делать игры с фрилансерами⁠⁠

[Первое знакомство с фрилансом]

Действие происходило в конце 2024. Тогда еще можно было делать сомнительные проекты на яндекс. Сейчас нельзя. А еще на яндексе детская аудитория, и серьезные большие игры туда делать было бесполезно. Это надо иметь в виду

-

Осознавая нехватку времени, я решил попробовать полагаться не только на собственный труд.

Потому я попробовал запустить ещё несколько параллельных проектов для Яндекса.

Решил для начала попробовать нанять фрилансеров совсем за немного: 10–15к рублей. 💸

-

Идея такая: заказать 5 проектов, используя знания для выбора ниши — и посмотреть, окупится ли.

-

Были разные проблемы. В общем-то, они минимизируются, если:

- Понятно прописывать ТЗ, разделяя его на пункты (мне было удобно работать в экселевской гугл-таблице — и фрилансерам, по их отзывам, тоже);

- Обозначать приоритеты;

- Назначать промежуточные проверки;

- Работать через сервис, а не на устной договорённости;

- Найти свой лимит одновременных проектов, и не делать всё сразу.

-

Я был готов к тому, что у ребят, кто работает за такие деньги, будет не очень хороший код.

Всё-таки проекты планировались быть небольшими, и поддерживать их никто пока не планировал.

Я был готов к тому, что будет делаться как-то безвкусно или с багами. 🐞

В конце концов, я писал подробное ТЗ, следуя которому всё равно выходило бы неплохо: описывал спецэффекты, микроанимации, шейдеры, палитру, возможные проблемы, которые нужно избежать.

Я был готов к срыву сроков.

Не в такие уж мемные ниши делали.

-

Но вот к чему я не был готов — так это к тому, что будет игнорироваться ТЗ. ❌

Можно было бы винить себя — мол, неправильно выбрал нишу.

Но можно быть сколь угодно гениальным геймдизайнером — и всё равно не сделать хорошей игры, если разработчик делает работу на своё усмотрение.

-

Это происходило во всех пяти случаях. Это тенденция.

Может, я, конечно, совсем своего бревна не вижу, но мне бы и в голову не пришло, что такое может быть проблемой.

Я бы не позволил себе выдавать несделанное за сделанное.

Я бы, вероятнее, делал дольше — но прошёлся бы и проверил все пункты ТЗ перед сдачей.

-

Получалось, что:

Я проверял все пункты, находил кучу несделанного и кучу проблем, отправлял на доработку.

Потом человек говорил: якобы всё сделано. Надо было проверить все отмеченные мной пункты.

Обычно оказывалось, что человек сделал почему-то только некоторые из несделанных задач (а проверять-то нужно было всё).

Плюс по ходу проверки всплывало что-то ещё.

И так — бесконечно, снова и снова. 🔁

-

Поначалу хотелось сворачивать проекты по своей инициативе.

Но было жалко своего времени, уже на них потраченного.

Хочешь быть бескомпромиссным — потрать жизнь на такой сизифов труд подтирания за школьниками.

В итоге приходилось соглашаться на сомнительные решения.

-

Вот эти проекты:

1️⃣ Построй лабиринт https://yandex.ru/games/app/366605

2️⃣ Обби со скалолазанием — проект закрылся. Два разработчика друг за другом сами забросили проект. Что, опять же, говорит: нормальный дизайн уровней сделать сложно.

3️⃣ Раннер-мерж 3D фруктов 2048 https://yandex.ru/games/app/379020

4️⃣ Айдл блоки — разработчик не объявлял, что прекратил работу, но по факту прекратил

5️⃣ Спасательная машина https://yandex.ru/games/app/393150

-

Последний проект получился лучше других и был ёмким на развитие, так как:

— я был уже на опыте,

— а разработчик не школьником.

-

Но проект не показал больших результатов и не драйвировал меня.

А кор-механика реализована так, что не закрывает начальное ТЗ,

и развитие основных фич разработчику сделать не удавалось.

-

В целом итог такой:

Проекты либо не были доделаны,

либо не отбились на пике

и вошли в пятирублёвое состояние.

-

Я боялся, что я тут буду эксплуататором, но ощущалось, будто это школьники меня эксплуатируют. 🧃

Такую нишу посчитал для себя закрытой и невыгодной.

Как я пытался делать игры с фрилансерами Разработка, Gamedev, Инди игра, Инди, Фриланс, Unity, Браузерные игры, Яндекс Игры, Бизнес, Игры, Школьники, Деньги, Длинное, Найм, Работа, Удаленная работа, Программирование, Длиннопост

[Простая задача фрилансерам]

Во время того, как я заказывал те проекты, я совершил выбивающийся из той пятёрки заказ.

У разработчика, который делал игру про фрукты, на аккаунте была игра с механикой FNaF. А в то время начал вируситься кот, который: «Бу! Испугался?» 🐱💥

Я предложил за очень небольшую сумму сделать рескин — заменить персонажа на кота и ещё сделать несколько косметических изменений.

-

Получившийся проект: https://yandex.ru/games/app/383920

-

Мы потратили совсем мало времени, а игра многократно отбилась, а потом вошла в пятирублёвое состояние 🪙

И когда я закончил с той пятёркой, я решил попробовать повторить опыт.

Мне показалось это очень удобным: заказал в понедельник трэшовые мемные игры, а сам всю неделю делаешь что-то нормальное, пока они тебя кормят 😎🎮

-

Тогда был популярен мем «дуреет с этой прикормки», и всё ещё не угасла игра «Заходи» на Яндексе.

Я взял ассет с кафе — единственный шаблон, который нашёл, что был похож на уже готовую и не слишком унылую игру.

И разместил объявление на фрилансе: дополнить его мемами за 2к рублей.

-

ТЗ было очень обтекаемым, так как по плану я не должен был слишком заморачиваться.

Вышла игра: (на данный момент удалена из каталога)

Не только не отбилась, но и даже в пятирублёвом состоянии не осталась — умерла вскоре после релиза 💀📉

-

Одновременно с этим я разместил два объявления, где предлагал сделать что угодно.

Выбрал два актуальных на тот момент мема — «сидим с бобром» и «я хочу быть пылесосом» 🦫🌀

Сделал объявление за 1.5к: мол, не важно, что сделать — просто по шаблону, который у вас есть.

-

И… я не нашёл исполнителя.

Ни один школьник не написал: мол, у него есть игра, и он готов просто заменить персонажа 🤷‍♂️

Ну как так?

-

Тогда я написал два ТЗ, которые, на мой взгляд, должны быть выполнимы за день-другой.

И опять не мог найти, кто бы был готов их сделать.

Пришлось одну, про бобра, заказывать дороже.

А вторую, про пылесос — исполнителю Телекинеза, тоже дороже.

-

Игра про пылесос повторила судьбу игры про кафе.

-

Про бобра:

Чел взял предоплату, а потом не справлялся с полным выполнением ТЗ.

А ещё у него билд не собирался.

А ещё он пытался менять условия.

В итоге я заплатил ему полную сумму, потому что устал находить косяки.

А проект не выложил ❌

-

Почему я заплатил?

Вот не могу ответить себе нормально.

Потому что у школьника было больше воли, чем у меня?

Потому что боялся, что он про меня начнёт гадости писать?

Теперь добрая песня, где готовят полено, у меня вызывает чувство злости к себе 🪵😤

-

С котом, я думаю, хорошо получилось, потому что там было очень удачное сочетание механики и персонажа 🎯🐱

Наверное. можно было бы попытаться оптимизировать эту тему, было не очень приятно плодить информационный мусор, так что я потерял интереc.

Как я пытался делать игры с фрилансерами Разработка, Gamedev, Инди игра, Инди, Фриланс, Unity, Браузерные игры, Яндекс Игры, Бизнес, Игры, Школьники, Деньги, Длинное, Найм, Работа, Удаленная работа, Программирование, Длиннопост

[А что, если фрилансерам платить нормально?] 💸

В прошлые разы я ставил довольно небольшую оплату за проект. Но что, если поставить нормальную?

-

Я продумал хороший проект: делающийся недолго, но требующий опыта, чтобы сделать хорошо.

Нужно было сделать игру, похожую на «Кот и бабка». Она тогда была в топах.

-

Я поставил на Kwork цену в 50к рублей, написал большое ТЗ и получил отклики.

(Там ещё были надбавки за рейтинг игры на Яндексе, но площадка заставила меня их удалить.)

-

Я был несколько удивлён, что мне стали писать ТОЛЬКО такие же по уровню ребята, что и делали мне проекты за 10–15к. Два разработчика даже прямо повторились — написали парни, с которыми мы уже работали. Было приятно, но хотелось кого-то ещё.

-

После предыдущего опыта у меня развилось гигантское недоверие к способностям рынка фриланса.

Я, помня ключевую проблему в том, что людям сложно следовать ТЗ, провёл небольшой тест: я начинал общение со всеми, кто откликался, и просил выполнить небольшую просьбу. Какую — не скажу. Думаю, она мне ещё пригодится. Смысл в умении делать именно так, как написано, а не «как кажется».

Оказалось, более-менее справился с задачей только знакомый, уже работавший на моем проекте, разработчик.

-

Когда я поставил цену в 200к, Kwork мне вывел окно: мол, не рекомендует ставить такую сумму и предлагает поставить 70 000.

То есть для площадки вовсе не норма — хорошая оплата за проекты. Некоторые из тех людей, что там откликались, уже справлялись с моим тестом. Но в ходе разговоров я осознавал, что не готов столько платить — у них не было того уровня понимания геймдева, которого я ожидал.

-

Когда-то давно я думал, что фриланс — это для опытных специалистов уровня как минимум middle, что на фрилансе люди зарабатывают в среднем больше, чем в найме.

Что чтобы быть фрилансером, нужно, понимаешь, и архитектуру проекта продумывать, и вообще всё уметь делать самостоятельно и без косяков. Но как-то так выяснилось, что фрилансеры — это просто ребята, которые ПОЗВОЛИЛИ СЕБЕ откликаться. 🤷‍♂️

Скорее всего, это две категории разработчиков: либо те, кого не берут на нормальную работу, либо те, кто сделал фриланс своим образом жизни.

Последние не сосредоточены на геймдеве, а являются мастерами на все руки, отчего игры в их портфолио весьма посредственные.

Очень странно видеть в портфолио нормально сделанный лендинг с неплохим дизайном, а рядом — вырвиглазно задизайненную игру. 🧠🎨

-

В общем, этот проект так и остался на уровне ТЗ.

Кажется, если и работать через фриланс и сдельную оплату, то нужно либо находить человека по сарафанному радио, либо должно повезти. 🍀

Я осознаю ещё много вариантов — например, обращаться к студиям, которые делают под ключ.

-

Но сейчас я хочу сделать перерыв в делегировании:

— Во-первых, потому что хочу больше сил уделить своим проектам.

— Во-вторых, потому что хочу сэкономить. 🪙

— В-третьих, я боюсь опытных. А вдруг они меня обманут? Или иначе — из нашего взаимодействия я не выйду победителем.

Раз они могут сделать игру — зачем им я?

Кто может делать успешные игры, тот их делает.

Я ему нужен только, чтобы я заплатил больше, чем игра бы заработала сама по себе.

-

Может, строить студию — более хорошая стратегия? 🏗

Одному фрилансеру объяснишь, как что-нибудь делать — он кое-как сделает. Со вторым будет снова та же проблема.

А если человек работает в студии, то, если он научился, он, может быть, не забудет это знание к следующей задаче, а сможет применить.

-

Хорошо бы хотя бы просто до полного выполнения ТЗ допинать человека.

А ведь игры такие, что всё заранее не учтёшь.

И когда игра уже сделана — работа не заканчивается.

Вот только с фрилансером непонятно — будет ли он ещё работать и когда.

В итоге проект остаётся такой неотполированной заготовкой с кучей вещей, которые можно было бы сделать лучше. 🪞🎮

-

Пока на этом повременю с делегированием.

Есть несколько идей — может, попробую их позже. ✍️

Как я пытался делать игры с фрилансерами Разработка, Gamedev, Инди игра, Инди, Фриланс, Unity, Браузерные игры, Яндекс Игры, Бизнес, Игры, Школьники, Деньги, Длинное, Найм, Работа, Удаленная работа, Программирование, Длиннопост

Больше постов про приключения инди-разработчика у меня в телеге: https://t.me/MikhailAllowsHimself

Показать полностью 3
[моё] Разработка Gamedev Инди игра Инди Фриланс Unity Браузерные игры Яндекс Игры Бизнес Игры Школьники Деньги Длинное Найм Работа Удаленная работа Программирование Длиннопост
6
3
Saitama
Saitama
2 дня назад

Код-ревью⁠⁠

Код-ревью IT, Программирование, CreepyStory
Показать полностью 1
IT Программирование CreepyStory
1
3
Pazitron
Pazitron
2 дня назад
Видео

Гонки от нейросети Qwen⁠⁠

Попросил нейросеть написать игру "Гонки" с максимально реалистичными машинками вид сверху, результат насмешил.

Вот код игры для запуска через Pydroid 3 с комментариями от нейросети.

import pygame
import random
import sys

# Инициализация Pygame
pygame.init()

# Автоопределение размера экрана
info = pygame.display.Info()
SCREEN_WIDTH = info.current_w
SCREEN_HEIGHT = info.current_h

# Создание экрана
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Гонка")

# Цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (220, 30, 30)
GREEN = (30, 180, 30)
BLUE = (30, 100, 220)
YELLOW = (255, 220, 0)
GRAY = (100, 100, 100)
DARK_GRAY = (50, 50, 50)
LIGHT_BLUE = (170, 220, 255)
ORANGE = (255, 140, 0)

# Часы для управления FPS
clock = pygame.time.Clock()
FPS = 60

# Функция для рисования машины игрока (реалистичные пропорции)
def draw_player_car(x, y, width, height):
# Основной корпус автомобиля (горизонтальный прямоугольник)
pygame.draw.rect(screen, GREEN, (x, y, width, height))

# Крыша (меньше по размеру)
pygame.draw.rect(screen, LIGHT_BLUE, (x + width//6, y - 8, width * 2//3, 12))

# Капот
pygame.draw.rect(screen, (20, 150, 20), (x, y, width, height//4))

# Фары спереди
pygame.draw.circle(screen, YELLOW, (x + 8, y + height//2), 6)
pygame.draw.circle(screen, YELLOW, (x + width - 8, y + height//2), 6)

# Задние фары
pygame.draw.circle(screen, RED, (x + 8, y + height//4), 5)
pygame.draw.circle(screen, RED, (x + width - 8, y + height//4), 5)

# Колеса
pygame.draw.rect(screen, BLACK, (x + width//6, y - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width - width//6 - 12, y - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width//6, y + height - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width - width//6 - 12, y + height - 3, 12, 6))

# Функция для рисования машины противника
def draw_enemy_car(x, y, width, height):
# Основной корпус автомобиля
pygame.draw.rect(screen, RED, (x, y, width, height))

# Крыша
pygame.draw.rect(screen, (150, 0, 0), (x + width//6, y - 8, width * 2//3, 12))

# Капот
pygame.draw.rect(screen, (180, 20, 20), (x, y, width, height//4))

# Фары спереди
pygame.draw.circle(screen, YELLOW, (x + 8, y + height//2), 6)
pygame.draw.circle(screen, YELLOW, (x + width - 8, y + height//2), 6)

# Задние фары
pygame.draw.circle(screen, ORANGE, (x + 8, y + height//4), 5)
pygame.draw.circle(screen, ORANGE, (x + width - 8, y + height//4), 5)

# Колеса
pygame.draw.rect(screen, BLACK, (x + width//6, y - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width - width//6 - 12, y - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width//6, y + height - 3, 12, 6))
pygame.draw.rect(screen, BLACK, (x + width - width//6 - 12, y + height - 3, 12, 6))

# Класс игрока (машина)
class Player:
def __init__(self):
self.width = SCREEN_WIDTH // 10
self.height = SCREEN_HEIGHT // 12
# Позиционируем машину игрока в середине экрана
self.x = SCREEN_WIDTH // 2 - self.width // 2
self.y = SCREEN_HEIGHT // 2 # Середина экрана
self.speed = SCREEN_WIDTH // 80
self.road_width = SCREEN_WIDTH // 2
self.road_x = SCREEN_WIDTH // 4

def draw(self):
draw_player_car(self.x, self.y, self.width, self.height)

def move_left(self):
# Ограничиваем движение дорогой
if self.x > self.road_x + 5:
self.x -= self.speed

def move_right(self):
# Ограничиваем движение дорогой
if self.x < self.road_x + self.road_width - self.width - 5:
self.x += self.speed

def get_rect(self):
return pygame.Rect(self.x + 5, self.y + 2, self.width - 10, self.height - 4)

# Класс препятствия
class Obstacle:
def __init__(self):
self.width = SCREEN_WIDTH // 10
self.height = SCREEN_HEIGHT // 12
# Спавним только на дороге
road_width = SCREEN_WIDTH // 2
road_x = SCREEN_WIDTH // 4
self.x = random.randint(road_x + 10, road_x + road_width - self.width - 10)
self.y = -self.height
self.speed = SCREEN_HEIGHT // 120 + random.randint(0, 3)

def draw(self):
draw_enemy_car(self.x, self.y, self.width, self.height)

def move(self):
self.y += self.speed

def is_off_screen(self):
return self.y > SCREEN_HEIGHT

def get_rect(self):
return pygame.Rect(self.x + 5, self.y + 2, self.width - 10, self.height - 4)

# Класс дороги
class Road:
def __init__(self):
self.road_width = SCREEN_WIDTH // 2
self.road_x = SCREEN_WIDTH // 4
self.line_width = 10
self.line_height = SCREEN_HEIGHT // 15
self.line_speed = SCREEN_HEIGHT // 80
self.lines = []
# Инициализируем линии разметки
for i in range(25):
self.lines.append([self.road_x + self.road_width // 2 - self.line_width // 2,
i * (self.line_height + SCREEN_HEIGHT // 18)])

def draw(self):
# Рисуем дорогу
pygame.draw.rect(screen, DARK_GRAY, (self.road_x, 0, self.road_width, SCREEN_HEIGHT))

# Рисуем края дороги
pygame.draw.rect(screen, WHITE, (self.road_x - 2, 0, 2, SCREEN_HEIGHT))
pygame.draw.rect(screen, WHITE, (self.road_x + self.road_width, 0, 2, SCREEN_HEIGHT))

# Рисуем разметку
for line in self.lines:
pygame.draw.rect(screen, YELLOW, (line[0], line[1], self.line_width, self.line_height))

def move(self):
# Двигаем линии разметки
for line in self.lines:
line[1] += self.line_speed
# Если линия ушла за экран, возвращаем её наверх
if line[1] > SCREEN_HEIGHT:
line[1] = -self.line_height

# Класс кнопки
class Button:
def __init__(self, x, y, width, height, text, color=GREEN):
self.rect = pygame.Rect(x, y, width, height)
self.text = text
self.color = color
self.font = pygame.font.Font(None, 36)

def draw(self):
pygame.draw.rect(screen, self.color, self.rect)
pygame.draw.rect(screen, BLACK, self.rect, 2)
text_surf = self.font.render(self.text, True, BLACK)
text_rect = text_surf.get_rect(center=self.rect.center)
screen.blit(text_surf, text_rect)

def is_clicked(self, pos):
return self.rect.collidepoint(pos)

# Основная функция игры
def main():
player = Player()
road = Road()
obstacles = []
score = 0
game_over = False
game_started = False

# Таймер для создания препятствий
obstacle_timer = 0
obstacle_frequency = 100 # каждые 100 кадров

font_large = pygame.font.Font(None, 48)
font_medium = pygame.font.Font(None, 36)
font_small = pygame.font.Font(None, 28)

# Кнопки
start_button = Button(SCREEN_WIDTH//2 - 100, SCREEN_HEIGHT//2, 200, 60, "Начать игру")
restart_button = Button(SCREEN_WIDTH//2 - 100, SCREEN_HEIGHT//2 + 50, 200, 60, "Играть снова")
quit_button = Button(SCREEN_WIDTH//2 - 100, SCREEN_HEIGHT//2 + 120, 200, 60, "Выйти")

while True:
mouse_pos = pygame.mouse.get_pos()
mouse_clicked = False

# Обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # Левая кнопка мыши
mouse_clicked = True

# Очистка экрана
screen.fill((80, 180, 80)) # Зеленый фон (трава)

if not game_started:
# Экран приветствия
title_text = font_large.render("ГОНКИ", True, WHITE)
screen.blit(title_text, (SCREEN_WIDTH//2 - title_text.get_width()//2, SCREEN_HEIGHT//4))

instruction_text = font_medium.render("Касайтесь левой/правой части экрана", True, WHITE)
screen.blit(instruction_text, (SCREEN_WIDTH//2 - instruction_text.get_width()//2, SCREEN_HEIGHT//3))

# Демонстрационная машина
draw_player_car(SCREEN_WIDTH//2 - 60, SCREEN_HEIGHT//2.5, 120, 40)

start_button.draw()
quit_button.draw()

if mouse_clicked:
if start_button.is_clicked(mouse_pos):
game_started = True
elif quit_button.is_clicked(mouse_pos):
pygame.quit()
sys.exit()

elif game_over:
# Экран окончания игры
road.draw()
player.draw()
for obstacle in obstacles:
obstacle.draw()

overlay = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
overlay.set_alpha(128)
overlay.fill(BLACK)
screen.blit(overlay, (0, 0))

game_over_text = font_large.render("ИГРА ОКОНЧЕНА!", True, RED)
screen.blit(game_over_text, (SCREEN_WIDTH//2 - game_over_text.get_width()//2, SCREEN_HEIGHT//4))

score_text = font_medium.render(f"Ваш счет: {score}", True, WHITE)
screen.blit(score_text, (SCREEN_WIDTH//2 - score_text.get_width()//2, SCREEN_HEIGHT//2.5))

restart_button.draw()
quit_button.draw()

if mouse_clicked:
if restart_button.is_clicked(mouse_pos):
return main() # Перезапуск игры
elif quit_button.is_clicked(mouse_pos):
pygame.quit()
sys.exit()

else:
# Игровой процесс
# Сенсорное управление
if pygame.mouse.get_pressed()[0]: # Левая кнопка мыши (или касание)
mouse_x, mouse_y = pygame.mouse.get_pos()
if mouse_x < SCREEN_WIDTH // 2:
player.move_left()
else:
player.move_right()

# Создание препятствий
obstacle_timer += 1
if obstacle_timer >= obstacle_frequency:
obstacles.append(Obstacle())
obstacle_timer = 0
# Увеличиваем частоту появления препятствий со временем
if obstacle_frequency > 40:
obstacle_frequency -= 0.3

# Движение объектов
road.move()
for obstacle in obstacles[:]:
obstacle.move()
# Удаление препятствий, ушедших за экран
if obstacle.is_off_screen():
obstacles.remove(obstacle)
score += 1

# Проверка столкновений
player_rect = player.get_rect()
for obstacle in obstacles:
if player_rect.colliderect(obstacle.get_rect()):
game_over = True

# Отрисовка игровых объектов
road.draw()
player.draw()
for obstacle in obstacles:
obstacle.draw()

# Отображение счета
score_text = font_medium.render(f"Счет: {score}", True, WHITE)
screen.blit(score_text, (20, 20))

# Отображение инструкции управления
control_text = font_small.render("← Лево / Право →", True, WHITE)
screen.blit(control_text, (SCREEN_WIDTH//2 - control_text.get_width()//2, SCREEN_HEIGHT - 40))

# Индикаторы управления
pygame.draw.rect(screen, (200, 200, 200, 100), (0, SCREEN_HEIGHT - 60, SCREEN_WIDTH//2, 30))
pygame.draw.rect(screen, (200, 200, 200, 100), (SCREEN_WIDTH//2, SCREEN_HEIGHT - 60, SCREEN_WIDTH//2, 30))

pygame.display.flip()
clock.tick(FPS)

# Запуск игры
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Ошибка: {e}")
pygame.quit()




Показать полностью
[моё] Python IT Android Игры Программирование Программист Тестирование Видео Без звука Вертикальное видео Короткие видео Длиннопост
5
108
tproger.official
tproger.official
2 дня назад
Типичный программист

Классический грабли программирования⁠⁠

Классический грабли программирования IT, IT юмор, Программирование, Баг
Показать полностью 1
IT IT юмор Программирование Баг
14
8
tproger.official
tproger.official
2 дня назад
Типичный программист

Мена? Мена⁠⁠1

[моё] IT IT юмор Программирование Frontend Видео Вертикальное видео Короткие видео
3
2
sobolevn
2 дня назад
Лига программистов

EasyP – тулбокс для работы с ProtoBuf⁠⁠

Ссылка на проект: https://github.com/easyp-tech/easyp

Документация: https://easyp.tech

easyp – пакетный менеджер, билд-система и линтер для .proto файлов.

Хоть easyp и написан на #go 😱, одна из его фишек в том – что вы можете использовать любые плагины для генерации финального кода: он может быть хоть на #python, хоть на #rust.

Если много используете ProtoBuf – обязательно для ознакомления!

EasyP – тулбокс для работы с ProtoBuf YouTube, IT, Программирование, Golang, DevOps, Linux, Программист, Разработка, Python, Видео

Прощайте огромные Makefile с кучей скриптов для сборки.

Показать полностью 1
[моё] YouTube IT Программирование Golang DevOps Linux Программист Разработка Python Видео
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии