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

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

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

    Возможности:
    • Вода растекается по доступной поверхности
    • На персонажа действует гравитация
    • Персонаж может создавать все блоки, кроме коренной породы
    • Персонаж может разрушать землю и лестницы


    Update1:
    Добавил коренную породу.

    Update2:
    Убрал мерцание и дерганье экрана.

    Update3:
    Добавил бинарное демо.

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




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


    При создании кода не использовал «нечестные» ухищрения для уменьшения размера и придерживался следующего кодестайла:

    • На каждой строчке не более одного присвоения и соответствено не более одной точки с запятой
    • При использовании операторов, таких как for, тело находится на отдельной строке
    • Если используются фигурные скобки, то каждая фигурная скобка на своей строке
    • Именованные константы
    • Код документирован!

    Исходный код на GoggleCode
    Бинарник
    Бинарник
    Для компиляции использовал онлайн сервис compileonline, спасибо DarkByte за наводку.

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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 57

      +11
      Прям неделя шортиков на хабре. Код прекрасен, да ещё и с комментариями. Не хватает только готового бинарника, чтобы поиграть.
        +3
        Скомпилированный бинарник под винду: minecraft-19lines.exe (для компиляции использовал сервис compileonline).
          0
          Пересоберите пожайлуйста, добавил два переноса строки при выводе, почемуто высота консоли поменялась у меня при разработке.
          Так же обновил код немного, добавил именованые константы, теперь читается легче =)
            +2
            Обновил. Да, так стало лучше, не нужно подстраивать высоту консоли под игровую область.
              0
              Если можно то обновите еще раз =) Добавил непроходимый блок и увеличил игровое поле на две потерянных вначале строчки =)
                +4
                Обновил. А не проще ли выкладывать вместе с сорцами готовый билд?)
                  0
                  Залил билд, написал спасибку, плюсанул =)
            +1
            Обожаю Symantec…
            Изображение
            Содержимое
            image
              0
              Very Few Users
              This file has been seen by no Symantec users.
              Означает ли это, что Симантек собирает и хранит у себя на сервере имена всех проверенных файлов?
                +1
                Нет, что Вы, конечно же, хэши.
            +2
            Что вы наделали?! Неделя шортиков! Количество шортиков удваивается в два раза!
              +28
              Простите.
              Скрытый текст
              image
            +13
            Даже не знаю, какая строчка моя любимая: 11 или 14 :)
              +4
              Формально вроде да, 1 строчка, но длиной в 4K и кучей конструкций "? :".
              После этого строки 2,4.6 и 15,16,19, содержащие по одной фигурной скобке выглядят чистым расточительством.
                +9
                <insomnia> Нужно выполнить всего три команды, чтобы поставить Gentoo
                <insomnia> cfdisk /dev/hda && mkfs.xfs /dev/hda1 && mount /dev/hda1 /mnt/gentoo/ && chroot /mnt/gentoo/ && env-update &&. /etc/profile && emerge sync && cd /usr/portage && scripts/bootsrap.sh && emerge system && emerge vim && vi /etc/fstab && emerge gentoo-dev-sources && cd /usr/src/linux && make menuconfig && make install modules_install && emerge gnome mozilla-firefox openoffice && emerge grub && cp /boot/grub/grub.conf.sample /boot/grub/grub.conf && vi /boot/grub/grub.conf && grub && init 6
                <insomnia> это первая
                  +1
                  В соседнем треде уже обсуждали, почему не может работать эта команда.
                    0
                    Киньте пожалуйста ссылку на обсуждение: у меня есть пара догадок почему работать не будет, хотелось бы убедиться насколько эти догадки правильны. В поиске к сожалению не нашёл.
                    +1
                    пользователю insomnia пришло 3 письма :D
                • UFO just landed and posted this here
                    +41
                    По огню сложно будет на стены забираться
                      +29
                      Это смотря как задницу подпалить.
                        0
                        Вы имеете в виду реактивное движение или...?
                    +2
                    Unhandled Exception: System.ArgumentOutOfRangeException: startIndex + count > this.length
                    Parameter name: count
                    at System.String.Remove (Int32 startIndex, Int32 count) [0x00000] in <filename unknown>:0
                    at Program.Main (System.String[] args) [0x00000] in /tmp/compare/main.cs:8
                    Нестабильно, падает при игре.
                      +2
                      Добавил в статью примечание, чтобы уберечь других от раскапывания границ карты =)
                        +10
                        А, вы уже следуете примеру Нотча и объявляете баги фичами?
                          +5
                          Пофиксил, добавил непроходимый блок. Чуть с ума не сошел пытаясь добавить нужные проверки =)
                            +12
                            а глядя на код, я решил, что вы уже… :)
                              +2
                              Мама тоже спрашивала, почему я ночью смеялся =)
                        +1
                        Это вы в «Далёкие земли» попали.
                        +64
                        Бывают исходники, на которых боишься запускать обфускатор из-за опасения, что он может сделать код понятнее.
                          +14
                          >На каждой строчке не более одного присвоения и соответствено не более одной точки с запятой
                          тонко, очень тонко…
                            0
                            а еще привью видео нужно бы добавить в статью…
                              +3
                              Причто?
                                +5
                                И на кикстартер? =)
                                +5
                                напомнило баян про установку генты в 3 команды…
                                  +10
                                  Это же не майнкрафт, это же террария…
                                    0
                                    кстати, да ))

                                    И где крафт?!
                                      +4
                                      Дайте автору время=) У него в запасе есть еще 11 строчек=)
                                        0
                                        Там ещё 3 комментария занимают место. Так что 14 =) Ещё можно на египетский стиль перейти и сэкономить 3 строчки.
                                          +1
                                          Это шарп, можно любой код в одну строчку сделать =)
                                    0
                                    Постоянная прокрутка экрана немного раздражает — почему бы не воспользоваться позиционированием курсора?
                                      0
                                      Код, достойный кунсткамеры :)
                                        +3
                                        Я ваш код буду ученикам показывать, как прекрасный пример работающей, но не отрефакторенной программы :)
                                          +3
                                          Это не код — это бинарник. :(
                                            +1
                                            Джефф Дин одобряет.
                                          +1
                                          Имхо Console.Clear(); после каждого считывания кнопки смотрится гораздо приятнее, чем рулон туалетной бумаги =)
                                            0
                                            Был сначала Clear, но убрал, много занимает места =)
                                              0
                                              Убрал прокрутку и соотвественно мерцание экрана!
                                              +5
                                              Плюс за документированный код.
                                                0
                                                С такими успехами, скоро достигнем сингулярности.
                                                  –5
                                                  За такой код бить по лицу книгой «Clean code», в течение времени, обратно пропорционального кол-ву строк данного шедевра.
                                                    +2
                                                    Сударь, там пометка — ненормальное программирование =)
                                                      0
                                                      Ну простите, не заметил. В последнее время что-то крышу срывает при виде говнокода.
                                                    +1
                                                    Minecraft на C# (19 строк кода)

                                                    Следующие топики похоже будут «Майкрософт офис в 30 строк», «вижуал студия в 30 строк», а то и «виндовс в 30 строк кода»! Вообще, не-программистам наверное сложно понять, что Нотч делал в оставшихся строках кода, если и майнкрафт и в 19 строк работает неплохо.

                                                    </Irony mode off>
                                                      +6
                                                      сложно понять, что Нотч делал в оставшихся строках кода
                                                      Добавлял пустые циклы для замедления работы, очевидно же.
                                                      +4
                                                      В IL-дизасемблере по-моему, код смотрится немного наглядней :D

                                                        +1
                                                        Выкиньте уже ildasm, есть же бесплатный опенсорсный ILSpy.

                                                      Only users with full accounts can post comments. Log in, please.