Minecraft 2 на C# (20 строк кода)

от автора

Уважаемые хабражители, прошу обратить внимание что это «ненормальное программирование» во избежании недопониманий.

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

В игре присутствуют следующие блоки:

  • Воздух
  • Земля
  • Огонь (с анимацией)
  • Вода
  • Любовь Лестница
  • Коренная порода

Возможности:

  • Вода растекается и тушит огонь
  • Огонь поджигает лестницы
  • Гравитация
  • Создание блоков
  • Разрушение блоков земли

Картинка для привлечения внимания:

Управление:

  • W S A D — движение персонажа
  • W S A D + Shift — удаление блоков в соответствующем направлении
  • 1 2 3 4 5 — создание блоков воздуха, земли, лестницы, воды и огня
Бинарник

Бинарник
Для компиляции использовал VisualStudio 2013.

Итак, вдохните глубже, отложите помидиры и яйца, они Вам еще пригодятся и взгляните на код:
Исходный код

Я думаю многие догадались что за способ уменьшения кода тут используется. Тут реализована простейшая виртуальная машина (виртуальный процессор) с минимальным набором команд, а код самой игры написан на байткоде этой машины и лежит в данных!

Поддерживаемые комманды:

  • Сложение двух чисел
  • Копирование блока данных
  • Сравнение двух блоков данных и условный переход
  • Позиционирование курсора в консоли
  • Вывод в консоль блока данных
  • Чтения нажатой клавиши

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

Для тех кто интересуется подробностями:

Всем спасибо за внимание!

ссылка на оригинал статьи http://habrahabr.ru/post/203982/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *