Создание игровой консоли с помощью Netduino, C# и проекта PIX-6T4

Грэг Дункан

Игры = забава, правильно? Написание игр на C# = забава, так? Написание игр на C#, которые работают на Netduino = забава, верно? Перенесите все это в один пакет, помещающийся на ладони, и мы поговорим о серьезной забаве.

Любопытно, что пришедшие из блога Fabien's Bit Bucket сообщения PIX-6T4, о которых будет сегодняшний пост, касаются всего этого.

PIX-6T4 [Создание собственной игровой консоли с помощью C# и Netduino]

  • Создать собственную консоль для видеоигр
  • Присоединится к «Революции созидателей» (Maker Revolution)
  • Use your console as a Turn-Key Development Board
  • Открыть мощь Netduino от «Secret Labs»!
  • Изучить программирование на C#
  • Насладиться созданием собственных игр
  • Полный набор сопровождается книгой

Цель набора PIX -6T4 и сопутствующей книги – научить пользоваться «Электронными и программными строительными блоками» чтобы достичь в «Революции созидателей» уровня Мастера или даже «Безумного ученого» clip_image002.

Чтобы достичь этого мы разбили процесс, которому следовали, когда начали создавать простую консоль для видеоигр, из легко понимаемые части. Почему консоль для видеоигр? Потому что это прикольно!...потому что игровая консоль связана со многими основополагающими концепциями в электронике. Кроме того, игровая консоль обеспечивает безграничные возможности для изучения процесса создания программного обеспечения: выдумайте игру и реализуйте ее самостоятельно с помощью наших примеров и приемов.

Мы выбрали Netduino среди других типов микроконтроллеров просто потому, что навыки программирования, которые вы получите, работая с .Net Micro Framework, необходимой для Netduino, также применимы к полноценной платформе .Net Framework, используемой для создания профессиональных приложений, полномасштабных веб-сервисов, мобильных приложений, работающих на телефонах и веб-приложений. Наша цель – дать возможность приобрести жизненно полезные навыки, которые успешно отразятся на вашей карьере или помогут реализовать ваши задумки.

Схематика и составные части

Вот что представляет собой схематика проекта PIX-6T4.

Мы старались упростить для вас создание собственной консоли с нуля, если возникнет такое желание, и так как мы не предполагали, что люди будут знакомы с инструментарием разводки печатных плат, мы решили сделать схематику доступной в виде файла PowerPoint, который большинство сможет прочесть в своих системах.

...

clip_image004

Исходный код PIX-6T4

Исходный код PIX-6T4 открыт и является частью репозитория netduinohelpers на сайте CodePlex.

Проекты, которые необходимо собрать размещены в каталоге \ Samples :

Ядро

  • ConsoleBootLoader: программа, запускающаяся при включении консоли. Ее задача – прочитать содержимое SD-карты и найти модули, которые можно будет выбрать через главное меню. Когда игра выбрана, она динамически загружается с SD-карты и запускается. Когда игра завершается, игрок возвращается обратно в главное меню.

Игры

  • Paddles: Пинг-понг для двух игроков. Каждый управляет ракеткой с помощью аналогового джойстика консоли, стараясь отбить мячик обратно сопернику. Игрок завоевывает очки, когда соперник промахивается по мячу.
  • MeteorsFromOuterSpace: игра, в которой участник управляет движением маленького корабля с помощью левого джойстика консоли, и расстреливает метеоры, прилетающие со всех направлений с помощью правого джойстика. Чтобы выстрелить в метеор достаточно повернуть правый джойстик в его направлении.

clip_image006

Погружаясь глубже

Если вы хотите изучить как действительно работают «слои пирога», вы должны погрузиться в проект netduino . helpers :

  • \ Fun: отделяет аппаратное обеспечение от кода игры. Также обеспечивает компактную инфраструктуру для простого и эффективного написания собственных игр.
  • \ Hardware: содержит все драйверы для аппаратных компонентов, используемых в создании консоли.
  • \ Helpers: содержит загрузчик ресурсов, используемый для чтения и запуска игр с SD-карты.
  • \ Imaging: обеспечивает интерфейс для построения игрового мира, создания и отображения спрайтов, фиксации столкновений между объектами и отображения малых и больших фонтов.
  • \ Math: библиотека тригонометрических функций, часто требующихся при построении игр.
  • \ Sound: обеспечивает простой метод проигрывания мелодий, используя стандартный формат рингтона Nokia RTTL.

Пара фрагментов кода, образующего проект Meteors From Outer Space (Метеоры из космоса):

 public GameOfMeteors(ConsoleHardwareConfig config) : base(config)
{
    World = new Composition(new byte[WorldSize * WorldSize / 8], WorldSize, WorldSize);
    World.Coinc += WorldCoinc;
    Ship = new PlayerMissile {
        Name = "Ship",
        Owner = World,
        X = WorldSize/2,
        Y = WorldSize/2
    };
    Pruneau = new PlayerMissile {
        Name = "Pruneau",
        Owner = World,
        IsVisible = false
    };
    Meteors = new Meteor[WinningNumberOfMeteors];
    for (var i = 0; i < Meteors.Length; i++) {
        Meteors[i] = new Meteor(this, i);
    }
    NumberOfMeteors = StartingNumberOfMeteors;
    SpawnMeteors();
    DisplayDelay = 0;
}
 public override void Loop() {
    // Ship
    Ship.HorizontalSpeed = (float)Hardware.JoystickLeft.XDirection * EnginePower;
    Ship.VerticalSpeed = (float)Hardware.JoystickLeft.YDirection * EnginePower;
    Ship.Move();
 
    var ship = Ship;
    ApplyToreGeometry(ship);
     // Meteors
    foreach (var meteor in Meteors) {
        meteor.Move();
    }
     // Pruneau
    if (Pruneau.IsVisible) {
        Pruneau.Move();
        ApplyToreGeometry(Pruneau);
        if (AgeOfPruneau++ >= RottingAge) {
            Pruneau.IsVisible = false;
        }
    }
    else {
        var shootXDir = Hardware.JoystickRight.XDirection;
        var shootYDir = Hardware.JoystickRight.YDirection;
        if (shootXDir != AnalogJoystick.Direction.Center ||
            shootYDir != AnalogJoystick.Direction.Center) {
 
            Pruneau.ExactX = Ship.ExactX;
            Pruneau.ExactY = Ship.ExactY;
            Pruneau.HorizontalSpeed = (float) shootXDir*PruneauSpeed;
            Pruneau.VerticalSpeed = (float) shootYDir*PruneauSpeed;
            AgeOfPruneau = 0;
            Pruneau.IsVisible = true;
            Beep(2000, 20);
            Beep(1000, 20);
        }
    }
 
    // Display
    Hardware.Matrix.Display(World.GetFrame(0, 0));
}

Если вы интересуетесь тем как можно использовать Netduino, C# и .Net Micro Framework для создания чего-то действительно потрясающего, как разрабатывать и писать игры, этот проект – для вас…

Вот несколько ссылок, которые могут оказаться интересными: