Гра "п`ятнашки", написана мовою C#

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Введення

Даний програмний продукт є розвиваючою грою п’ятнашки, написаною мовою C# за усіма правилами та стандартами нового Windows Metro інтерфейсу. Мета гри -- переміщаючи пластинки по коробці добитися впорядковування їх по номерах, бажано зробивши якомога менше переміщень. Ця задача реалізується за допомогою зручного, інтуїтивно зрозумілого користувачеві інтерфейсу. Користування даним програмним продуктом не потребує якихось спеціальних знань у користуванні ПК і рекомендується усім користувачам, незалежно від їх рівня знання ПК.

1. Опис актуальності, цілей завдань розроблюваного ПЗ, його призначення й галузь застосування

Даний курсовий проект реалізує можливість складання головоломки п’ятнашки. Программа автоматично розповсюджує числа від 1 до 15 між шістнадцятьма квадратами. Якщо користувач бажає змінити розклад чисел, він завжди може це зробити, натиснувши кнопку «Нова гра».

Ця гра є актуальною вже 134 роки. Багато дітей шкільного віку збирають цю головоломку тисячі разів. Зважаючи на сучасні тенденції, коли майже кожний має дома комп’ютер або ноутбук, розробка цієї головоломки повністю виправдовує себе.

Метою розробки цієї гри є бажання створити нескладну, необтяжену зайвими функціями програму для зручного складання головоломки. Призначена для користування на домашніх ПК користувачами з будь-яким рівнем знання комп’ютера та будь-якого віку.

2. Огляд програмних продуктів, що мають аналогічні цілі й призначення

Аналогів даного програмного продукту у світі існує велика кількість. Адже вже видумано багато розвиваючих головоломок та ігор. Основні вимоги: простота у використанні та зручний дизайн. Можна роздивитися найбільш популярні з них.

2. 1 Судоку

Судоку — заснована на логіці японська головоломка з числами. В перекладі з японської мови «су» позначає слово «число», «доку» має безліч різних перекладів, але в цілому означає щось одне, одиничне, цілісне. Мета головоломки — необхідно заповнити вільні клітинки цифрами від 1 до 9 так, щоб в кожному рядку, в кожному стовпці і в кожному малому квадраті 3Ч3, кожна цифра зустрічалася лише один раз. Правильна головоломка має лише одне рішення.

Малюнок 2.1 Судоку

Короткі відомості про функціонал програми:

— має декілька рівнів складності;

— має можливість самому розробити головоломку;

— має підказки;

— є ведення статистики.

Я вважаю, що недоліків у програми немає. Програма регулярно обновлюється, що свідчить про те, що ймовірних недоліків стає ще менше.

2. 2 Кубик Рубіка

Кубик Рубіка — механічна головоломка, яку винайшов у 1974 році угорський скульптор та винахідник Ерньо Рубік. Метою головоломки є складення граней кубика відповідно до кольорів.

Малюнок 2.2 Кубик Рубіка

Основні можливості програми:

— можливість змінювати фоновий малюнок;

— можливість програвання на фоні своєї музики;

— можливість змінювати текстури кубика;

— можливість змінювати розмір кубика.

Не зважаючи на можливість зміни кольорової гамми програмного забезпечення, до недоліків я б віднесла замалий розмір деяких кнопок та рекламу.

3. Розробка інтерфейсу по й короткий опис основних елементів керування

На основі п. 2 і п. 3 було визначено, що розробка п’ятнашок буде перспективним явищем. На даному етапі програмний продукт доволі простий і не обтяжений зайвими функціями, а лише основними, які дають можливість зібрати головоломку. Але є можливість розвивати даний проект, розроблювати нові функції та поповнювати список можливостей. Це зумовить поповнення аудиторії, що буде користуватися даним програмним продуктом. Розглянемо функціональні можливості даної програми.

3.1 Опис призначення основних вікон додатка, елементів керування, розташованих на них елементів угрупування

При завантаженні програми відкривається головне вікно, у якому містяться всі важливі елементи керування, а саме:

-кнопка «Нова гра»;

-кнопка «Допомога»;

-скрита кнопка «Поділитися», яка стає доступною після правильного складання головоломки.

Малюнок 3.1. Головне вікно програми.

3.2 Опис функціональності ПО й способів взаємодії користувача з ним

Даний програмний продукт є прикладом реалізації багатовіконного інтерфейсу, так як складається з головного вікна та двох дочірніх вікон — відправки результатів своєї гри по e-mail та інформації.

Малюнок 3.2. Вікно інформації.

Малюнок 3.3. Вікно відправки результатів.

Розглянемо детальніше елементи керування, представлені у головному вікні програми та функції, які вони виконують.

Для того, щоб до розпочати нову гру, треба натиснути кнопку «Нова гра».

Малюнок 3.4. Кнопка «Нова гра».

Коли головоломку буде успішно складено, з’явиться кнопка «Поділитися», яка дозволить відправити результати вашої гри по e-mail.

Малюнок 3.5. Кнопка «Поділитися».

Для того, аби ознайомитись з інформацією про розробника та проглянути довідку необхідно натиснути на кнопку «Допомога»

Малюнок 3.6. Кнопка «Допомога».

Функціонально програму можна представити у вигляді блок-схеми.

Малюнок 3.7. Блок-схема.

3.3 Опис принципів композиції та організації елементів керування та візуалізації

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

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

Чорний колір — може стати причиною головних болів, але знижує кількість помилок. Так як у даній програмі він використаний з метою привернути увагу до елементів керування в першу чергу, то негативного впливу на користувача оказувати не буде.

Білий цвіт володіє особливістю збільшувати простір, тож ця головоломка буде здаватися нерозв’язною, що спонукатиме користувача до активних дій.

4. Розробка алгоритмів і блок-схем, що описують функціональність ПЗ

Розглянемо детальніше деякі функції ПЗ.

Блок-схема для функції Scrambles (), що виконується при натисненні кнопки «Нова гра».

Малюнок 4.1. Функція що розпочинає нову гру

При натисненні на будь-який квадрат відбуваються наступні операції:

п`ятнашки гра програмний інтерфейс

Малюнок 4.2. Переміщення числа

5. Розробка прикладного програмного забезпечення

Програма складається з одного класу — BlankPage. У даному класі реалізовані всі необхідні функції для роботи з головоломкою: почати нову гру, переміщати числа на полі та проглянути довідку.

Розглянемо детальніше структуру цього класу:

Методи:

public BlankPage () — Конструктор;

void _timer_Tick (object sender, object e) — функція таймеру

public void NewGame () — функція, що розпочинає нову гру

Border FindStackPanelByTagId (int tag) — пошук квадрата за позицією

int FindEmptyItemPosition () — пошук квадрата без числа

int FindItemValueByPosition (int position) — функція що повертає положення числа на полі

void Scrambles () — функція заповнення поля числами

void CheckBoard () — функція перевірки вірності збору головоломки

bool CheckIfSolvable () — функція, що перевіряє чи можливо розв’язати головоломку

Border CanMove (UIElement itemToMove) — перевірка на можливість руху для числа

private void UserControl_Loaded (object sender, RoutedEventArgs e) — загрузка вікна.

private void UserControl_PointerPressed (object sender, Windows. UI. Xaml. Input. PointerEventArgs e) — переміщення чисел на полі

private void CreateFadeOutAnimation (UIElement btn) — створення анімації.

private void btnnewGame_Click (object sender, RoutedEventArgs e) — опис дій, після натискання користувачем кнопки «Нова гра»

void DisplayToastWithImage () — нотифікація о перемозі

void _dataTransferManager_DataRequested (DataTransferManager sender, DataRequestedEventArgs args) — функція, що дозволяє переслати результати своєї гри по e-mail.

private void btnHelp_Click1(object sender, RoutedEventArgs e) — функція, що зображує вікно з інформацією

private void Page_Tapped1(object sender, TappedRoutedEventArgs e) — функція, що скриває вікно з інформацією

Поля:

private readonly int[] _bordersNums = { 0, 4, 8, 12, 3, 7, 11, 15 };

private readonly Random _rnd;

private readonly DispatcherTimer _timer;

private int _moves;

private DateTime _startTime;

Висновки

п`ятнашки гра програмний інтерфейс

Дане програмне забезпечення було створено з метою надання користувачам програми, яка дозволяє зібрати п’ятнашки.

Для цього користувачеві надане просте у використанні програмне забезпечення. Це зумовлено тим, що його інтерфейс аналогічний до багатьох інших ігор, а тому інтуїтивно зрозумілий для багатьох користувачів.

Список літератури

1. С. Байдачний, Windows 8 для С# розробників. — К., 2012. — 277с, ил.

2. М. Мак-Дональд, Windows Presentation Foundation у. NET 4 — СПб.: Вильямс, 2011. — 1019с.: ил.

3. Веб-ресурс: https: //www. google. com/

Додаток 1

Тексти (лістинги) розробленого програмного забезпечення

//файл BlankPage. xaml

< Page x: Class="PuzzleMetro. BlankPage" xmlns="http: //schemas. microsoft. com/winfx/2006/xaml/presentation" xmlns: x="http://schemas. microsoft. com/winfx/2006/xaml" xmlns: local="using:PuzzleMetro" xmlns: d="http://schemas. microsoft. com/expression/blend/2008″ xmlns: mc="http://schemas. openxmlformats. org/markup-compatibility/2006″ mc: Ignorable="d" d: DesignHeight="768″ d: DesignWidth="1366″ Loaded="UserControl_Loaded" PointerPressed="UserControl_PointerPressed" Tapped="Page_Tapped1"> < Page. BottomAppBar> < AppBar Height="88″ VerticalAlignment="Bottom"> < Grid> < Grid. ColumnDefinitions> < ColumnDefinition Width="Auto" /> < ColumnDefinition Width="*" /> < ColumnDefinition Width="Auto" /> < /Grid. ColumnDefinitions> < Button x: Name="btnnewGame" Click="btnnewGame_Click" Style="{StaticResource AddAppBarButtonStyle}" HorizontalAlignment="Left" /> < Button x: Name="btnShare" Style="{StaticResource UploadAppBarButtonStyle}" Visibility="Collapsed" HorizontalAlignment="Right" Grid. Column="1″ Click="btnShare_Click"/> < Button x: Name="btnHelp" Style="{StaticResource HelpAppBarButtonStyle}" Grid. Column="2″ Click="btnHelp_Click1"/> < /Grid> < /AppBar> < /Page. BottomAppBar> < Grid x: Name="LayoutRoot" Background="White"> < !--Background="{StaticResource ApplicationPageBackgroundBrush}"--> < Grid. RowDefinitions> < RowDefinition Height="75"/> < RowDefinition Height="20"/> < RowDefinition Height="100"/> < RowDefinition Height="20"/> < RowDefinition Height="100"/> < RowDefinition Height="20"/> < RowDefinition Height="100"/> < RowDefinition Height="20"/> < RowDefinition Height="100"/> < RowDefinition Height="*"/> < /Grid. RowDefinitions> < Grid. ColumnDefinitions> < ColumnDefinition Width="405"/> < ColumnDefinition Width="100"/> < ColumnDefinition Width="20"/> < ColumnDefinition Width="100"/> < ColumnDefinition Width="20"/> < ColumnDefinition Width="100"/> < ColumnDefinition Width="20"/> < ColumnDefinition Width="100"/> < ColumnDefinition Width="501"/> < /Grid. ColumnDefinitions> < Canvas x: Name="ContentPanel" Grid. ColumnSpan="9″ Grid. RowSpan="10"> < Border Style="{StaticResource BorderStyle}" Canvas. Left="763″ Canvas. Top="454″ /> < Border Style="{StaticResource BorderStyle}" Canvas. Left="643″ Canvas. Top="454″ > < TextBlock Text="15″ Tag="15″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="524″ Canvas. Top="454″ > < TextBlock Text="14″ Tag="14″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="404″ Canvas. Top="454″ > < TextBlock Text="13″ Tag="13″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="763″ Canvas. Top="334″ > < TextBlock Text="12″ Tag="12″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="643″ Canvas. Top="334″ > < TextBlock Text="11″ Tag="11″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="524″ Canvas. Top="334"> < TextBlock Text="10″ Tag="10″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="404″ Canvas. Top="334"> < TextBlock Text="9″ Tag="9″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="763″ Canvas. Top="214″ > < TextBlock Text="8″ Tag="8″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="643″ Canvas. Top="214″ > < TextBlock Text="7″ Tag="7″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="524″ Canvas. Top="214″ > < TextBlock Text="6″ Tag="6″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="404″ Canvas. Top="214″ > < TextBlock Text="5″ Tag="5″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="763″ Canvas. Top="94″ > < TextBlock Text="4″ Tag="4″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="643″ Canvas. Top="94″ > < TextBlock Text="3″ Tag="3″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="524″ Canvas. Top="94″ > < TextBlock Text="2″ Tag="2″ Style="{StaticResource NumberStyle}" /> < /Border> < Border Style="{StaticResource BorderStyle}" Canvas. Left="404″ Canvas. Top="94″ > < TextBlock Text="1″ Tag="1″ Style="{StaticResource NumberStyle}" /> < /Border> < TextBlock Canvas. Left="677″ Style="{StaticResource H3Style}" Text="ходов:" FontWeight="Thin" Margin="0″ Canvas. Top="10″ /> < TextBlock Canvas. Left="748″ FontWeight="Thin" x: Name="txtMoves" Text="0″ Canvas. Top="10″ Style="{StaticResource H2Style}"/> < TextBlock Canvas. Left="498″ Text="время:" FontWeight="Thin" Style="{StaticResource H3Style}" Canvas. Top="10″ Margin="0"/> < TextBlock Canvas. Left="572″ x: Name="txtTime" Text="00: 00:00″ Style="{StaticResource H2Style}" Canvas. Top="10″ FontWeight="Thin"/> < TextBlock HorizontalAlignment="Left" Width="372″ Height="145″ Canvas. Top="565″ Foreground="Black" FontFamily="Segoe UI Light" FontWeight="Thin" FontSize="20″ x: Name="Info" Opacity="0"> Цель игры -- перемещая костяшки по< LineBreak /> коробке добиться упорядочивания их по < LineBreak /> номерам, желательно сделав как можно < LineBreak /> меньше перемещений. <LineBreak /> <LineBreak /> Пятнашки. Александр Демченко © 2012 < /TextBlock> < /Canvas> < /Grid>

< /Page>

//файл BlankPage. xaml. cs

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. IO;

using System. Linq;

using Windows. ApplicationModel. DataTransfer;

using Windows. Data. Xml. Dom;

using Windows. Foundation;

using Windows. Foundation. Collections;

using Windows. UI;

using Windows. UI. Notifications;

using Windows. UI. Popups;

using Windows. UI. Xaml;

using Windows. UI. Xaml. Controls;

using Windows. UI. Xaml. Controls. Primitives;

using Windows. UI. Xaml. Data;

using Windows. UI. Xaml. Input;

using Windows. UI. Xaml. Media;

using Windows. UI. Xaml. Media. Animation;

using Windows. UI. Xaml. Navigation;

namespace PuzzleMetro

{ public sealed partial class BlankPage: Page { private readonly int[] _bordersNums = { 0, 4, 8, 12, 3, 7, 11, 15 }; private readonly Random _rnd; private readonly DispatcherTimer _timer; private int _moves; private DateTime _startTime; BlankPage rootPage = null; public BlankPage () { InitializeComponent (); _rnd = new Random (); _timer = new DispatcherTimer (); _timer. Tick +=_timer_Tick; _timer. Interval = new TimeSpan (0, 0, 0, 1); _dataTransferManager = DataTransferManager. GetForCurrentView (); _dataTransferManager. DataRequested += new TypedEventHandler< DataTransferManager, DataRequestedEventArgs> (_dataTransferManager_DataRequested); } void _timer_Tick (object sender, object e) { var time = DateTime. Now — _startTime; txtTime. Text = string. Format («{0:00}:{1:00}:{2:00}», time. Hours, time. Minutes, time. Seconds); } public void NewGame () { _moves = 0; txtMoves. Text = «0»; txtTime. Text = «00: 00:00»; Scrambles (); while (!CheckIfSolvable ()) { Scrambles (); } _startTime = DateTime. Now; _timer. Start (); } // поиск и возврат квадрата по позиции Border FindStackPanelByTagId (int tag) { if (tag == 16) { return (from stackPanel in ContentPanel. Children. OfType<Border>() where stackPanel. Child == null select stackPanel). First (); } else { foreach (Border b in ContentPanel. Children) { if (b. Child ≠ null & & Convert. ToInt32(((TextBlock)b. Child). Text) == tag) return b; } } return null; } // поиск элемента без числа int FindEmptyItemPosition () { int index = 15; for (int i = 0; i < 15; i++) { if (((Border)ContentPanel. Children[i]). Child ≠ null) return index; index--; } return 0; } // возвращает число по позиции элемента, если числа нет — возвращает 16 int FindItemValueByPosition (int position) { return ((Border)ContentPanel. Children[position]). Child ≠ null? Convert. ToInt32(((TextBlock)((Border)ContentPanel. Children[position]). Child). Tag): 16; } // алгоритм подбора элементов для хранения void Scrambles () { var count = 0; while (count < 25) { var a = _rnd. Next (1, 17); var b = _rnd. Next (1, 17); if (a == b) continue; var stack1 = FindStackPanelByTagId (a); var stack2 = FindStackPanelByTagId (b); if (a == 16) { var image2 = stack2. Child; stack2. Child = null; stack1. Child = image2; } else if (b == 16) { var image1 = stack1. Child; stack1. Child = null; stack2. Child = image1; } else { var image1 = stack1. Child; var image2 = stack2. Child; stack1. Child = null; stack2. Child = null; stack1. Child = image2; stack2. Child = image1; } count++; } } // проверка правильности void CheckBoard () { var index = 1; for (var i = 15; i > 0; i--) { if (FindItemValueByPosition (i) ≠ index) return; index++; } _timer. Stop (); DisplayToastWithImage (); btnShare. Visibility = Windows. UI. Xaml. Visibility. Visible; } // проверка на возможность решения bool CheckIfSolvable () { var n = 0; for (var i = 15; i > 0; i--) { if (!(ContentPanel. Children[i] is StackPanel)) continue; var num1 = FindItemValueByPosition (i); var num2 = FindItemValueByPosition (i — 1); if (num1 > num2) { n++; } } var emptyPos = FindEmptyItemPosition (); return n % 2 == (emptyPos + emptyPos / 4) % 2? true: false; } /// < summary> /// Move Item From One SpackPanel to Another. /// < /summary> /// < param name="item"> Gets the Image item you want to move< /param> /// < param name="targetPanel"> Destination StackPanel< /param> void MoveItem (TextBlock item, Border targetPanel) { foreach (var stackPanel in ContentPanel. Children. OfType<Border>(). Where (stackPanel => stackPanel. Child ≠ null & & ((TextBlock)stackPanel. Child). Text == ((TextBlock)item). Text)) { stackPanel. Child = null; } targetPanel. Child = item; } // возвращает позиции элементов, если они находятся по краям bool IsBorderSwich (int a, int b) { return _bordersNums. Contains (a) & & _bordersNums. Contains (b); } // проверка на возможность передвижения Border CanMove (UIElement itemToMove) { var val = ((TextBlock)itemToMove). Text; var count = ContentPanel. Children. Count; for (var i = 0; i < count; i++) { if (!(ContentPanel. Children[i] is Border)) continue; var stakePanel = (Border)ContentPanel. Children[i]; if (stakePanel. Child ≠ null & & ((TextBlock)stakePanel. Child). Text ≠ val) continue; if (!IsBorderSwich (i, i + 1) & & i + 1 <= 15 & & ContentPanel. Children[i + 1] ≠ null & & ((Border)ContentPanel. Children[i + 1]). Child == null) return ((Border)ContentPanel. Children[i + 1]); if (!IsBorderSwich (i, i — 1) & & i — 1 > -1 & & ContentPanel. Children[i — 1] ≠ null & & ((Border)ContentPanel. Children[i — 1]). Child == null) return ((Border)ContentPanel. Children[i — 1]); if (i + 4 <= 15 & & ContentPanel. Children[i + 4] ≠ null & & ((Border)ContentPanel. Children[i + 4]). Child == null) return ((Border)ContentPanel. Children[i + 4]); if (i — 4 > -1 & & ContentPanel. Children[i — 4] ≠ null & & ((Border)ContentPanel. Children[i — 4]). Child == null) return ((Border)ContentPanel. Children[i — 4]); } return null; } // при загрузке приложения private void UserControl_Loaded (object sender, RoutedEventArgs e) { NewGame (); } private void UserControl_PointerPressed (object sender, Windows. UI. Xaml. Input. PointerEventArgs e) { var item = (UIElement)e. OriginalSource; TextBlock work = null; Border border = null; if (item is Border) { border = item as Border; if (border. Child ≠ null) { work = border. Child as TextBlock; } else return; } else if (item is TextBlock) { work = item as TextBlock; border = work. Parent as Border; } else return; var to = CanMove (work); if (to ≠ null) { _moves++; txtMoves. Text = _moves. ToString (); CreateFadeOutAnimation (work); MoveItem (work, to); CreateFadeInAnimation (work); CheckBoard (); } } private void CreateFadeOutAnimation (UIElement btn) { Duration dur = new Duration (TimeSpan. FromSeconds (2)); var da = new DoubleAnimation (); da. From = 1; da. To = 0; var sb = new Storyboard (); sb. Duration = dur; sb. Children. Add (da); Storyboard. SetTarget (da, btn); Storyboard. SetTargetProperty (da, «(Opacity)»); sb. Begin (); } private void CreateFadeInAnimation (UIElement btn) { Duration dur = new Duration (TimeSpan. FromSeconds (2)); var da = new DoubleAnimation (); da. From = 0; da. To = 1; var sb = new Storyboard (); sb. Duration = dur; sb. Children. Add (da); Storyboard. SetTarget (da, btn); Storyboard. SetTargetProperty (da, «(Opacity)»); sb. Begin (); } private void btnnewGame_Click (object sender, RoutedEventArgs e) { NewGame (); } void DisplayToastWithImage () { XmlDocument toastXml = ToastNotificationManager. GetTemplateContent (ToastTemplateType. ToastText01); XmlNodeList textElements = toastXml. GetElementsByTagName («text»); foreach (IXmlNode toastTextAttr in textElements) { toastTextAttr. InnerText = «Поздравляем, Вы выиграли!»; } ToastNotification toast = new ToastNotification (toastXml); ToastNotificationManager. CreateToastNotifier (). Show (toast); } private DataTransferManager _dataTransferManager; void _dataTransferManager_DataRequested (DataTransferManager sender, DataRequestedEventArgs args) { args. Request. Data. Properties. Title = «Metro Puzzle»; args. Request. Data. Properties. Description = «Делюсь победой. «; args. Request. Data. SetText (string. Format («Только что прошел пятнашки за {0} ходов и {1}, думаешь сможешь лучше?», txtMoves. Text, txtTime. Text)); } private void btnGame_Click (object sender, RoutedEventArgs e) { NewGame (); btnShare. Visibility = Windows. UI. Xaml. Visibility. Collapsed; } private void btnShare_Click (object sender, RoutedEventArgs e) { DataTransferManager. ShowShareUI (); btnShare. Visibility = Windows. UI. Xaml. Visibility. Collapsed; } private void btnHelp_Click1(object sender, RoutedEventArgs e) { Duration dur = new Duration (TimeSpan. FromSeconds (2)); var da = new DoubleAnimation (); da. From = 0; da. To = 1; var sb = new Storyboard (); sb. Duration = dur; sb. Children. Add (da); Storyboard. SetTarget (da, Info); Storyboard. SetTargetProperty (da, «(Opacity)»); if (Info. Opacity == 0) { sb. Begin (); } } private void Page_Tapped1(object sender, TappedRoutedEventArgs e) { Duration dur = new Duration (TimeSpan. FromSeconds (2)); var da = new DoubleAnimation (); da. From = 1; da. To = 0; var sb = new Storyboard (); sb. Duration = dur; sb. Children. Add (da); Storyboard. SetTarget (da, Info); Storyboard. SetTargetProperty (da, «(Opacity)»); if (Info. Opacity == 1) { sb. Begin (); } } }

}

ПоказатьСвернуть
Заполнить форму текущей работой