Мне бы не хотелось писать заключение, ибо можно сказать, что работа еще только началась. Еще можно и обязательно нужно дорабатывать, добавляя все новые и новые «фичи». Но все же, раз так полагается. Итак, мы освоили базовые вещи программирования простой карточной игры в среде Silverlight на языке C#. Конечно это не те же самые базовые вещи, как если бы мы решили написать стрелялку, платформер, симулятор, РПГ, сетевую игру, ММО и так далее и тому подобное. Но все еще у нас впереди и я надеюсь мы еще продолжим и будем делать все более сложные и интересные вещи. Ну а в рамках поставленной задачи, мы получили вполне себе работоспособную программу при помощи которой даже можно тренировать память.
Своя разработка игр (My Game Develop)
Разработка и программирование игр для начинающих.
Подсчет прошедшего времени / Разработка игр на 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>
- <navigation:Page x:Class="MemoryCards.Views.GameBoard"
Вспомогательные функции / Разработка игр на Silverlight для начинающих
Всегда требуется какая-либо общая вспомогательная функция, которая может использоваться везде и ее размещение, по логике, пока еще никуда не вписывается. В дальнейшем большие наборы функций могут выделяться в какие-либо отдельные библиотеки. Кстати для этого лучше вызывать такие функции просто по имени, используя подключенное пространство имен. В качестве временного буфера-контейнера для таких функций, будем использовать каталог Common.
Контроллер / Разработка игр на Silverlight для начинающих
Мы проработали модель и визуализацию модели. А теперь нужно обрабатывать действия игрока. Они сводятся к щелчкам мышью по карточкам. Следовательно, нам потребуется всего одна функция обработчик.