TicTacToe для Longhorn, используя XAML и C#

Автор: By Deepak Kapoor

Перевод специально для сайта Realcoding.NET

Введение

Эта статья является продолжением моей предыдущей статьи - Hello Longhorn. В своей последней статье я говорил, что буду писать XAML версию своего приложения - Hello Longhorn. Подумав немного, я изменил условие и решил написать что-нибудь более интересное. Таким образом я пришел к идее написать знаменитую игру Tic-Tac-Toe, используя XAML и C#. О, да! Если Вы является разработчиком под Xbox или Playstation, я скажу - не нужно паниковать раньше времени, так как у меня нет планов превышать разработки игровой индустрии (по крайней мере не с этой игрой :))

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

Основы

В этой программе мой UI (пользовательский интерфейс) будет использовать XAML и сам код средствам C# в одном файле. Вы можете писать программу, используя отдельные файлы, я думаю, что это лучший способ. Единственная причина по которой я использую один файл это то, что у меня нет копии Whidbey. Я не хотел использовать много proj файлов. Допускаю, что я выбрал лекгий метод написания.

Началом моего приложения служит NavigationApplicationNavigationApplication это наследник для объектов Application, являющийся ядром Longhorn для приложений моделей.

<NavigationApplication xmlns="http://schemas.microsoft.com/2003/xaml"
StartupUri="TicTacToe.xaml"/>

Атрибут StartUri имеет значение для файла “TicTacToe.xaml”, это означает, что объект NavigationApplication будет искать данный файл и отобразит его при загрузке. Данная часть кода должна находиться в файле TicTacToeApplication.xaml

Создание пользовательского интерфейса

Как уже упоминалось выше, я создал пользовательский интерфейс в файле TicTacToe.xaml. В этом файле находятся все интерфейсные объекты и функции. В самом начале идет windows-приложение:
<Window xmlns="http://schemas.microsoft.com/2005/xaml/"

   xmlns:def="Definition"

   ID="myWindow"

   Visible="true"

   Text="TicTacToe">

    В моем приложении может быть больше одного окна, и каждое может иметь свой идентификатор (ID). В данном примере всего одно окно с текстом TicTacToe в строке заголовка.   Далее создается элемент граница (border)
<Border xmlns="http://schemas.microsoft.com/2003/xaml" Background="BlanchedAlmond">
Здесь создается красивая граница на краях моего окна. После этого у меня идет интересная секция под названием Border.Resources  
<Border.Resources> 

   <LinearGradientBrush

     def:Name="lineargradient"

     StartPoint="0,0"

EndPoint="1,1"  >  

<LinearGradientBrush.GradientStops>

       <GradientStopCollection>

    <GradientStop Color="red" Offset="0"/>

    <GradientStop Color="yellow" Offset="1"/>

  </GradientStopCollection>

  <LinearGradientBrush

def:Name="textgradient"

      StartPoint="0,0"

     EndPoint="1,1"  > 

     <LinearGradientBrush.GradientStops>

    <GradientStopCollection>

<GradientStop Color="blue" Offset="0"/>

<GradientStop Color="white" Offset="1"/>

    </GradientStopCollection>

    </LinearGradientBrush.GradientStops>

    </LinearGradientBrush>

  Это ресурсы, которые доступны любому объекту в пределах этой границы. Конечно, объект должен знать, как использовать эти ресурсы. Здесь я определил два градиента: один для фона, другой для текста.   Далее я объявил таблицу (Table) внутри DocPanel. Таблица состоит из 3 колонок. Далее я создаю 3 ряда для каждой из трех колонок, и у меня девять игровых клеток.
<DockPanel

  ID="root"

   xmlns="http://schemas.microsoft.com/2003/xaml"

  Width="100%"

  Height="100%">

<Table

    xmlns="http://schemas.microsoft.com/2003/xaml"

  xmlns:def="Definition"

  Width="100%"

  CellSpacing="5">

 

  <Column Width="25%"/>

  <Column Width="25%"/>

  <Column Width="25%"/>

  Затем я определяю ряды:
<Body>

<Row>

   <Cell BorderThickness="5">

     <Border

    BorderThickness="1,1,1,1"

    BorderBrush="Black"

    Background="{lineargradient}"

    Width="100%">

<Button ID="btn1"

FontSize="72"

      HorizontalAlignment="Center"

VerticalAlignment="Center"

Width="100%" Height="100"

Foreground="{textgradient}"

Background="{lineargradient}"

Click="HandleClick">

</Button>

  </Border>

   </Cell>

   <Cell BorderThickness="5">

     <Border

    BorderThickness="1,1,1,1"

    BorderBrush="Black"

    Background="{lineargradient}"

    Width="100%">

<Button ID="btn2"

FontSize="72"

HorizontalAlignment="Center"

VerticalAlignment="Center"

Width="100%" Height="100"

Foreground="{textgradient}"

Background="{lineargradient}"

Click="HandleClick">

</Button>

  </Borde>

   </Cell>

   <Cell BorderThickness="5">

     <Border

    BorderThickness="1,1,1,1"

    BorderBrush="Black"

    Background="{lineargradient}"

    Width="100%">

<Button ID="btn3"

FontSize="72"

HorizontalAlignment="Center"

VerticalAlignment="Center"

Width="100%" Height="100"

Foreground="{textgradient}"

Background="{lineargradient}"

Click="HandleClick">

</Button>

  </Border>  

   </Cell> 

</Row>

  Внутри каждого ряда у я определил ячейку, которая содержит границу (Border) и кнопку (Button). Пользователь нажимает на кнопку и “X” или “O” появляется в зависимости от игрока. Я не буду углубляться в сам код игры, который достаточно прост. Однако, я бы хотел обратить Ваше внимание на то, что код заключен между тегами   <def:Code>     <![CDATA[   ...     ... ]]> </def:Code>   Здесь я могу писать свой C# код для обработки сообщений и любых других вычислений.   Заключение   Мы можем писать эффективный и мощный код используя XAML и C# одновременно. Одним из преимуществ такого подхода к программированию это то, что он позволяет широко распространенным разработкам приблизится к технологии XML (XAML – это диалект от XML). Так как у меня нет Whidbey, я использую msbuild для компиляции своего проекта. Вам понадобиться файл проекта, который включен в код, поставляемый с этой статьей. Файл проекта говорит msbuild о том, какой это тип приложения, какие файлы нужно подключать и еще несколько вещей.   Убедитесь, что файл проекта и файл с кодом находятся в одном каталоге. Если в каталоге находится только один файл проекта, то Вам не нужно подробно указывать имя файла проекта. Msbuild достаточно умен, чтобы найти его самостоятельно и корректно построить приложение. Запустить msbuild можно следующим образом “Пуск(Start)”-“Все программы (All Programs)”-“Microsoft Longhorn SDK”-“Open Build Environment Window”-“Longhorn Build Environment”. Перейдите в директорию, в которой расположены файл проекта и файл с кодом, напечатайте «msbuild» и нажмите клавишу «Enter». В папке Release, расположенной в текущей папке, должен появиться файл с расширением exe. Запустите этот файл и наслаждайтесь созданным приложением.


Опубликовал admin
11 Июн, Пятница 2004г.



Программирование для чайников.