Розробка модуля вікторини в одно-користувальницькому режимі

Аналіз вимог до модуля проведення вікторини на базі мобільних технологій. Створення гри на основі запитань і відповідей в одно-користувацькому режимі. Проектування моделі даних. Розробка архітектури програмної системи. Тестування графічного інтерфейсу.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 21.09.2017
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Проведені дослідження показують, що при раціональній організації робочих місць продуктивність праці зростає знати на 15-25 %.

Основні ергономічні вимоги до проектування робочого місця в системі «людина - техніка - виробниче середовище» зображені на рис. 4.2:

Рис. 4.2. Робочий стіл і розміщення користувача ПК

Гігієнічні вимоги визначають умови життєдіяльності і працездатності людини у процесі взаємодії з технікою і середовищем; показниками є рівень освітлення, температура, вологість, шум, вібрація, токсичність, загазованість тощо [6].

Антропометричні вимоги визначають відповідність конструкцій техніки антропометричним характеристикам людини (зріст, розміри тіла та окремі рухові ланки). Показниками е раціональна робоча поза, оптимальні зони досягнення, раціональні трудові рухи.

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

Організація робочого місця передбачає:

1. правильне розміщення робочого місця у виробничому приміщенні;

2. вибір ергономічно обґрунтованого робочого положення, виробничих меблів з урахуванням антропометричних характеристик людини;

3. раціональне компонування обладнання на робочих місцях;

4. урахування характеру та особливостей трудової діяльності.

5. Загальні принципи організації робочого місця:

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

7. ті предмети, якими користуються частіше, розташовуються ближче, ніж ті предмети, якими користуються рідше;

8. предмети, які беруть лівою рукою, повинні бути зліва, а ті предмети, які беруть правою рукою - справа;

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

10. робоче місце не повинно бути захаращене;

11. організація робочого місця повинна забезпечувати необхідну оглядовість.

Статичні напруження працівника в процесі праці пов'язані з підтриманням у нерухомому стані предметів і знарядь праці, а також підтриманням робочої пози.

4.4 Пожежна безпека

Системи пожежної безпеки [4]- це комплекс організаційних заходів і технічних засобів, спрямованих на запобігання пожежі та збитків від неї.

Відповідно до ГОСТ 12.1.004-91 [5] пожежна безпека об'єкта повинна забезпечуватися системою запобігання пожежі, системою протипожежного захисту і системою організаційно-технічних заходів.

Системи пожежної безпеки мають запобігти виникненню пожежі і впливу на людей небезпечних факторів пожежі на необхідному рівні. Потрібний рівень пожежної безпеки людей за допомогою зазначених систем, згідно з ГОСТ 12.1.004-91 [5], не повинен бути меншим за 0,999999 відвернення впливу на кожну людину, а допустимий рівень пожежної небезпеки для людей не може перевищувати 10~6 впливу небезпечних факторів пожежі, що перевищують гранично допустимі значення на рік у розрахунку на кожну людину.

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

Метою пожежної безпеки об'єкта є попередження виникнення пожежі на визначеному чинними нормативами рівні, а у випадку виникнення пожежі - обмеження її розповсюдження, своєчасне виявлення, гасіння пожежі, захист людей і матеріальних цінностей [4].

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

Під час роботи над четвертим розділом підрахував кількість світильників та ламп які потрібні для нормальне освітлення приміщення 11. В приміщенні використовуються світильники типу ОД. Кожен світильник комплектується двома лампами. Тобто необхідно використовувати 6 світильників із 12 працюючими лампами в них. Також розглянув ергономічні вимоги для організації робочого місця та були запропоновані рекомендації щодо поліпшення заходів пожежної безпеки.

ВИСНОВКИ

У дипломному проекті був спроектований та розроблений модуль вікторини в одно-користувальницькому режимі.

Під час роботи над дипломним проектом були розв'язанні такі задачі:

Зроблено змістовний опис і аналіз предметної області, структурних і функціональних особливостей об'єкта управління: описана діяльність об'єкта управління, бізнес-процеси предметної області автоматизованого модуля змодельовані у стандарті IDEF0.

Проведено огляд і аналіз існуючих систем.

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

Розроблені не функціональні вимоги: спроектовані засоби захисту інформації в системі.

Спроектована структура бази даних.

Розроблений програмний продукт: написано програмний код, що дозволяє реалізувати необхідну функціональність та проведено тестування.

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

При розробці модулю було використано чимало інструментів для аналізу предметної області, проектування бізнес-процесів. До цих інструментів відносяться: RationalRose, ERwin, BPwin. Модуль був реалізован за допомогою мобільних-технологій, тобто це сучасний підхід, це дуже просте використання додатку, з мінімальними затратами часу на розгортання додатку. Це також дає можливість багатьом користувачам користуватися одночасно, та з однією базою даних.

До переваг додатку можна віднести:

Вибір теми вікторини самостійно;

Зручний та комфортний інтерфейс;

Вибір типу вікторини самостійно;

Питання зберігаються в облаці.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. Эндрю Троелсен Язык программирования C# 5.0 и платформа .NET 4.5. / Эндрю Троелсен -- Вильямс 2013 - 1312с.

2. Хассан Гома UML - проектування систем реального часу паралельних і розподілених систем / Г. Хассан -- Microsoft Press - 2011 - 704 c.

3. Суботовський Д.Ю. Використання платформи MONO для розробки програм на платформах Android, IOS / Тези доповідей. Міжнародної науково-практичної конференції молодих вчених, аспірантів та студентів «Інформаційні технології в сучасному світі: дослідження молодих вчених». / Суботовський Д.Ю. -- Харків: 12-13 березня 2015. - С. 62.

4. Пугачев В.В. Розробки додатків для Windows Phone 7 / В.В. Пугачев, С.Д. Павлов, В.Д. Сошников. -: Microsoft Press - 2012 - 376 c.

5. Джозеф Албахари C# 5.0. Справочник. Полное описание языка / Джозеф Албахари, Бен Албахари. - Вильямс. - 2013 - 1008с.

6. Джеффри Рихтер CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# / Д. Рихтер. - Питер 2012 - 734с.

7. Robert Sedgewick Algorithms. Algorithms (4th Edition). Addison-Wesley Professional; 4th edition (March 19, 2011) / R. Sedgewick, K. Wayne's. - 2011. - 992 p.

8. Mike PreuB Multimodal Optimization by Means of Evolutionary Algorithms (Natural Computing Series). Springer; 2015 edition (October 5, 2015) / Mike PreuB -- 190 p. Програм н

9. Adnan Aziz Elements of Programming Interviews: The Insiders' Guide . CreateSpace Independent Publishing Platform; 1st edition (October 11, 2012) / A. Aziz. 2012. - 504 p.

ДОДАТОК

Рис. А.1. Зразок форми «Авторизація та реєстрація користувача»

.

Рис. А.2. Головне вікно програми. Вибір теми та режиму вікторини

Рис. А.3. Вікно одно-користувальницького режиму

Рис. А.4. Вікно багатокористувальницького режиму

Рис. А.5. Таблиця рекордів

Тестування модуля аналізу й оцінки вікторини в одно-користувальницького режиму

Таблиця Б.1 Базовий план тестування

Назва тесту

Ціль тестування

Очікуваний результат

Результат

1

Відповідність назви вікна

Дивитися на відповідність назви вікна наповненню

При переході на будь-яку форму, в її заголовку повинна відобразитися відповідна назва

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

2

Перевірка відображення даних

Перевірити відображення даних на формах

Дані повинні відображатися коректно й у відпові-дних місцях

Дані відображаються коректно й у відпові-дних місцях

3

Перевірка пунктів меню

Перевіряти пункти меню

Пункти меню повинні відображатися коректно, відповідати нормам й дизайну додатку

Пункти меню відображаються коректно, відповідають нормам й дизайну додатку

Таблиця Б.2 Тестування валідації

з/п

Крок сценарію

Очікуваний результат

Отриманий результат

Відмітка про проходження сценарію

1

2

3

4

5

1.

Спроба авторизації при не введеному Login

Виведення повідомлення про помилку

Виведення повідомлення про помилку.

Авторизація неможлива.

Так

2.

Спроба авторизації при не введеному Password

Виведення повідомлення про помилку

Виведення повідомлення про помилку.

Авторизація неможлива.

Так

3.

Спроба авторизації при невірно введеному Login

Виведення повідомлення про помилку

Виведення повідомлення про помилку.

Авторизація неможлива.

Так

4.

Спроба авторизації при невірно введеному Password

Виведення повідомлення про помилку

Виведення повідомлення про помилку.

Авторизація неможлива

Так

Таблиця Б.3 Юзабіліті тестування

з/п

Назва перевірки

Примітка

Відмітка про проходження сценарію

1

2

3

4

Архітектура та навігація

1.

Чи відповідає структура додатку цілям, для досягнення яких він призначений?

Структура програми відповідає цілям

Так

2.

Чи зрозуміла схема навігації?

Схема навігації інтуїтивно зрозуміла.

Так

3.

Чи логічно відсортовані елементи навігаційних панелей?

Елементи відсортовані логічно

Так

Планування і дизайн

1.

Оформлення вікон в одному стилі

Оформлені в одному стилі

Так

2.

Дизайн «user-friendly» і естетичний

Дотримано концепції «user-friendly» та естетичності програмного продукту.

Так

Оформлення тексту

Таблиця Б.4 Функціональне тестування

Назва тесту

Вхідні параметри

Очікуваний результат

Резу-льтат

1

Навігація

Перевірити корект-ність і простоту відкриття існуючих вікон, пунктів меню, тощо.

Все відкривається коректно

Так

2

Обробка помилок

Помилки виконання, некоректного вводу

Видаються відповідні повідомлення

Так

3

Перевірка основних функцій системи

Перевірка здійснюється згідно вимог замовника або раніше розроблених тест кейсів

Лістинг основних класів програми

Клас TwoPlayer.xaml.cs

using Newtonsoft.Json.Linq;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net.Http;

using System.Runtime.InteropServices.WindowsRuntime;

using Windows.Foundation;

using Windows.Foundation.Collections;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class TwoPlayer : Page

{

List<Classes.Items> items;

int randNumb;

int countTrueUnsverP1 = 0;

int countTrueUnsverP2 = 0;

bool P1Unsverd;

bool P2Unsverd;

int touch = 0;

string category;

public TwoPlayer()

{

this.InitializeComponent();

}

/// <summary>

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

category = e.Parameter.ToString();

}

private void Gen_Quest()

{

Random rand = new Random();

Продовження дод. В

randNumb = rand.Next(0, items.Count);

txtQuestionP1.Text = items[randNumb].question;

bttUnsver1P1Text.Text = items[randNumb].unsver1;

bttUnsver2P1Text.Text = items[randNumb].unsver2;

bttUnsver3P1Text.Text = items[randNumb].unsver3;

bttUnsver4P1Text.Text = items[randNumb].unsver4;

txtQuestionP2.Text = items[randNumb].question;

bttUnsver1P2Text.Text = items[randNumb].unsver1;

bttUnsver2P2Text.Text = items[randNumb].unsver2;

bttUnsver3P2Text.Text = items[randNumb].unsver3;

bttUnsver4P2Text.Text = items[randNumb].unsver4;

}

private void btnUnsverP1(object sender, RoutedEventArgs e)

{

}

private async void Page_Loaded(object sender, RoutedEventArgs e)

{

using (HttpClient httpClient = new HttpClient())

{

HttpRequestMessage request = new HttpRequestMessage();

httpClient.BaseAddress = new Uri(«https://api.parse.com/1/classes/» + category);

request.Method = new HttpMethod(«GET»);

request.Headers.Add(«X-Parse-Application-Id», «q8r9XYoXbEw1kXsWIXbyCNQm9ylcWfAS0fqlWWNx»);

request.Headers.Add(«X-Parse-REST-API-Key», «2nke5LSbXQmTiA9FaVytlBihjOOz4fPcoxjEHlee»);

var response = await httpClient.SendAsync(request);

var text = await response.Content.ReadAsStringAsync();

System.Diagnostics.Debug.WriteLine(text);

JObject results = JObject.Parse(text);

items = new List<Classes.Items>();

foreach (var result in results[«results»])

{

items.Add(new Classes.Items() { question = (string)result[«Question»], unsver1 = (string)result[«unsver1»], unsver2 = (string)result[«unsver2»], unsver3 = (string)result[«unsver3»], unsver4 = (string)result[«unsver4»], trueUnsver = (string)result[«trueUnsver»] });

//item.Add(new Item() { driveId = (string)result[«parentReference»][«driveId»], id = (string)result[«parentReference»][«id»], path = (string)result[«parentReference»][«path»] });

}

Gen_Quest();

}

}

private async void NextQuest()

{

touch = 0;

Продовження дод. В

if (P1Unsverd == false && P2Unsverd == false)

{

MessageDialog md = new MessageDialog(«Игра окончена! Никто не ответил верно! Правильный ответ: « + items[randNumb].trueUnsver + Environment.NewLine + «Результаты игры:» + Environment.NewLine + «Игрок 1: « + countTrueUnsverP1 + Environment.NewLine + «Игрок 2: « + countTrueUnsverP2);

await md.ShowAsync();

Frame.GoBack();

}

P1Unsverd = false;

P2Unsverd = false;

bttUnsver1P1.IsEnabled = true;

bttUnsver2P1.IsEnabled = true;

bttUnsver3P1.IsEnabled = true;

bttUnsver4P1.IsEnabled = true;

bttUnsver1P2.IsEnabled = true;

bttUnsver2P2.IsEnabled = true;

bttUnsver3P2.IsEnabled = true;

bttUnsver4P2.IsEnabled = true;

txtScoreP1.Text = countTrueUnsverP1.ToString();

txtScoreP2.Text = countTrueUnsverP2.ToString();

Gen_Quest();

}

//}

private void btnUnsverP2Text_Tapped(object sender, TappedRoutedEventArgs e)

{

string unsver = (sender as TextBlock).Text.ToString();

if (unsver == items[randNumb].trueUnsver)

{

countTrueUnsverP2++;

P2Unsverd = true;

}

bttUnsver1P2.IsEnabled = false;

bttUnsver2P2.IsEnabled = false;

bttUnsver3P2.IsEnabled = false;

bttUnsver4P2.IsEnabled = false;

touch++;

if (touch == 2)

{

NextQuest();

}

}

//}

private void btnUnsverP1Text_Tapped(object sender, TappedRoutedEventArgs e)

{

Продовження дод. В

string unsver = (sender as TextBlock).Text.ToString();

if (unsver == items[randNumb].trueUnsver)

{

countTrueUnsverP1++;

P1Unsverd = true;

}

bttUnsver1P1.IsEnabled = false;

bttUnsver2P1.IsEnabled = false;

bttUnsver3P1.IsEnabled = false;

bttUnsver4P1.IsEnabled = false;

touch++;

if (touch == 2)

{

NextQuest();

}

}

}

}

Клас Ragistration.xaml.cs

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Runtime.InteropServices.WindowsRuntime;

using System.Xml.Linq;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class Registration : Page

{

public Registration()

{

this.InitializeComponent();

}

/// <summary>

Продовження дод. В

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

}

private async void btnRegist_Click(object sender, RoutedEventArgs e)

{

Classes.User[] com;

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync(«Users.xml»);

string users_text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

XDocument xDoc = XDocument.Parse(users_text);

com = xDoc.Root.Elements(«user»).Select(p =>

{

return new Classes.User()

{

login = p.Element(«login»).Value,

pass = p.Element(«pass»).Value

};

}).ToArray();

foreach (var item in com)

{

if (item.login == txtLogin.Text && item.pass ==txtPass.Password)

{

MessageDialog md = new MessageDialog(«Пользователья с таким именем уже существует!»);

await md.ShowAsync();

}

return;

}

string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

string newText = text.Replace(«</users>«, «\n<user>«

+ «\n<login>«

+ txtLogin.Text

+ «</login>«

+ «\n<pass>«

+ txtPass.Password

+ «</pass>«

+ «\n</user>«

+ «\n</users>«);

StorageFile sampleFile2 = await storageFolder.CreateFileAsync(«Users.xml», CreationCollisionOption.OpenIfExists);

await Windows.Storage.FileIO.WriteTextAsync(sampleFile2, newText);

System.Diagnostics.Debug.WriteLine(newText);

Продовження дод. В

MessageDialog md1 = new MessageDialog(«Пользователь успешно добавлен!»);

await md1.ShowAsync();

Frame.GoBack();

}

private void btnBack_Click(object sender, RoutedEventArgs e)

{

Frame.GoBack();

}

}

}

Клас Records.xaml.cs

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Runtime.InteropServices.WindowsRuntime;

using System.Xml.Linq;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class Registration : Page

{

public Registration()

{

this.InitializeComponent();

}

/// <summary>

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

}

private async void btnRegist_Click(object sender, RoutedEventArgs e)

{

Classes.User[] com;

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync(«Users.xml»);

string users_text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

XDocument xDoc = XDocument.Parse(users_text);

com = xDoc.Root.Elements(«user»).Select(p =>

{

return new Classes.User()

{

login = p.Element(«login»).Value,

pass = p.Element(«pass»).Value

};

}).ToArray();

foreach (var item in com)

{

if (item.login == txtLogin.Text && item.pass ==txtPass.Password)

{

MessageDialog md = new MessageDialog(«Пользователья с таким именем уже существует!»);

await md.ShowAsync();

}

return;

}

string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

string newText = text.Replace(«</users>«, «\n<user>«

+ «\n<login>«

+ txtLogin.Text

+ «</login>«

+ «\n<pass>«

+ txtPass.Password

+ «</pass>«

+ «\n</user>«

+ «\n</users>«);

StorageFile sampleFile2 = await storageFolder.CreateFileAsync(«Users.xml», CreationCollisionOption.OpenIfExists);

await Windows.Storage.FileIO.WriteTextAsync(sampleFile2, newText);

System.Diagnostics.Debug.WriteLine(newText);

MessageDialog md1 = new MessageDialog(«Пользователь успешно добавлен!»);

await md1.ShowAsync();

Frame.GoBack();

}

private void btnBack_Click(object sender, RoutedEventArgs e)

{

Frame.GoBack();

}

}

}

Продовження дод. В

Клас OnePlayer2.xaml.cs

using Newtonsoft.Json.Linq;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net.Http;

using System.Runtime.InteropServices.WindowsRuntime;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class OnePlayer2 : Page

{

List<Classes.Items> items;

int randNumb;

int countTrueUnsver = 0;

string category;

public OnePlayer2()

{

this.InitializeComponent();

}

/// <summary>

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

category = e.Parameter.ToString();

}

private void Gen_Quest()

{

Random rand = new Random();

randNumb = rand.Next(0, items.Count);

txtQuestion.Text = items[randNumb].question;

}

Продовження дод. В

private async void Page_Loaded(object sender, RoutedEventArgs e)

{

using (HttpClient httpClient = new HttpClient())

{

HttpRequestMessage request = new HttpRequestMessage();

httpClient.BaseAddress = new Uri(«https://api.parse.com/1/classes/» + category);

request.Method = new HttpMethod(«GET»);

request.Headers.Add(«X-Parse-Application-Id», «q8r9XYoXbEw1kXsWIXbyCNQm9ylcWfAS0fqlWWNx»);

request.Headers.Add(«X-Parse-REST-API-Key», «2nke5LSbXQmTiA9FaVytlBihjOOz4fPcoxjEHlee»);

var response = await httpClient.SendAsync(request);

var text = await response.Content.ReadAsStringAsync();

System.Diagnostics.Debug.WriteLine(text);

JObject results = JObject.Parse(text);

items = new List<Classes.Items>();

foreach (var result in results[«results»])

{

items.Add(new Classes.Items() { question = (string)result[«Question»], trueUnsver = (string)result[«trueUnsver»] });

}

Gen_Quest();

}

}

private async void Button_Click(object sender, RoutedEventArgs e)

{

if (string.Equals(txtBox.Text, items[randNumb].trueUnsver, StringComparison.CurrentCultureIgnoreCase))

{

MessageDialog md1 = new MessageDialog(«Это был правильный ответ!»);

await md1.ShowAsync();

txtBox.Text = ««;

countTrueUnsver++;

txtScore.Text = countTrueUnsver.ToString();

Gen_Quest();

}

else

{

MessageDialog md1 = new MessageDialog(«Вы отетили не верно! Правильный ответ: « + items[randNumb].trueUnsver);

await md1.ShowAsync();

MessageDialog md = new MessageDialog(«Игра окночена! Сохранить результат в рекордах?»);

UICommand cancelBtn = new UICommand(«Нет»);

cancelBtn.Invoked = cancelBtn_CLick;

UICommand yesBtn = new UICommand(«Да»);

yesBtn.Invoked = yesBtn_CLick;

md.Commands.Add(cancelBtn);

md.Commands.Add(yesBtn);

await md.ShowAsync();

}

}

private async void yesBtn_CLick(IUICommand command)

{

HttpClient httpClient = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage();

httpClient.BaseAddress = new Uri(«https://api.parse.com/1/classes/Record»);

httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(«application/json»));

string data = «{\»Name\»:\»« + ApplicationData.Current.LocalSettings.Values[«UserName»].ToString() + «\»,\»Score\»:» + countTrueUnsver + «,\»Mode\»:\»MyUnsver\»}»;

request.Headers.Add(«X-Parse-Application-Id», «q8r9XYoXbEw1kXsWIXbyCNQm9ylcWfAS0fqlWWNx»);

request.Headers.Add(«X-Parse-REST-API-Key», «2nke5LSbXQmTiA9FaVytlBihjOOz4fPcoxjEHlee»);

request.Method = new HttpMethod(«POST»);

// var response = await httpClient.PostAsync(request, new StringContent(data, System.Text.Encoding.UTF8, «application/json»));

request.Content = new StringContent(data, System.Text.Encoding.UTF8, «application/json»);

await httpClient.SendAsync(request);

//Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

//Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync(«Records.xml»);

//string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

//string newText = text.Replace(«</records>«, «\n<record>«

// + «\n<name>«

// + ApplicationData.Current.LocalSettings.Values[«UserName»].ToString()

// + «</name>«

// + «\n<score>«

// + countTrueUnsver

// + «</score>«

// + «\n</record>«

// + «\n</records>«);

//StorageFile sampleFile2 = await storageFolder.CreateFileAsync(«Records.xml», CreationCollisionOption.OpenIfExists);

//await Windows.Storage.FileIO.WriteTextAsync(sampleFile2, newText);

//System.Diagnostics.Debug.WriteLine(newText);

MessageDialog md = new MessageDialog(«Рекорд успешно сохранен!»);

await md.ShowAsync();

Frame.GoBack();

}

private void cancelBtn_CLick(IUICommand command)

{

Продовження дод. В

Frame.GoBack();

}

}

}

Клас OnePlayer.xaml.cs

using Newtonsoft.Json.Linq;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net.Http;

using System.Runtime.InteropServices.WindowsRuntime;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class OnePlayer : Page

{

List<Classes.Items> items;

int randNumb;

int countTrueUnsver = 0;

string category;

public OnePlayer()

{

this.InitializeComponent();

}

/// <summary>

Продовження дод. В

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

category = e.Parameter.ToString();

}

private void Gen_Quest()

Продовження дод. В

{

Random rand = new Random();

randNumb = rand.Next(0, items.Count);

txtQuestion.Text = items[randNumb].question;

btnUnsver1Text.Text = items[randNumb].unsver1;

btnUnsver2Text.Text = items[randNumb].unsver2;

btnUnsver3Text.Text = items[randNumb].unsver3;

btnUnsver4Text.Text = items[randNumb].unsver4;

}

private async void Page_Loaded(object sender, RoutedEventArgs e)

{

using (HttpClient httpClient = new HttpClient())

{

HttpRequestMessage request = new HttpRequestMessage();

httpClient.BaseAddress = new Uri(«https://api.parse.com/1/classes/» + category);

request.Method = new HttpMethod(«GET»);

request.Headers.Add(«X-Parse-Application-Id», «q8r9XYoXbEw1kXsWIXbyCNQm9ylcWfAS0fqlWWNx»);

request.Headers.Add(«X-Parse-REST-API-Key», «2nke5LSbXQmTiA9FaVytlBihjOOz4fPcoxjEHlee»);

var response = await httpClient.SendAsync(request);

var text = await response.Content.ReadAsStringAsync();

System.Diagnostics.Debug.WriteLine(text);

JObject results = JObject.Parse(text);

items = new List<Classes.Items>();

foreach (var result in results[«results»])

{

items.Add(new Classes.Items() { question = (string)result[«Question»], unsver1 = (string)result[«unsver1»], unsver2 = (string)result[«unsver2»], unsver3 = (string)result[«unsver3»], unsver4 = (string)result[«unsver4»], trueUnsver = (string)result[«trueUnsver»] });

//item.Add(new Item() { driveId = (string)result[«parentReference»][«driveId»], id = (string)result[«parentReference»][«id»], path = (string)result[«parentReference»][«path»] });

}

Gen_Quest();

}

}

private async void btnUnsverText_Tapped(object sender, TappedRoutedEventArgs e)

{

string unsver = (sender as TextBlock).Text.ToString();

if (unsver == items[randNumb].trueUnsver)

{

MessageDialog md1 = new MessageDialog(«Это был правильный ответ!»);

await md1.ShowAsync();

countTrueUnsver++;

txtScore.Text = countTrueUnsver.ToString();

Продовження дод. В

Gen_Quest();

}

else

{

MessageDialog md1 = new MessageDialog(«Вы отетили не верно! Правильный ответ: « + items[randNumb].trueUnsver);

await md1.ShowAsync();

MessageDialog md = new MessageDialog(«Игра окночена! Сохранить результат в рекордах?»);

UICommand cancelBtn = new UICommand(«Нет»);

cancelBtn.Invoked = cancelBtn_CLick;

UICommand yesBtn = new UICommand(«Да»);

yesBtn.Invoked = yesBtn_CLick;

md.Commands.Add(cancelBtn);

md.Commands.Add(yesBtn);

await md.ShowAsync();

}

}

private async void yesBtn_CLick(IUICommand command)

{

HttpClient httpClient = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage();

httpClient.BaseAddress = new Uri(«https://api.parse.com/1/classes/Record»);

httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(«application/json»));

string data = «{\»Name\»:\»« + ApplicationData.Current.LocalSettings.Values[«UserName»].ToString() + «\»,\»Score\»:» + countTrueUnsver + «,\»Mode\»:\»4btn\»}»;

request.Headers.Add(«X-Parse-Application-Id», «q8r9XYoXbEw1kXsWIXbyCNQm9ylcWfAS0fqlWWNx»);

request.Headers.Add(«X-Parse-REST-API-Key», «2nke5LSbXQmTiA9FaVytlBihjOOz4fPcoxjEHlee»);

request.Method = new HttpMethod(«POST»);

// var response = await httpClient.PostAsync(request, new StringContent(data, System.Text.Encoding.UTF8, «application/json»));

request.Content = new StringContent(data, System.Text.Encoding.UTF8, «application/json»);

await httpClient.SendAsync(request);

//var text = await response.Content.ReadAsStringAsync();

//Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

//Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync(«Records.xml»);

//string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

//string newText = text.Replace(«</records>«, «\n<record>«

// + «</name>«

// + «\n<score>«

// + countTrueUnsver

// + «</score>«

// + «\n</record>«

// + «\n</records>«);

//StorageFile sampleFile2 = await storageFolder.CreateFileAsync(«Records.xml», CreationCollisionOption.OpenIfExists);

//await Windows.Storage.FileIO.WriteTextAsync(sampleFile2, newText);

//System.Diagnostics.Debug.WriteLine(newText);

MessageDialog md = new MessageDialog(«Рекорд успешно сохранен!»);

await md.ShowAsync();

Frame.GoBack();

}

private void cancelBtn_CLick(IUICommand command)

{

Frame.GoBack();

}

}

}

Клас Menu.xaml.cs

using Newtonsoft.Json.Linq;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net.Http;

using System.Runtime.InteropServices.WindowsRuntime;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class Menu : Page

{

List<Classes.Items> items;

Продовження дод. В

bool playerAdverPanelStatus = false;

string category = null;

public Menu()

{

this.InitializeComponent();

}

/// <summary>

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

}

private void goBack_click(object sender, TappedRoutedEventArgs e)

{

Frame.GoBack();

}

private void Page_Loaded(object sender, RoutedEventArgs e)

{

txtPlayerName.Text = ApplicationData.Current.LocalSettings.Values[«UserName»].ToString();

comboBox.SelectedItem = «sda»;

}

private void btnOnePlayer_Click(object sender, TappedRoutedEventArgs e)

{

if (playerAdverPanelStatus == false)

{

advencedPanelForOnePlayer.Visibility = Windows.UI.Xaml.Visibility.Visible;

playerAdverPanelStatus = true;

}

else

{

advencedPanelForOnePlayer.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

playerAdverPanelStatus = false;

}

}

private async void btnChooseUnsver_Click(object sender, TappedRoutedEventArgs e)

{

try

{

if (!string.IsNullOrEmpty(comboBox.SelectedItem.ToString()))

{

Frame.Navigate(typeof(OnePlayer), category);

}

}

catch

{

MessageDialog md = new MessageDialog(«Пожалуйста, выберите категорию!»);

md.ShowAsync();

Продовження дод. В

}

}

private void btnRecord_Click(object sender, TappedRoutedEventArgs e)

{

Frame.Navigate(typeof(Records));

}

private async void btnYourUnsver_Click(object sender, TappedRoutedEventArgs e)

{

try

{

if (!string.IsNullOrEmpty(comboBox.SelectedItem.ToString()))

{

Frame.Navigate(typeof(OnePlayer2), category);

}

}

catch

{

MessageDialog md = new MessageDialog(«Пожалуйста, выберите категорию!»);

md.ShowAsync();

}

}

private async void btnTwoPlayer_Click(object sender, TappedRoutedEventArgs e)

{

try

{

if (!string.IsNullOrEmpty(comboBox.SelectedItem.ToString()))

{

Frame.Navigate(typeof(TwoPlayer), category);

}

}

catch

{

MessageDialog md = new MessageDialog(«Пожалуйста, выберите категорию!»);

md.ShowAsync();

}

}

private void cmbBoxTime_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

switch(((ComboBoxItem)comboBox.SelectedItem).Content.ToString())

{

case «Спорт»: category = «Sport»; break;

case «Животные»: category = «Animals»; break;

}

}

}

}

Клас MainPage.xaml.cs

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Runtime.InteropServices.WindowsRuntime;

using System.Xml.Linq;

Продовження дод. В

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.Phone.UI.Input;

using Windows.Storage;

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.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=391641

namespace Quiz

{

/// <summary>

/// An empty page that can be used on its own or navigated to within a Frame.

/// </summary>

public sealed partial class MainPage : Page

{

Classes.User[] com;

public MainPage()

{

this.InitializeComponent();

this.NavigationCacheMode = NavigationCacheMode.Required;

HardwareButtons.BackPressed += HardwareButtons_BackPressed;

hideStatusBar();

}

async void hideStatusBar()

{

await Windows.UI.ViewManagement.StatusBar.GetForCurrentView().HideAsync();

}

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)

{

if (Frame.CanGoBack)

{

e.Handled = true;

Frame.GoBack();

}

else

Application.Current.Exit();

}

/// <summary>

/// Invoked when this page is about to be displayed in a Frame.

/// </summary>

/// <param name=«e»>Event data that describes how this page was reached.

/// This parameter is typically used to configure the page.</param>

protected override void OnNavigatedTo(NavigationEventArgs e)

{

// TODO: Prepare page for display here.

// TODO: If your application contains multiple pages, ensure that you are

Продовження дод. В

// handling the hardware Back button by registering for the

// Windows.Phone.UI.Input.HardwareButtons.BackPressed event.

// If you are using the NavigationHelper provided by some templates,

// this event is handled for you.

}

private async void Page_Loaded(object sender, RoutedEventArgs e)

{

try

{

StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;

StorageFile sampleFile2 = await folder.CreateFileAsync(«Users.xml», CreationCollisionOption.FailIfExists);

string text = «<?xml version=\»1.0\» encoding=\»utf-8\» ?>«

+ «\n<users>«

+ «\n</users>«;

await Windows.Storage.FileIO.WriteTextAsync(sampleFile2, text.ToString());

}

catch

{

}

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

Windows.Storage.StorageFile sampleFile = await storageFolder.GetFileAsync(«Users.xml»);

string users_text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

XDocument xDoc = XDocument.Parse(users_text);

com = xDoc.Root.Elements(«user»).Select(p =>

{

return new Classes.User()

{

login = p.Element(«login»).Value,

pass = p.Element(«pass»).Value

};

}).ToArray();

}

private void btnRegist_Click(object sender, RoutedEventArgs e)

{

Frame.Navigate(typeof(Registration));

}

private async void btnAouth_Click(object sender, RoutedEventArgs e)

{

MessageDialog md;

if (string.IsNullOrWhiteSpace(txtLogin.Text) || string.IsNullOrWhiteSpace(txtPass.Password))

{

Продовження дод. В

md = new MessageDialog(«Пожалуйста заполните все поля!»);

await md.ShowAsync();

return;

}

for (int i = 0; i < com.Length; i++)

{

if (string.Equals(txtLogin.Text, com[i].login, StringComparison.CurrentCultureIgnoreCase) && string.Equals(txtPass.Password, com[i].pass, StringComparison.CurrentCultureIgnoreCase))

{

ApplicationData.Current.LocalSettings.Values[«UserName»] = com[i].login;

Frame.Navigate(typeof(Menu));

return;

}

}

md = new MessageDialog(«Неправильный логин или пароль!»);

await md.ShowAsync();

}

}

}

Клас Items.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Quiz.Classes

{

public class Items

{

public string question { get; set; }

public string unsver1 { get; set; }

public string unsver2 { get; set; }

public string unsver3 { get; set; }

public string unsver4 { get; set; }

public string trueUnsver { get; set; }

}

}

Клас Record.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Quiz.Classes

{

public class Record

{

Закінчення дод. В

public string name { get; set; }

public string score { get; set; }

public string mode { get; set; }

}

}

Клас User.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Quiz.Classes

{

public class User

{

public string login { get; set; }

public string pass { get; set; }

}

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.