5. Функции с параметрами

Занятие 5


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

На прошлом занятии мы использовали функции с параметрами, что позволило нам нарисовать несколько героев в различных местах. Но герои одинакового размера, цвета, т.е. они совершенно одинаковы. Сегодня мы рассмотрим как можно рисовать героев различными цветами, разных размеров, научимся опускать и поднимать руки, открывать и закрывать глаза и т.п.

Цвет

Для того, чтобы герои были нарисованы различными цветами, мы должны использовать параметр функции цвет.
Рассмотрим на примере самоката.

Опишем функцию:

void   scooter (int x, int y, COLORREF colorWheal, COLORREF colorFrame)

где COLORREF - тип, который описывает цвет;
       colorWheal   - имя переменной, которая задает цвет колеса;
       colorFrame   - имя переменной, которая задает цвет рамы самоката.

Команды функции, которые связаны с цветом:

    txSetColor       (colorFrame, 2);
    txSetFillColor (colorWheal );

Вызовем функцию:

    scooter (120, 300, TX_BLUE, TX_RED);   // самокат с красной рамой и синими колесами

    scooter (300, 400, RGB (240, 150, 35), TX_LIGHTBLUE);  // самокат с оранжевыми колесами и светло-синей рамой.

Размер по ширине и по высоте

Для того, чтобы изменить размер по высоте и ширине, необходимо числа, которые мы добавили к координатам опорной точки умножить на какое-то число. Если число будет больше нуля, но меньше единицы, то размер героя уменьшится, если больше 1 - увеличится.

Опишем функцию:

void scooter (int x, int y, COLORREF colorWheal, COLORREF colorFrame, double sizeX, double sizeY)

где double - тип, который указывает, что переменные могут быть целыми или дробными;
      sizeX    - имя переменной, которая задает коэффициент, который изменяет размер героя по ширине;
      sizeY    - имя переменной, которая задает коэффициент, который изменяет размер героя по высоте.

Команды функции, которые связаны с размером:

    txCircle (x -      5 * sizeX,  y + 45 * sizeY,  25 * sizeX);
    txCircle (x + 145 * sizeX,  y + 45 * sizeY,  25 * sizeX);

    txLine (x -    5 * sizeX,  y + 45 * sizeY,  x +   20 * sizeX,  y -  80 * sizeY);
    txLine (x -    5 * sizeX,  y -  70 * sizeY,  x +   40 * sizeX,  y -  90 * sizeY);
    txLine (x +   0 * sizeX,  y +   0 * sizeY,  x +   45 * sizeX,  y + 45 * sizeY);
    txLine (x + 45 * sizeX,  y + 45 * sizeY,  x + 145 * sizeX,  y + 45 * sizeY);

Вызовем функцию:

    scooter ( 30,  460,  TX_BLUE,   TX_RED,  1,  1);      // sizeX = 1 и sizeY = 1, следовательно, размер самоката не изменится

    scooter (420,  460,  RGB (240, 150, 35),  TX_LIGHTBLUE,  1.5,  2);     // sizeX = 1.5 и sizeY = 2, следовательно, размер самоката по ширине увеличится в полтора раза, по высоте -  в два раза.

Управление руками

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

В данном случае при подъеме руки координата у уменьшится на 100. Введем для левой руки параметр leftHand, тогда координаты руки будут (x + 100, y + 50 - leftHand). Аналогично для правой руки введем параметр rightHand.

Опишем функцию:

void frog (int x, int y, int leftHand, int rightHand)

Команды функции, которые связаны с рисованием рук лягушки:

 txLine (x -  100,  y + 50 - rightHand,  x -  45,  y + 0);
 txLine (x + 100,  y + 50 -   leftHand,  x + 45,  y + 0);

Вызовем функцию:

frog (105,  405,      0,    0);      // параметры leftHand = 0 и rightHand = 0, следовательно, руки не    поднимались и не опускались
frog (500,  455,  100,  -50);    // параметр leftHand = 100 - левая рука поднимется на 100 точек. Параметр  rightHand = -50 - правая рука опустится на 50 точек.

Пример

Введем параметры для функций:

Scooter:
    sizeX               -  задает коэффициент, который изменяет размер самоката по ширине;
    sizeY                задает коэффициент, который изменяет размер самоката по высоте;
    colorWheal    -  задает цвет колеса;
    colorFrame    -  задает цвет рамы самоката.

Frog:
    sizeX               -  задает коэффициент, который изменяет размер героя по ширине;
    sizeY                задает коэффициент, который изменяет размер героя по высоте;
    color                -  задает цвет лягушки;
    leftHand         -   задает число, на которое поднимается или опускается левая рука;
    rightHand      -   задает число, на которое поднимается или опускается правая рука.

Tree:
   sizeX               -  задает коэффициент, который изменяет размер елки по ширине;
   sizeY                задает коэффициент, который изменяет размер елки по высоте;
   color                -  задает цвет елки;
   leftEye            - задает перемещение левого зрачка;
   rightEye         - задает перемещение правого зрачка.

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

Результат выполнения программы



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

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