Автор: Пользователь скрыл имя, 26 Октября 2013 в 20:25, курсовая работа
Дана курсова робота розроблена для дисципліни «Кросплатформне програмування». Що ж таке крос-платформне програмування? Кросплатформне програмне забезпечення – це ПЗ, працююче більш ніж на одній апаратній платформі і / або операційній системі. Типовим прикладом є програмне забезпечення, призначене для роботи в операційних системах Linux і Windows одночасно.
Вступ 3
Розділ І. Аналіз предметної області 4
Розділ ІІ. Теоретичні відомості 5
• Знайомство з Juce 5
• Візуальний редактор компонувань The Jucer 7
Розділ ІІІ. Створення додатку 14
• Розробка інтерфейсу 14
• Приклад реалізації роботи додатку 17
Висновок 22
Список використаних джерел 23
Додаток 1. Текст програми 24
//В конструкторе // Первый виджет может иметь размер от 50 до 100 пикселов, // предпочитаемый размер — 60% от размера контейнера myLayout.setItemLayout(0,50, // Второй виджет может иметь размер от 20% до 60% от размера // контейнера, предпочитаемый размер — 50 пикселов myLayout.setItemLayout(1,-0.2, // В методе resized() // Создаем массив указателей
на виджеты, которые хотим Component* comps[] = { myComp1, myComp2 }; // Размещаем два компонента
по вертикали в текущем myLayout.layOutComponents (comps, 2, 0, 0, getWidth(), ↵ getHeight(),true); |
Якщо в Qt або GTK віджет просто додається в кайзер в конструкторі, а розміри є властивостями самого віджета, то в Juce все складніше. Потрібно точно знати кількість віджетів в сайзере і їх бажані розміри, а в методі resized () доводиться створювати тимчасовий масив покажчиків. Клас StretchableLayoutManager недоступний у візуальному редакторі, що робить його застосування ще більш трудомістким. Тим не менш, навіть такий складний у застосуванні сайзер краще, ніж нічого.
The Jucer дозволяє дуже просто
і елегантно працювати з будь-
в програмі графічний файл juce.png. Переходимо
на вкладку Resources і додаємо цей файл у список.
при збереженні бінарні дані з цього файлу
переводяться у форму звичайного масиву
С і безпосередньо вставляються в код.
Відповідний рядок має вигляд:
static const unsigned char ↵ resource _ MyMainComponent _ juce _ png[] = { 137,80,78,71,... |
У класі автоматично створюється змінна cachedImage_juce_png типу Image *, яка ініціалізується даними цього масиву в конструкторі. Її можна використовувати в коді для доступу до ресурсу. Весь службовий код для роботи з такими ресурсами (а його чимало) створюється автоматично.
Маючи набір графічних файлів, завантажених у вигляді ресурсів, можна переходити до однієї з найбільш вражаючих особливостей The Jucer - редактору фонової графіки (див. рис.2.3). Перейдемо на вкладку Graphics. Тут можна редагувати фон нашого компонента, що відображається під віджетами. З контекстного меню можна додати різні геометричні примітиви, криві, малюнки і текст. Для кожного компонента можна вибрати заливку кольором або у вигляді лінійного або радіального градієнта, товщину і колір ліній і т.п. Контрольні точки градієнтів і кривих можна перетягувати мишею. Також можна задавати прозорість для всіх елементів, заповнювати фігури зображеннями і навіть перетворювати текст в криві. Редактор гранично зрозумілий і дуже приємний в роботі. Його, звичайно, не можна порівнювати з повновагими векторними редакторами зразок Inkscape, але зі своєю функцією створення гарного фону для віджетів він справляється на відмінно.
Рис.2.3. Редагування фонової графіки в The Jucer
Код малювання поміщається в метод paint () нашого класу і, при необхідності, в метод resized (). Вивчивши його, легко зрозуміти логіку роботи операцій малювання в Juce. Зокрема, чітко видно, як The Jucer бере на себе всю чорну роботу по масштабуванню і розміщенню примітивів при зміні розмірів вікна.
Розділ ІІІ. Створення додатку
Розробка інтерфейсу
Запускаємо The Jucer і вибираємо у меню File> New Component. З'явиться віджет з вкладками, що відображає інформацію про створюваний компонент. На вкладці Class в списку General class settings задаємо ім'я класу компоненту (class name), назву компонента (component name), якщо воно відрізнятиметься від назви класу, батьківський клас / класи (parent classes), параметри конструктора (constructor params), початкові розміри віджета (initial width і initial height), а також вибрати у випадаючому списку fixed size, чи будуть розміри віджета підлаштовуватися під розміри компонента-контейнера або головного вікна (Resize component to fit workspace) або ж створюваний компонент буде з незмінними розмірами (рис.3.1).
Рис.3.1. Програма The Jucer. Редагування
властивостей
класу компонента
На вкладці Subcomponents спроектовуємо зовнішній вигляд нашого компонента, розміщуючи на його поверхні різні віджети і редагуючи їх властивості у списку праворуч (рис.3.2). Біле поле з координатною сіткою – це і є заготовка нашого майбутнього компонента, на який можна додавати стандартні або призначені для користувача віджети за допомогою контекстного меню. У ньому доступні наступні стандартні компоненти: Text Button (кнопка з текстом), Toggle Button (радіокнопка), Slider (повзунок), Label (ярлик), Text Editor (поле введення), Combo Box (випадаючий список), Group Box (груповий блок ), Hyperlink Button ("кнопка" - гіперпосилання), Viewport (полі перегляду), Tabbed Component (компонент з вкладками), Tree View (деревоподібний список), Image Button (кнопка з зображенням). Крім того, контекстне меню дозволяє редагувати колір фону віджета (у меню пункт "Edit background graphics").
Рис.3.2. Редагування зовнішнього вигляду компоненту в програмі The Jucer
Отже, створюємо головну форму яка складається з 4-х TextButton та 1-го Label (це для 1го запитання). Дублюємо елементи ще для 4-х запитань. При цьому вони накладаються один на одного. На про дубльовані елементи встановлюємо setVisible(false); - таким чином вони з’являються лише тоді коли буде потрібно.
Наприклад, при правильній відповіді на перше запитання елементи які йому відповідають автоматично стають setVisible(false), а елементи які відповідають за друге запитання setVisible(true).
Створюємо «інформативну» форму, яка складається з TextButton (двох дубльованих, вони накладені одна на одну) та TextEditor-а.
Продубльовані клавіші мають 2 функції:
Зміст TextEditor-а
залежить від правильності відповідей.
Якщо відповідати вірно він показує скільки
коштів зараховано в «Банк» гравця. Якщо
відповідь невірна з’являється повідомлення
“You loseL” ,що свідчить про те, що гравець
програв і гра завершена.
Приклад реалізації роботи додатку
Висновок
Juce являє собою
The Jucer дозволяє редагувати
властивості компонентів й
В даній курсовій роботі за допомогою кросплатформної бібліотеки Juce на мові С++ було створено платформнонезалежний додаток – гра «Перший мільйон». Для коректної роботи був використаний метод setVisible (bool shouldBeVisible), що дозволяє відображати або ховати вікно для доступу користувача, та стандартні віджети такі як Text Editor (поле введення), Text Button (кнопка з текстом) та Label (ярлик).
Список використаних джерел
Додаток 1. Текст програми
TApplication.cpp
#include "TApplication.h"
#include "TMainForm.h"
#include "TThirdForm.h"
//----------------------------
TApplication::TApplication() : pMainWindow(0), pThirdWindow(0)//
{
}
//----------------------------
TApplication::~TApplication()
{
}
//----------------------------
void TApplication::initialise(const String& sCommandLine)
{
pMainWindow = new TMainForm(); // Создаём главное окно программы
}
//----------------------------
void TApplication::shutdown()
{
if(pMainWindow != 0) delete pMainWindow;
//if(pSecondWindow != 0) delete pSecondWindow;
if(pThirdWindow != 0) delete pThirdWindow;
}
//----------------------------
void TApplication::
{
quit(); // Завершаем работу приложения
}
//----------------------------
const String TApplication::
{
// Задаём имя приложения
// (будет отображаться в заголовке главного окна)
return "Nika";
}
//----------------------------
const String TApplication::
{
// Получаем версию приложения из опций проекта
return ProjectInfo::versionString;
}
//----------------------------
bool TApplication::
{
// Запрещаем запуск более одного экземпляра приложения
return false;
}
//----------------------------
TCentralComponent.cpp
#include "TMainForm.h"
#include "TCentralComponent.h"
#include "TThirdComponent.h"
#include "TThirdForm.h"
#define tr(s) String::fromUTF8(s)
//[MiscUserDefs] You can add your own user definitions and misc code here...
//[/MiscUserDefs]
//============================
TCentralComponent::
: label (0),
label2 (0),
label3 (0),
label4 (0),
label5 (0),
textButton (0),
textButton2 (0),
textButton3 (0),
textButton4 (0),
textButton5 (0),
textButton6 (0),
textButton7 (0),
textButton8 (0),
textButton9 (0),
textButton10 (0),
textButton11 (0),
textButton12 (0),
textButton13 (0),
textButton14 (0),
textButton15 (0),
textButton16 (0),
textButton17 (0),
textButton18 (0),
textButton19 (0),
textButton20 (0),
cachedImage__1_png3 (0)
{
//pSecondWindow = new TSecondForm();
//pSecondWindow->setVisible(
pThirdWindow = new TThirdForm();
pThirdWindow->setVisible(false
addAndMakeVisible (label = new Label (L" new label",
label->setFont (Font (L"Times New Roman", 19.6000f, Font::bold));
label->setJustificationType (Justification::centred);
label->setEditable (false, false, false);
label->setColour (Label::textColourId, Colour (0xfffffefe));
label->setColour (Label::outlineColourId, Colour (0x0));
label->setColour (TextEditor::textColourId, Colours::black);
label->setColour (TextEditor::
addAndMakeVisible (label2 = new Label (L" new label2",
label2->setFont (Font (L"Times New Roman", 19.6000f, Font::bold));
label2->setJustificationType (Justification::centred);
label2->setEditable (false, false, false);
label2->setColour (Label::textColourId, Colour (0xfffffefe));
label2->setColour (Label::outlineColourId, Colour (0x0));
label2->setColour (TextEditor::textColourId, Colours::black);
label2->setColour (TextEditor::
label2->setVisible(false);
addAndMakeVisible (label3 = new Label (L" new label2",
Информация о работе Розроблення додатка – гра «Перший мільйон»