9. Работа с текстом

Занятие 9


Это надо знать

Добавим в наш мультфильм титры в начале и в конце мультфильма.

Для рисования текста будем использовать команду  из библиотеки TXLib:

txTextOut (x, y, text);

Параметры:

x       -  Х-координата начальной точки текста
y       -  Y-координата начальной точки текста
text   -  текст, записанный в кавычках

Пример:

txTextOut (50, 200, "Похождения лягушки");

Для изменения цвета текста используется команда из библиотеки TXLib:

txSetColor (цвет);

Пример:

txSetColor (TX_RED);

Для изменения размера шрифта, начертания, наклона используется команда из библиотеки TXLib:

txSelectFont (name, sizeY, sizeX, bold, italic,underline, strikeout, angle);

Параметры:

name          - Название шрифта ("Arial", "Comic Sans MS", ...)
sizeY          - Высота букв
sizeX          - Ширина букв
bold            - Жирность шрифта (false или true)
italic           - Курсив (false или true)
underlin     - Подчеркивание (false или true)
strikeout    - Зачеркивание (false или true)
angle          - Угол поворота текста (в градусах) 

Примеры:

txSelectFont ("Comic Sans MS", 40);    // выбран шрифт "Comic Sans MS" и высота букв равна 40.

txSelectFont ("Arial", 100, 10, false, true, false, true, 15);  // выбран шрифт "Arial", высота букв равна 100, ширина - 10, шрифт нежирный, с наклоном, не подчеркнут, зачеркнут и написан под углом 15 градусов.

Титры

Напишем функцию, которая будет рисовать титры в начале мультфильма.

Назовем функцию OpenTitles.

void OpenTitles()
    {
    txSetFillColor (RGB (190, 250, 115));
    txClear();

    txSetColor (RGB (150, 35, 135));
    txSelectFont ("Arial", 100, 25, 5);
    txTextOut (100, 150, "Приключения лягушки");

    txSetColor (RGB (70, 50, 210));
    txSelectFont ("Calibri", 60, 15, true, false, false, false, 30);
    txTextOut (150, 350, "Автор: Комар");

    txSetColor (RGB (225, 60, 115));
    txSelectFont ("Comic Sans MS", 50, 16, false, true, false, false, -10);
    txTextOut (350, 350, "Продюсеры: Елки");

    txSleep (3000);
    }

Результат выполнения функции:



Движение титров

Если мы хотим, чтобы титры двигались снизу вверх, поместим команды рисования текста в цикл по переменной t, в котором в командах txTextOut будем изменять значение переменной y от 700 до 0.

void OpenTitles()
    {
    int t = 0;
    int y = 700;

    while (t < 110)
        {
        txSetFillColor (RGB (190, 250, 115));
        txClear();

        txSetColor (RGB (150, 35, 135));
        txSelectFont ("Arial", 100, 25, 5);
        txTextOut (100, y, "Приключения лягушки");

        txSetColor (RGB (70, 50, 210));
        txSelectFont ("Calibri", 60, 15, true, false, false, false, 30);
        txTextOut (150, y + 200, "Автор: Комар");

        txSetColor (RGB (225, 60, 115));
        txSelectFont ("Comic Sans MS", 50, 16, false, true, false, false, -10);
        txTextOut (350, y + 200, "Продюссеры: Елки");

        y -= 10;
        t++;

        txSleep (50);
        }
    }

Диалог героев

Для вывода текста около героя воспользуемся функцией из библиотеки TXLib:
txDrawText (x0, y0, x1, y1, text, format);   //Рисует текст, размещенный в прямоугольной области.

Параметры:

x0          - X-координата верхнего левого угла области
y0          - Y-координата верхнего левого угла области
x1          - X-координата нижнего правого угла области
y1          - Y-координата нижнего правого угла области
text        - Текстовая строка
format   - DT_CENTER    - выравнивание по центру по горизонтали;  
                 DT_VCENTER - выравнивание по центру по вертикали;
                
Напишем функцию Dialog, которая будет выводить текст около героя.

void Dialog (int x, int y, char text[], COLORREF color)
    {
    txSetColor (color);
    txSelectFont ("Calibri",  20);
    txDrawText (x,  y,  x + 100,  y + 50,  text, DT_CENTER);
    }

Параметры:

х          - Х-координата начальной точки текста
у          - Y-координата начальной точки текста
text[]   - текст, записанный в кавычках
color   - цвет текста

Примеры:

Dialog (-35 + 2*t, 320 + 1*t, "Беги, лягушка,\n беги!", TX_RED);

Dialog (5 + 3*t, 315 + 2*t + 20*sin(t), "Прыг! Скок!", RGB ( 30, 190, 50));


Символы \n  обозначают переход на новую строку, т.е. текст, который стоит после этих символов будет записан с новой строки.


Создание фона мультфильма

Создадим новую функцию, которая будет отвечать за рисование фона.

Назовем функцию Background.

Параметры:

colorSky           - цвет неба
colorGround   -  цвет земли
amtTree           -  количество елок
t                         - время

void Background (COLORREF colorSky, COLORREF colorGround, int amtTree, int t)
    {
     txSetFillColor (colorSky);
     txClear();

     txSetFillColor (colorGround);
     txRectangle (0, 300, 800, 600);

     forest (50, 50, amtTree, t);
    }

Внесем изменения в рисование елок:
void forest (int x, int y, int amtTree, int t)
    {
    int step = 800/amtTree;

    while (x <= 800)
        {
        tree (x, y, 1, 1, t%7, t%7, RGB (145, 210, 80));
        x += step;
        }
    }

Вызывать функцию  Background будем внутри цикла, например:

void MoveMosquito()
    {
    int t = 0;

    while (t <= 160)
        {
        Background (RGB (190, 240, 240), RGB (200, 250, 200), 6, t);

        mosquito (100 + 5*t, 240, 1, 1, t%2, t%15 - 5, 1, RGB (190, 190, 190));
       
        t++;
        txSleep (80);
        }
     }

Пример

Мультфильм с титрами в начале и в конце, с диалогами героев.

Посмотреть текст программы

Результат работы программы

Домашнее задание

Дополнить ваш мультфильм титрами и диалогами героев.