Графика - перевести код с Pascal - C (СИ)
Формулировка задачи:
Здраствуйте! Помогите пожалуйста перевести данную задачу ( с Pascal на C ).
uses graphABC; var x,y:integer; procedure KeyDown(Key: integer); begin case Key of VK_Left: if x>1 then x:=x-1; VK_Right: if x<windowwidth-1 then x:=x+1; VK_Up: if y>1 then y:=y-1; VK_Down:if y<windowheight-1 then y:=y+1; end; end; begin x:=80; y:=80; line(0,y,windowwidth,y); line(x,0,x,windowheight); lockdrawing; repeat clearwindow; OnKeyDown:=KeyDown; line(0,y,windowwidth,y); line(x,0,x,windowheight); redraw until false end.
Решение задачи: «Графика - перевести код с Pascal»
textual
Листинг программы
#include <graphics.h>
void Move(int* x, int* y, int key)
{
switch (key)
{
case KEY_LEFT:
if (*x > 0)
{
(*x)--;
}
break;
case KEY_RIGHT:
if (*x < getmaxx())
{
(*x)++;
}
break;
case KEY_UP:
if (*y > 0)
{
(*y)--;
}
break;
case KEY_DOWN:
if (*y < getmaxy())
{
(*y)++;
}
break;
}
}
void Redraw(int x, int y)
{
clearviewport();
line(0, y, getmaxx(), y);
line(x, 0, x, getmaxy());
}
int main()
{
int driver = DETECT, mode = 0;
int x = 80, y = 80;
int key;
initgraph(&driver, &mode, "");
Redraw(x, y);
while ((key = readkey()) != 27) // Press 'ESC' for exit
{
Move(&x, &y, key);
Redraw(x, y);
}
closegraph();
return 0;
}
Объяснение кода листинга программы
- #include
— подключает графическую библиотеку - void Move(int x, int y, int key) — функция для обработки нажатий клавиш
- switch (key) — оператор выбора (switch) для определения нажатой клавиши
- case KEY_LEFT: — один из вариантов выбора (case) для обработки нажатия клавиши
влево - *if (x > 0)** — условие, что значение переменной
xбольше нуля - { — начало блока кода для обработки нажатия клавиши
влево - *(x)--;** — уменьшение значения переменной
xна единицу - break; — выход из оператора выбора (switch)
- case KEY_RIGHT: — один из вариантов выбора (case) для обработки нажатия клавиши
вправо - *if (x < getmaxx())** — условие, что значение переменной
xменьше максимального значения экрана по горизонтали - { — начало блока кода для обработки нажатия клавиши
вправо - *(x)++;** — увеличение значения переменной
xна единицу - break; — выход из оператора выбора (switch)
- case KEY_UP: — один из вариантов выбора (case) для обработки нажатия клавиши
вверх - *if (y > 0)** — условие, что значение переменной
yбольше нуля - { — начало блока кода для обработки нажатия клавиши
вверх - *(y)--;** — уменьшение значения переменной
yна единицу - break; — выход из оператора выбора (switch)
- case KEY_DOWN: — один из вариантов выбора (case) для обработки нажатия клавиши
вниз - *if (y < getmaxy())** — условие, что значение переменной
yменьше максимального значения экрана по вертикали - { — начало блока кода для обработки нажатия клавиши
вниз - *(y)++;** — увеличение значения переменной
yна единицу - break; — выход из оператора выбора (switch)
- } — конец блока кода для обработки нажатия клавиши
вниз - int main() — функция, с которой начинается выполнение любой программы
- { — начало блока кода функции main
- int driver = DETECT, mode = 0; — инициализация переменных для настройки графического режима
- int x = 80, y = 80; — инициализация переменных для хранения координат курсора
- int key; — инициализация переменной для хранения нажатой клавиши
- initgraph(&driver, &mode, ``); — вызов функции для инициализации графического режима
- Redraw(x, y); — вызов функции для отображения курсора на экране
- while ((key = readkey()) != 27) — цикл, выполняющийся до нажатия клавиши
ESC - { — начало блока кода цикла
- Move(&x, &y, key); — вызов функции для обработки нажатия клавиши и изменения координат курсора
- Redraw(x, y); — вызов функции для обновления изображения курсора на экране
- } — конец блока кода цикла
- closegraph(); — вызов функции для завершения работы с графическим режимом
- return 0; — возврат значения, означающего успешный конец работы программы
- } — конец функции main
- } — конец блока кода функции Move
- } — конец блока кода функции Redraw
- } — конец блока кода функции main