This article has been localized into Russian by the community.
In this article series, we're building a complete Snake game from scratch. It makes sense to start with the Introduction and then work your way through the articles one by one, to get the full understanding.
If you want to get the complete source code for the game at once, to get started modifying and learning from it right now, consider downloading all our samples!
Предисловие
Краткое описание данной вводной статьи: Мы будем реализовывать классическую игру "Змейка" с помощью WPF и конечный результат будет выглядеть примерно так:
Создание игр часто является причиной для многих, особенно молодых, людей начать обучение программированию. Но при этом у новичков часто возникает вопрос: с чего начать и что необходимо изучать? Что же, вам понадобится язык программирования, например С#, С++ или любой другой из популярных языков, и, если вы хорошо владеете предпочтительным для вас языком - вам на самом деле не нужно больше ничего: просто начните с азов, добавляя пиксели на экран и в какой-то момент у вас может получиться работающая игра.
Тем не менее, большинство людей предпочтет небольшую помощь с базовыми вещами. Зачем добавлять пиксели на экран вручную если существуют целые библиотеке или фреймворки, которые сделают это за вас, в то время как вы можете сконцентрироваться на создании развлекательной игры? Существует множество фрэймворков, способных помочь вам сделать это, и на самом деле WPF framework и является одним из них.
В настоящее время WPF является не самым очевидным выбором когда вы хотите создать игру - это определенно фрэймворк, который фокусируется в основном на создании пользовательских интерфейсов бизнес-ориентированных приложений. Но тем не менее WPF framework содержит множество элементов, которые можно использовать для создания игр, и что не менее важно: вы получаете все механизмы что-бы украшать и управлять окном в Windows
Так что если вы собираетесь создать простую игру, WPF на самом деле может стать хорошим выбором. По крайней он сильно поможет во многих аспектах, таких как создание окна, рисовании простой игровой зоны и т.д. Если вы хотите добавить продвинутые элементы, например 3D графику и быстрые движущиеся объекты, может понадобиться помощь дополнительных библиотек/фрэймворков, но WPF тем не менее отлично справится с простой игрой, такой как классическая Змейка!
SnakeWPF
Как подтверждение данного утверждения, я решил создать основанную на WPF версию абсолютно классическую игру "Змейка". Оно будет использовать базовое WPF Window как игровое поле, так же- базовые WPF контролы/формы для создания геймплея. Причиной выбора "Змейки" является то, что её легко реализовать (в ней нет необходимости реализовывать большое количество логики в коде), а так же то что она может быть реализована с использованием простых геометрических фигур, таких как квадраты и круги, которые могут быть очень легко реализованы с помощью WPF framework. А еще- это по прежнему действительно веселая игра, несмотря на её простую суть!
Если вы не знакомы со "Змейкой" я могу лишь предположить что вы в конце 90х/начале 2000х годов не были владельцем мобильного телефона Нокиа. Первая версия "Змейки" была написана и презентована за много лет до того, но стала настоящим хитом только когда Нокиа решила установить свою версию этой игры на все свои мобильные телефоны.
Геймплей настолько же прост, насколько и увлекателен: Вы направляете виртуальную змею в одном направлении (влево, вправо, вверх или вниз) в попытке достать еду (иногда-яблоко). Когда ваша змея достает яблоко, оно съедается, ваша змея вырастает и на экране появляется новое яблоко. Если же змея врезается в стены либо в собственный хвост-игра заканчивается и нужно начинать всё сначала. Каждое съеденное яблоко увеличивает ваш счет, но делает задачу не укусить себя за хвост все более и более сложной.
Существует ОГРОМНОЕ количество вариантов геймплея - например, скорость с которой движется ваша змея часто возрастает с каждым съеденным яблоком, делая игру все более сложной, но данный функционал реализован не во всех вариантах "Змейки". Другой функционал это стены - в некоторых реализациях позволяют проходить сквозь стены и выходить с другой стороны игрового поля, в то время как другие реализации закончат игру как только вы коснетесь стены.
В нашей WPFЗмейке стены будут твердые (змея будет умирать если врежется в стену), а скорость будет возрастать экспоненциально после каждого съеденного яблока до определенного значения.
Заключение
В следующих главах мы будем реализовывать добротную версию классической "Змейки" используя WPF framework. Мы начнем с заднего плана в следующей главе и в итоге получим свою собственную, полностью функционирующую основанную на WPF игру.
Пожалуйста, имейте ввиду что поскольку данная статья является руководством по WPF, нам понадобится немного больше C# кода чем обычно необходимо для реализации игровой логики и т.д. Я попытаюсь разъяснить большинство кода по ходу написания, но в случае если вам понадобятся дополнительные знания о C# не забывайте что у нас есть замечательный complete C# tutorialв нашей сети!