Izibook.club
Читать онлайн книги!
  • Главная
  • Жанры
  • Авторы
  • ТОП книг
  • ТОП авторов
  • Контакты

Товарищ маск (СИ)

Часть 10 из 56 Информация о книге

2. **Ширина и высота стен** зависели от расстояния до них, создавая эффект перспективы.

3. **Свет и тени** – расстояние к стенам также влияло бы на их яркость, что добавляло бы глубину сцене.

Набросав общий план, открыл новый файл и начал писать код для этого подхода:

```c

void RenderRaycasting() {

for (int x = 0; x screenWidth; x++) {

// Рассчитываем угол луча от игрока

float rayAngle = (player.angle - FOV / 2) + ((float)x / screenWidth) * FOV;

float distanceToWall = 0;

bool hitWall = false;

// Переменные для отслеживания попаданий луча

float eyeX = cos(rayAngle);

float eyeY = sin(rayAngle);

while (!hitWall distanceToWall renderDistance) {

distanceToWall += 0.1;

int testX = (int)(player.x + eyeX * distanceToWall);

int testY = (int)(player.y + eyeY * distanceToWall);

// Проверка столкновения луча с границей карты

if (testX 0 || testX = mapWidth || testY 0 || testY = mapHeight) {

hitWall = true;

distanceToWall = renderDistance; // Установка максимального расстояния

} else if (map[testY][testX] == WALL) {

hitWall = true;

}

}

// Расчёт высоты стены на экране

int ceiling = (screenHeight / 2) - (screenHeight / distanceToWall);

int floor = screenHeight - ceiling;

// Закрашивание столбца стены

for (int y = 0; y screenHeight; y++) {

if (y ceiling) {

DrawCeiling(x, y);

} else if (y floor) {

DrawFloor(x, y);

} else {

int shade = 255 - (distanceToWall * 20); // Чем дальше, тем темнее

SetPixelColor(x, y, RGB(shade, shade, shade));

}

}

}

}

```

Остановившись проглядел код, чувствуя тихое удовлетворение. Это был достаточно экономный подход для графики, не требовавшей оборудования доступного в будущем. Кстати об этом, после выпуска игры надо будет попробовать самому принять участие в будущей гонке ускорителей. Может всего и не съем, но чего-нибудь, да надкусаю! Правда, еще не тестировал, как движок поведет себя с большим количеством объектов, но и это уже был ощутимый прогресс. Запустив программу, наблюдать, как на экране проступили низкие серые стены, обрамленные «потолком» и «полом». Простая перспектива, создающая эффект коридора, была достигнута! Наложение света и тени добавляло глубины, делая картинку более выразительной. Почти то, что нужно! Да, наконец удовлетворённо вздохнул, слегка откинулся назад, снова сделал глоток уже остывающего чая и продолжил писать в блокнот идеи, которые планировал реализовать в будущем:

1. **Система врагов и объектов** – каждому врагу нужно выделить отдельное место в памяти и алгоритм для поведения, который бы не замедлял работу движка.

2. **Эффект бликов и освещения** – симулировать отражение света хотя бы частично, используя более светлые оттенки для ближайших объектов и более темные для удаленных.

3. **Открытие дверей и передвижение объектов** – система триггеров, которая позволит игроку взаимодействовать с окружением.

Отложив блокнот, еще раз взглянул на экран и добавил ещё несколько строк кода для отрисовки простейшего интерфейса, чтобы сделать игру более наглядной:

```c

void RenderHUD() {

// Показать простую панель здоровья и боезапаса

char hudText[128];

sprintf(hudText, "Health: %d Ammo: %d", player.health, player.ammo);

DrawText(hudText, 10, screenHeight - 20, RGB(255, 255, 255));

}

```

Простая панель добавляла необходимую «игровую» атмосферу. Сейчас это выглядело минималистично, но я-то знал, что с правильным дизайном и добавлением более сложных механик движок мог бы стать основой для увлекательной игры, в которую, как минимум, полмира рубилась. А второй половине мира просто делать это было не на чем. Всё это ощущалось как начало большой работы. Превьюшка, можно сказать. Но любая дорога начинается с первого шага.

А пока просто убрал чашку в сторону и сосредоточился на следующем этапе. Нужно было добавить возможность передвижения по уровню – а то мог только стоять на месте и смотреть на серые стены. Представил себе, как игрок должен плавно перемещаться по коридорам, с чувством глубины и перспективы, несмотря на ограниченные возможности компьютера. Механика движения, по сути, состояла из трех вещей: изменение координат игрока, поворот камеры и пересчёт лучей с учётом новых координат. И пристально глядя на код, добавил функцию для движения:

```c

void MovePlayer(float deltaX, float deltaY) {

float newX = player.x + deltaX;

float newY = player.y + deltaY;

// Проверяем, не сталкивается ли игрок со стеной

if (map[(int)newY][(int)newX] != WALL) {

player.x = newX;

player.y = newY;

}

}

void RotatePlayer(float angle) {

player.angle += angle;

if (player.angle 0) player.angle += 2 * PI;

if (player.angle 2 * PI) player.angle -= 2 * PI;

}

```

Теперь управление было достаточно простым: стрелки на клавиатуре двигали игрока вперед-назад, а боковые — разворачивали его, позволяя смотреть в разные стороны. Оставалось протестировать, и, предвкушая результат, запустил программу. Эх! На экране игра ожила. Простенький интерфейс отражал каждое движение и разворот, стена мелькала перед глазами, становясь то ближе, то дальше. кликнул стрелкой вправо, и перспектива мгновенно изменилась. Серые стены с разной глубиной то появлялись, то исчезали из виду, и казалось, что он действительно идёт по простым, но реалистичным коридорам. Правда, с цветом был проблема, поскольку всё приходилось додумывать. Монохромный дисплей к красоте не располагал. Ну ничего, запущу на нормальной машине, тогда и посмотрим, как совпадут ожидания и реальность.

Следующей задачей стало разнообразие окружения. Если оставить только серые стены, игра быстро потеряет интерес. Илон добавил несколько простых текстур: пару оттенков для разных видов стен и новую текстуру для пола и потолка, чтобы добавить ощущение разнообразия и глубины. Нет, всё-таки для работы над игрой нужен нормальный комп, а не этот эрзац. Пока решил использовать ASCII-графику для начального наброска:

```c

char wallTexture[2] = { '#', '@' };

char floorTexture = '.';

char ceilingTexture = ' ';

```

И добавил соответствующую логику в код отрисовки, чтобы менять символы текстур в зависимости от расстояния:

```c

void DrawColumn(int x, float distanceToWall) {

int ceiling = (screenHeight / 2) - (screenHeight / distanceToWall);

int floor = screenHeight - ceiling;

for (int y = 0; y screenHeight; y++) {

if (y ceiling) {

SetPixelColor(x, y, ceilingTexture);

} else if (y floor) {

SetPixelColor(x, y, floorTexture);

} else {

char texture = distanceToWall 5 ? wallTexture[0] : wallTexture[1];

SetPixelColor(x, y, texture);

}

}

}

```

Посмотрел на экран, оценив улучшение. Пока не блеск, но разные текстуры действительно помогли – визуальная карта стала больше напоминать место, а не пустую коробку. Оставалось добавить элемент динамики, чего-то живого, движущегося. Тут же пришла идея ввести простого противника – своего рода бота, который будет преследовать игрока, если тот слишком близко. Этот NPC был прост: всего лишь точка на карте, которая медленно приближалась к игроку, если оказывалась в зоне видимости. Ввёл переменные для бота и добавил несколько строк кода, чтобы создать эффект его движения:

Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело 3
    • Спецслужбы 3
  • Деловая литература 179
    • Банковское дело 2
    • Деловая литература 2
    • Корпоративная культура 12
    • Личные финансы 19
    • Малый бизнес 2
    • Маркетинг, PR, реклама 41
    • О бизнесе популярно 100
    • Отраслевые издания 2
    • Управление, подбор персонала 14
    • Ценные бумаги, инвестиции 2
    • Экономика 23
  • Детективы и триллеры 2545
    • Боевики 288
    • Дамский детективный роман 20
    • Детективы 424
    • Иронические детективы 166
    • Исторические детективы 398
    • Классические детективы 199
    • Криминальные детективы 141
    • Крутой детектив 108
    • Маньяки 14
    • Медицинский триллер 2
    • Политические детективы 42
    • Полицейские детективы 217
    • Прочие Детективы 773
    • Техно триллер 3
    • Триллеры 1092
    • Шпионские детективы 91
  • Детские 439
    • Детская образовательная литература 13
    • Детская проза 152
    • Детские остросюжетные 51
    • Детские приключения 226
    • Детские стихи 17
    • Детский фольклор 1
    • Книга-игра 1
    • Прочая детская литература 72
  • Детские книги 479
    • Детская фантастика 186
    • Детские детективы 3
    • Книги для подростков 23
    • Сказки 221
  • Документальная литература 763
    • Биографии и мемуары 497
    • Военная документалистика 7
    • Искусство и Дизайн 13
    • Критика 11
    • Научпоп 9
    • Прочая документальная литература 69
    • Публицистика 250
  • Дом и Семья 203
    • Домашние животные 14
    • Здоровье и красота 33
    • Кулинария 32
    • Прочее домоводство 8
    • Развлечения 3
    • Сад и Огород 7
    • Сделай сам 2
    • Спорт 9
    • Хобби и ремесла 7
    • Эротика и секс 102
  • Драматургия 104
    • Драма 101
    • Киносценарии 3
    • Мистерия 1
    • Трагедия 1
  • Жанр не определен 8
    • Разное 8
  • Компьютеры и Интернет 15
    • Базы данных 3
    • Интернет 3
    • Программирование 1
    • Программное обеспечение 1
    • Прочая компьютерная литература 10
  • Любовные романы 25666
    • Исторические любовные романы 908
    • Короткие любовные романы 2515
    • Любовно-фантастические романы 10791
    • Остросюжетные любовные романы 900
    • Порно 87
    • Прочие любовные романы 53
    • Слеш 415
    • Современные любовные романы 10604
    • Фемслеш 43
    • Эротика 6245
  • Научно-образовательная 356
    • Альтернативная медицина 5
    • Астрономия и Космос 7
    • Биология 31
    • Биофизика 2
    • Биохимия 2
    • Ботаника 3
    • Военная история 4
    • Геология и география 2
    • Государство и право 1
    • Детская психология 14
    • Зоология 3
    • Иностранные языки 2
    • Культурология 45
    • Литературоведение 19
    • Медицина 34
    • Обществознание 6
    • Педагогика 19
    • Политика 21
    • Прочая научная литература 57
    • Психотерапия и консультирование 45
    • Религиоведение 7
    • Секс и семейная психология 29
    • Технические науки 4
    • Физика 9
    • Философия 34
    • Химия 3
    • Экология 3
    • Юриспруденция 7
    • Языкознание 18
  • Образование 513
    • Бизнес 45
    • Биография и мемуары 46
    • Здоровье 10
    • История 292
    • Карьера 4
    • Психология 225
  • Поэзия и драматургия 38
    • Басни 2
    • Драматургия 9
    • Лирика 1
    • Поэзия 28
  • Приключения 719
    • Вестерны 14
    • Исторические приключения 390
    • Морские приключения 70
    • Природа и животные 29
    • Прочие приключения 206
    • Путешествия и география 51
  • Проза 2250
    • Антисоветская литература 5
    • Афоризмы 1
    • Военная проза 104
    • Историческая проза 305
    • Классическая проза 128
    • Контркультура 12
    • Магический реализм 87
    • Новелла 13
    • Повесть 24
    • Проза прочее 20
    • Рассказ 72
    • Роман 102
    • Русская классическая проза 71
    • Семейный роман/Семейная сага 3
    • Сентиментальная проза 10
    • Советская классическая проза 46
    • Современная проза 1728
    • Эпистолярная проза 2
    • Эпопея 4
    • Эссе, очерк, этюд, набросок 2
  • Прочее 1464
    • Газеты и журналы 5
    • Изобразительное искусство, фотография 10
    • Кино 13
    • Музыка 11
    • Подростковая литература 6
    • Театр 5
    • Фанфик 1419
  • Религия и духовность 331
    • Астрология 1
    • Буддизм 4
    • Православие 1
    • Прочая религиозная литература 4
    • Религия 24
    • Самосовершенствование 126
    • Хиромантия 1
    • Эзотерика 191
    • Язычество 1
  • Справочная литература 41
    • Прочая справочная литература 3
    • Путеводители 9
    • Руководства 12
    • Справочники 15
    • Энциклопедии 9
  • Старинная литература 134
    • Античная литература 1
    • Древневосточная литература 5
    • Мифы. Легенды. Эпос 34
    • Прочая старинная литература 95
  • Техника 2
    • Автомобили и ПДД 1
    • Архитектура 1
  • Фантастика и фентези 27424
    • Альтернативная история 3979
    • Боевая фантастика 5151
    • Героическая фантастика 1426
    • Городское фэнтези 2114
    • Готический роман 12
    • Детективная фантастика 720
    • Ироническая фантастика 102
    • Ироническое фэнтези 81
    • Историческое фэнтези 507
    • Киберпанк 301
    • Космическая фантастика 1742
    • Космоопера 52
    • ЛитРПГ 1289
    • Любовная фантастика 186
    • Любовное фэнтези 115
    • Мистика 495
    • Научная фантастика 878
    • Попаданцы 9101
    • Постапокалипсис 859
    • Сказочная фантастика 25
    • Социально-философская фантастика 501
    • Стимпанк 144
    • Технофэнтези 125
    • Ужасы 103
    • Ужасы и мистика 772
    • Фантастика 254
    • Фантастика: прочее 223
    • Фэнтези 11351
    • Эпическая фантастика 225
    • Юмористическая фантастика 1049
    • Юмористическое фэнтези 1573
  • Фольклор 7
    • Загадки 1
    • Народные сказки 5
    • Фольклор: прочее 2
  • Юмор 182
    • Анекдоты 1
    • Комедии 1
    • Прочий юмор 63
    • Сатира 3
    • Юмористическая проза 115
    • Юмористические стихи 5
Izibook.club

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • pereezdsayta@yandex.ru
Информация
  • Карта сайта
© izibook.club, 2026. | Вход
Этот сайт использует cookie для хранения данных. Продолжая пользоваться сайтом, вы даете свое согласие на работу с этими данными в соответствии с нашей политикой конфиденциальности.
Я согласен