Топ-7: лучшие игры жанра выживание, похожие на Dayz и Rust

Разработка игры

Начало: круги и абстракция

Я стащила готовый образец ggez и получила на экране окно с кружком. Удивительно! Далее немного абстракции. Я подумала, что было бы неплохо абстрагироваться от идеи игрового объекта. Каждый игровой объект можно рендерить и обновлять, что-то вроде этого:

// Трейт игрового объекта  trait GameObject {      fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;      fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;  }    // определённый игровой объект - Круг  struct Circle {      position: Point2,  }     impl Circle {      fn new(position: Point2) -> Circle {          Circle { position }      }  }  impl GameObject for Circle {      fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {          Ok(())      }      fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {          let circle =              graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;             graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;          Ok(())      }  }

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

impl event::EventHandler for MainState {      fn update(&mut self, context: &mut Context) -> GameResult<()> {          // обновляем все объекты          for object in self.objects.iter_mut() {              object.update(context)?;          }            Ok(())      }        fn draw(&mut self, context: &mut Context) -> GameResult<()> {          graphics::clear(context);            // Рисуем все объекты          for object in self.objects.iter_mut() {              object.draw(context)?;          }            graphics::present(context);            Ok(())      }  }

На данном этапе main.rs необходим, потому что в нём содержится весь код. Поэтому я потратила некоторое время, разбивая его на отдельные файлы и немного упорядочивая структуру каталогов, так что теперь это выглядит так.

resources -> все ассеты находятся здесь (изображения)  src  -- сущности  ---- game_object.rs  ---- circle.rs  -- main.rs -> главный цикл

Люди, площадки и изображения

Следующим большим шагом было создание игрового объекта Person и загрузка изображений. Я решила, что все будет на основе плитки (на данный момент 32×32 плитки).

Теннисные корты

Я потратила некоторое время на просмотр изображений теннисных кортов в Интернете и решила, что мой корт должен быть размером 4 * 2. Я могла бы сделать изображение такого размера или оно могло бы иметь 8 отдельных плиток. После дальнейшего изучения вопроса я поняла, что мне нужно только 2 уникальных плитки, чтобы построить весь корт. Сейчас объясню.

Есть 2 уникальных плитки: 1 и 2.

Каждая секция корта состоит из плитки 1 или плитки 2 как они есть или повёрнутых на 180 градусов.

Назначение игроков на корты

После перехода на ECS всё стало относительно легко. Теперь у меня был систематический способ добавления данных в мои объекты и добавления логики на основе этих данных. Это позволило мне очень легко назначать людей на корты.

Что было сделано:

  • добавление данных о назначенных кортах в Person;
  • добавление данных о назначенных игроках в TennisCourt;
  • добавление системы CourtChoosingSystem, которая перебирает людей и корты, находит доступные корты и назначает на них игроков;
  • Добавление системы PersonMovementSystem, которая перебирает людей, закреплённых за кортами, и, если их там ещё нет, заставляет их переходить на эти корты.

Всё это можно увидеть в действии.

Hurtworld

1-4.jpg

Эта игра интересна своим дизайном графики. Схожесть с Rust тут на лицо. Текстуры выглядят достаточно неплохо и одновременно пойдут на всех слабых PC. Персонаж находится в пустых локациях, где пропитание найти достаточно сложно. Тут только два выхода: выжить или умереть.

Игроками предстоит с нуля создать необходимое снаряжение. Внутри Hurtworld присутствуют элементы крафтинга, строительства и охоты. Можно также покататься на разных видах транспорта.

Топ-10 игр, похожих на «Раст»

“Rust” – увлекательная игра в жанре симулятора выживания в открытом мире. Игрок оказывается на острове один на один с врагами. Но это еще не самое страшное! Местность населена жуткими тварями, одно неверное действие и ты труп. Помимо этого, перед игроком возникают и другие трудности: он может замерзнуть или умереть от недостатка питания.

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

Когда-то наши предки выживали, как могли… Используя для этого все свои силы и смекалку. Безусловно, инстинкт самосохранения присутствует и в каждом из нас, однако в современном мире, когда нам подносят все «на тарелочке», он находится в спящем состоянии и проявляется лишь в чрезвычайных ситуациях.

Многие, кто скучает по экстремальным ситуациям, выбирают для себя игры с выживанием. Давайте вместе посмотрим, в какие игры, похожие на «Раст» можно поиграть на андроид и даже на слабых ПК!

Техническое исследование

Я знала, что хочу использовать Rust, но не знала точно, насколько «с нуля» хотела бы это сделать. Писать пиксельные шейдеры не было желания, но использовать “drag and drop” тоже. Поэтому мне нужно было выбрать что-то, что дало бы мне достаточно гибкости, но при этом осталось интересным с инженерной точки зрения, не переходя на слишком низкий уровень.

Я нашла несколько полезных ресурсов, которыми хочу поделиться:

Я провела небольшое исследование игровых движков Rust и остановилась на двух вариантах: Piston и ggez. Я пробовала их в предыдущем небольшом проекте и в итоге выбрала ggez, потому что он кажется более простым для использования в маленькой 2D игре. Модульная структура Piston кажется немного непонятной для новичка.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий