Выбрать книгу по жанру
Фантастика и фэнтези
- Боевая фантастика
- Героическая фантастика
- Городское фэнтези
- Готический роман
- Детективная фантастика
- Ироническая фантастика
- Ироническое фэнтези
- Историческое фэнтези
- Киберпанк
- Космическая фантастика
- Космоопера
- ЛитРПГ
- Мистика
- Научная фантастика
- Ненаучная фантастика
- Попаданцы
- Постапокалипсис
- Сказочная фантастика
- Социально-философская фантастика
- Стимпанк
- Технофэнтези
- Ужасы и мистика
- Фантастика: прочее
- Фэнтези
- Эпическая фантастика
- Юмористическая фантастика
- Юмористическое фэнтези
- Альтернативная история
Детективы и триллеры
- Боевики
- Дамский детективный роман
- Иронические детективы
- Исторические детективы
- Классические детективы
- Криминальные детективы
- Крутой детектив
- Маньяки
- Медицинский триллер
- Политические детективы
- Полицейские детективы
- Прочие Детективы
- Триллеры
- Шпионские детективы
Проза
- Афоризмы
- Военная проза
- Историческая проза
- Классическая проза
- Контркультура
- Магический реализм
- Новелла
- Повесть
- Проза прочее
- Рассказ
- Роман
- Русская классическая проза
- Семейный роман/Семейная сага
- Сентиментальная проза
- Советская классическая проза
- Современная проза
- Эпистолярная проза
- Эссе, очерк, этюд, набросок
- Феерия
Любовные романы
- Исторические любовные романы
- Короткие любовные романы
- Любовно-фантастические романы
- Остросюжетные любовные романы
- Порно
- Прочие любовные романы
- Слеш
- Современные любовные романы
- Эротика
- Фемслеш
Приключения
- Вестерны
- Исторические приключения
- Морские приключения
- Приключения про индейцев
- Природа и животные
- Прочие приключения
- Путешествия и география
Детские
- Детская образовательная литература
- Детская проза
- Детская фантастика
- Детские остросюжетные
- Детские приключения
- Детские стихи
- Детский фольклор
- Книга-игра
- Прочая детская литература
- Сказки
Поэзия и драматургия
- Басни
- Верлибры
- Визуальная поэзия
- В стихах
- Драматургия
- Лирика
- Палиндромы
- Песенная поэзия
- Поэзия
- Экспериментальная поэзия
- Эпическая поэзия
Старинная литература
- Античная литература
- Древневосточная литература
- Древнерусская литература
- Европейская старинная литература
- Мифы. Легенды. Эпос
- Прочая старинная литература
Научно-образовательная
- Альтернативная медицина
- Астрономия и космос
- Биология
- Биофизика
- Биохимия
- Ботаника
- Ветеринария
- Военная история
- Геология и география
- Государство и право
- Детская психология
- Зоология
- Иностранные языки
- История
- Культурология
- Литературоведение
- Математика
- Медицина
- Обществознание
- Органическая химия
- Педагогика
- Политика
- Прочая научная литература
- Психология
- Психотерапия и консультирование
- Религиоведение
- Рефераты
- Секс и семейная психология
- Технические науки
- Учебники
- Физика
- Физическая химия
- Философия
- Химия
- Шпаргалки
- Экология
- Юриспруденция
- Языкознание
- Аналитическая химия
Компьютеры и интернет
- Базы данных
- Интернет
- Компьютерное «железо»
- ОС и сети
- Программирование
- Программное обеспечение
- Прочая компьютерная литература
Справочная литература
Документальная литература
- Биографии и мемуары
- Военная документалистика
- Искусство и Дизайн
- Критика
- Научпоп
- Прочая документальная литература
- Публицистика
Религия и духовность
- Астрология
- Индуизм
- Православие
- Протестантизм
- Прочая религиозная литература
- Религия
- Самосовершенствование
- Христианство
- Эзотерика
- Язычество
- Хиромантия
Юмор
Дом и семья
- Домашние животные
- Здоровье и красота
- Кулинария
- Прочее домоводство
- Развлечения
- Сад и огород
- Сделай сам
- Спорт
- Хобби и ремесла
- Эротика и секс
Деловая литература
- Банковское дело
- Внешнеэкономическая деятельность
- Деловая литература
- Делопроизводство
- Корпоративная культура
- Личные финансы
- Малый бизнес
- Маркетинг, PR, реклама
- О бизнесе популярно
- Поиск работы, карьера
- Торговля
- Управление, подбор персонала
- Ценные бумаги, инвестиции
- Экономика
Жанр не определен
Техника
Прочее
Драматургия
Фольклор
Военное дело
Товарищ маск (СИ) - Ежов Константин Владимирович - Страница 11
```c
void UpdateNPC() {
float dx = player.x - npc.x;
float dy = player.y - npc.y;
float distance = sqrt(dx * dx + dy * dy);
if (distance detectionRange) {
npc.x += dx / distance * npcSpeed;
npc.y += dy / distance * npcSpeed;
}
}
```
Теперь каждый раз при запуске игры бот начинал следовать за игроком, словно его кто-то преследовал по пустым коридорам. Даже представил, что этот противник будет бормотать и издавать звуки – что-то зловещее, чтобы добавить немного напряжения. Однако, звуковая система для будущего была планом максимум, поэтому на время отложил эту задачу.
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-144', c: 4, b: 144})Идеи текли одна за другой, но с каждой новой функцией ему становилось сложнее поддерживать высокую производительность программы. Мощностей местных компьютеров, а тем более моего ноутбука, для всего задуманного было бы мало, и пришлось обдумывать, как сжать графику и текстуры, чтобы втиснуть всё в лимиты памяти. Периодически экран затухал, процессор перегружался, и часть моих кодовых идей требовала упрощения. Но это меня не останавливало. Какое там, когда чувствовал такой азарт, словно каждый новый шаг приносил меня ближе к созданию по-настоящему революционного проекта!
Пару дней в мастерской, пару ночей за кодом – и вот, наконец, выдался момент, чтобы отдохнуть. Нашёл тихое кафе неподалёку, заказал крепкий чай и свежую булочку, уселся у окна. Открытый ноутбук, хоть и грелся заметно, стойко справлялся с нагрузкой. Сосредоточиться на разработке для "прототипа Дум" в этих условиях было удивительно удобно: пульсирующий шум улицы за окном и гул разговоров вокруг погружали меня в состояние, где мысли шли яснее.
Я понимал: на настоящие 3D-ускорители здесь надеяться не приходится, потому главный вызов был в том, чтобы создать иллюзию трёхмерного пространства с тем, что имелось – в сущности, с теми же вычислительными мощностями, что и в середине восьмидесятых. Запустил компилятор, снова вернулся к коду. Словно бы мелькнуло нечто – магия простых вычислений, которые, при правильном использовании, творят чудеса.
```c
// Код для базовой структуры трассировки лучей
int rayCasting(float playerX, float playerY, float playerAngle) {
for (int x = 0; x screenWidth; x++) {
// Преобразуем угол для каждого пикселя на экране
float rayAngle = (playerAngle - fov / 2.0) + (x / (float)screenWidth) * fov;
float distanceToWall = 0;
// Проверяем пересечение с стенами
float eyeX = cos(rayAngle); // единичный вектор по оси X
float eyeY = sin(rayAngle); // единичный вектор по оси Y
while (!hitWall distanceToWall maxDepth) {
distanceToWall += stepSize;
int testX = (int)(playerX + eyeX * distanceToWall);
int testY = (int)(playerY + eyeY * distanceToWall);
// Проверка выхода за пределы карты
if (testX 0 || testX = mapWidth || testY 0 || testY = mapHeight) {
hitWall = true; // если за пределами — считаем, что есть "стена"
distanceToWall = maxDepth;
} else if (map[testY * mapWidth + testX] == '#') {
hitWall = true;
}
}
// Простое затемнение для глубины
int ceiling = (screenHeight / 2.0) - screenHeight / ((float)distanceToWall);
int floor = screenHeight - ceiling;
for (int y = 0; y screenHeight; y++) {
if (y ceiling) { setPixel(x, y, skyColor); }
else if (y ceiling y = floor) { setPixel(x, y, wallColor); }
else { setPixel(x, y, floorColor); }
}
}
return 0;
}
```
Смысл был прост: пока луч, выпущенный от игрока, не упирается в стену, он продолжает двигаться вперёд, точка за точкой, создавая иллюзию трёхмерного мира. В Raycasting мне нравилось то, что метод работал почти как адаптивный – чем дальше от игрока находился объект, тем меньше подробностей обрабатывалось, и тем менее требовательным к процессору становился код. Пока шёл процесс, сделал глоток чая, тёплая горечь отозвалась бодрящей ясностью. Даже, пожалуй, чувствовалось какое-то детское волнение. Представлялось, как однажды игрок увидит, будто бы на экране он шагает по тёмному, замкнутому коридору, его окружает неизвестность, каждое движение приносит чувство таинственности и лёгкой тревоги – настоящая магия. Да блин, словно вновь переместился в свою юность и мочил всех тих врагов без разбору. А добавить кооперативный режим…. Точно говорю, бомба. Да, потом всё это позабылось, но сейчас-то ничего почти такого нет.
Работа шла почти машинально, по уже заведенному алгоритму. Как будто нащупываешь потайную дверь – улавливаешь, что где-то там, за поворотом, есть свет, и, следуя на ощупь, открываешь его, постигаешь потихоньку механику, будто бы всю жизнь был частью этого мира кодов и пульсирующих пикселей. А ведь мне программирование не давалось. Не хватало усидчивости. Нет, если припирало, то вполне себе сдавал всё что надо, но как только заканчивал, будто взрывался, вырываясь с рабочего места. А сейчас сижу, пишу и не жужжу. И мне даже это всё нравится. Вот и говори потом, что первично, тело или дух. Для меня в этом конкретном случае именно тело Маска подарила возможность делать то, что сейчас творил.
Ну, да ладно, пробую запустить тестовый рендер на небольшом участке карты. Лёгкая анимация показывает – сцена ожила: на экране меняется положение теней и проекций стен, меняется восприятие расстояния. Правда того давнего восторга всё равно не ощущаю. Поскольку всё уже перепробовал, но теперь моя очередь дарить другим радость! А потому снова открыл блокнот и в несколько строк набросал список планов:
1. Добавить базовое освещение для усиления эффекта глубины;
2. Реализовать переходы в зависимости от дальности объектов;
3. Разработать простейшие спрайты для анимации персонажей.
Даже не заметил, как подошла официантка, поставила новую кружку чая. Мелькнула мысль, что, может, это знак, что пора сделать перерыв, – а потом отмахнулся от неё, раз за разом откатываясь в ту же механику кода, в то же воображаемое погружение в мир, который ещё только создаётся. И так за разом то возвращаясь к работе, то вновь выныривая в реальный мир, не заметил, как наступил вечер, а значит, пора бы и честь знать.
***
Вечерний Торонто восемьдесят девятого года был укрытым в тонкую пелену мягких туманов, как будто город был обволакиваем в шёпот старых времён. Улицы были пусты, только разве что тихий шорох листьев на ветвях деревьев, погруженных в серебристый свет лунного диска, прерывал этот молчание. Дороги были покрыты тонким слоем воды от дневного ещё дождя. Воздух был насыщен свежестью осенью, запахами влажной земли и нежным ароматом листвы, которая медленно падала на проулки города. Вдали можно было слышать отдаленные голоса людей, которые уже успели вернуться домой после трудного дня, но большинство жителей уже находились в своих квартирах, готовясь к отдыху.
На фоне этого спокойного города шёл домой медленно, наслаждаясь каждым мгновением. Под ногами слышался приятный хруст листьев, которые упали на асфальт. Вокруг играли тени деревьев, создавая штрихи и пятна на одежде. Свет фонарей мерцал, как звезды, падающие на землю, создавая впечатление, будто весь мир оживает под ногами.
Сквозь туман проносился легкий ветерок, принося с собой прохладу и запах осени. Он очищал воздух города от грязи дня, оставляя только чистоту и свежесть. Вокруг спешили машины, но они казались такими далекими, будто это был другой мир. Автомобили двигались быстро, но я не обращал на них внимания, продолжая свой медленный путь и наслаждался каждым моментом, каждым местом этого города мимо которых проходил. И, наконец, направился к своему дому. Завтра будет новый день, и снова займусь работой, а вечером также стану наслаждаться всеми красотами Торонто, и снова смогу услышать этот шорох листьев и почувствовать мягкий ветерок.
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-145', c: 4, b: 145})- Предыдущая
- 11/56
- Следующая
