Показаны сообщения с ярлыком Разработка игр на Silverlight для начинающих. Показать все сообщения
Показаны сообщения с ярлыком Разработка игр на Silverlight для начинающих. Показать все сообщения

Заключение / Разработка игр на Silverlight для начинающих

Мне бы не хотелось писать заключение, ибо можно сказать, что работа еще только началась. Еще можно и обязательно нужно дорабатывать, добавляя все новые и новые «фичи». Но все же, раз так полагается. Итак, мы освоили базовые вещи программирования простой карточной игры в среде Silverlight на языке C#. Конечно это не те же самые базовые вещи, как если бы мы решили написать стрелялку, платформер, симулятор, РПГ, сетевую игру, ММО и так далее и тому подобное. Но все еще у нас впереди и я надеюсь мы еще продолжим и будем делать все более сложные и интересные вещи. Ну а в рамках поставленной задачи, мы получили вполне себе работоспособную программу при помощи которой даже можно тренировать память.

Подсчет прошедшего времени / Разработка игр на Silverlight для начинающих

Если нам нужно подсчитать время между началом и концом игры, то можно определить две переменных класса DateTime в начале и конце игры, и потом просто вычесть одно из другого. Но если еще требуется выводить прошедшее время на экран, то уже нужен игровой цикл. Мне известны четыре способа реализовать его в Silverlight. DispatcherTimer, Storyboard, CompositionTarget и свой таймер написанный вручную. Более подробно об этих способах можно прочитать здесь http://silverlight.su/viewtopic.php?id=87

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

Промежуточный итог / Разработка игр на Silverlight для начинающих

Итак, подведем промежуточный итог. Мы сделали достаточные вещи для того, чтобы уже можно было поиграть в игру. Осталось только наполнять ее дополнительными «фичами» (особенностями), которые могут затрагивать модель, визуализацию, управление игрой.

Для полноты картины также приведу полный код главного визуального XAML файла (GameBoard.xaml):


<navigation:Page x:Class="MemoryCards.Views.GameBoard"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth="500" d:DesignHeight="500"
Title="GameBoard Page">
<Canvas x:Name="LayoutRoot">
<Canvas x:Name="GameContainer" Width="500" Height="500" Background="#FFE9EFC4">
<Canvas x:Name="Sprites" Canvas.Left="50" Canvas.Top="50" Width="400" Height="400"></Canvas>
<TextBlock x:Name="textBlockState" Text="" FontSize="20" TextAlignment="Center" Canvas.Left="100" Canvas.Top="460" Width="300"></TextBlock>
<TextBlock x:Name="textBlockTryOpen" Text="0" FontSize="20" TextAlignment="Center" Canvas.Left="415" Canvas.Top="460" Width="60"></TextBlock>
<TextBlock x:Name="textBlockStoryboard" Text="" FontSize="20" TextAlignment="Center" Canvas.Left="15" Canvas.Top="460" Width="60"></TextBlock>
</Canvas>
</Canvas>
</navigation:Page>

Вспомогательные функции / Разработка игр на Silverlight для начинающих

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

Контроллер / Разработка игр на Silverlight для начинающих

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

Визуализация / Разработка игр на Silverlight для начинающих

Теперь нам нужно отображать на экране нашу разработанную модель. А вот эта часть уже имеет самое прямое отношение к Silverlight.

Поскольку у нас изображения картинок в одном файле, нам потребуется некий ограничивающий контейнер, отсекающий изображение по координатам, а также нужно само изображение.

Низкий старт / Разработка игр на Silverlight для начинающих

Создадим новое приложение. Я назвал его MemoryCards (карточки памяти).

В Solution Explorer проекта MemoryCards, чтобы сразу упорядочить нашу программу, я создал четыре дополнительных каталога. Images – для изображений, Views – для визуальных форм и их обработки, Models – для моделей данных и их обработки. Common – общий вспомогательный функционал.

Изначально нужно окно в котором будем отображать игру. Можно воспользоваться MainPage, но лучше создадим свое окно и поместим его в каталог Views. Щелкнув правой кнопкой мыши по дереву на любом элементе, можно добавлять новые или существующие элементы. Давайте создадим новый элемент Silverlight Page и назовем его GameBoard (игровая доска).


В результате в дереве проекта внутри узла Views должно получиться два связанных файла GameBoard.xaml и GameBoard.cs

Чтобы запустить именно наше окно при старте приложения изменим вызов в файле App.xaml.cs

MemoryCards / Разработка игр на Silverlight для начинающих

Простая карточная игра для тренировки памяти

Игра представляет собой игровое поле N*M с расположенными на нем парными карточками изображений. Изображений изначально не видно (то есть, рубашкой вверх, изображением вниз). Игрок щелкая мышью по карточкам открывает их по одной. Если две открытые карточки совпали, то они становятся неактивными. Если открывается третья и совпадений нет, то две предыдущие закрываются. Цель игры открыть (сделать неактивными) все карточки на поле за минимальное количество времени и попыток.
Чтобы не испытывать терпение читателей и не разочаровывать потом (может кому-то последующие тексты по теме покажутся не нужными). Покажу, что же должно получиться в результате, а затем буду описывать как это сделать. Сыграть в эту карточную игру.

Предисловие / Разработка игр на Silverlight для начинающих


Почему Silverlight? Для меня - это логичное продолжение создания программ под windows. Но с возможностью насыщенной графики, анимации и спецэффектами, которые описываются в простом текстовом формате xaml. А также возможностью запускаться прямо в браузере. Большой плюс для программиста - это мощная среда разработки (все что нужно в одном комплекте), у которой к тому же есть наличие бесплатной express версии.
 
Что будем делать?