Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
29.03.2015
Размер:
29.08 Кб
Скачать

Федеральное агентство по образованию

Пермский государственный технический университет

Кафедра автоматики и телемеханики

Лабораторная работа №3 По предмету: «Программирование и основы алгоритмизации» Тема: «РАБОТА В ГРАФИЧЕСКОМ РЕЖИМЕ»

Выполнил ст. гр. ТК-11-1бзу

Бурылов С.В.

Проверил: доцент кафедры АТ

Кавалеров М.В.

Пермь 2012

Цель работы

Цель работы: получение навыков программирования на языке Си применительно к работе в графическом режиме.

Задание

При запуске программе должен выполнятся переход в графический режим. При этом в случайном месте экрана со случайным цветом должны быть выведены инициалы (первые буквы фамилии, имени, отчества) студента, выполняющего данное задание. Буквы должны быть нарисованы с использованием линий, эллипсов, дуг эллипсов. Буквы должны располагаться на одной горизонтальной линии. Расстояния между буквами не должны превышать ширину этих букв. С помощью клавиш со стрелками должно выполняться совместное перемещение букв по экрану. При этом нельзя, чтобы хотя бы часть одной из букв могла оказаться за пределами экрана в ходе подобных перемещений. При нажатии клавиши «пробел» должен изменяться цвет букв. Можно использовать только цвета с кодами от 9 до 15. Должна быть возможность перебора всех указанных цветов. Кроме того, при нажатии клавиш F1, F2, F3, F4, F5, F6, F7, F8 должны соответственно выводится на экран точка, прямоугольник, окружность, линия, заполненный прямоугольник, заполненная окружность, эллипс, заполненный эллипс. При этом для каждого из указанных графических элементов должны задаваться случайные координаты, размеры и цвет. Ни один из указанных графических элементов не должен перекрывать буквы, то есть буквы всегда должны располагаться поверх остальных графических элементов. Выход из программы должен выполняться по нажатию клавиши Esc.

Исходный текст программы

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <time.h>

int maxx = 560;

int maxy = 450;

int x0, y0, c;

int f1x, f1y, f1c;

int f2x1, f2y1, f2x2, f2y2, f2c;

int f3x, f3y, f3r, f3c;

int f4x1, f4y1, f4x2, f4y2, f4c;

int f5x1, f5y1, f5x2, f5y2, f5c;

int f6x, f6y, f6r, f6c;

int f7x, f7y, f7rx, f7ry, f7c;

int f8x, f8y, f8rx, f8ry, f8c;

int bdot, brect, bcirc, bline, bfrect, bfcirc, bellip, bfellip;

void drawletters(int x0, int y0, int c)

{

setcolor(c);

line(x0, y0, x0, y0+30);

line(x0, y0, x0 + 20, y0);

arc(x0+8, y0+20, 230, 135, 10);

ellipse(x0+40, y0+15, 45, 315, 10, 15);

line(x0+60, y0, x0+60, y0+30);

arc(x0+65, y0+5, 230, 135, 7);

arc(x0+67, y0+20, 230, 135, 10);

}

void redraw(int p)

{

if (bdot) putpixel(f1x, f1y, p?f1c:0);

setcolor(p?f2c:0);

if (brect) rectangle(f2x1, f2y1, f2x2, f2y2);

setcolor(p?f3c:0);

if (bcirc) circle(f3x, f3y, f3r);

setcolor(p?f4c:0);

if (bline) line(f4x1, f4y1, f4x2, f4y2);

setfillstyle(SOLID_FILL, p?f5c:0);

if (bfrect) bar(f5x1, f5y1, f5x2, f5y2);

setcolor(p?f6c:0);

setfillstyle(SOLID_FILL, p?f6c:0);

if (bfcirc) pieslice(f6x, f6y, 0, 360, f6r);

setcolor(p?f7c:0);

if (bellip) ellipse(f7x, f7y, 0, 360, f7rx, f7ry);

setcolor(p?f8c:0);

setfillstyle(SOLID_FILL, p?f8c:0);

if (bfellip) fillellipse(f8x, f8y, f8rx, f8ry);

drawletters(x0,y0, p?c:0);

}

int main(int argc, char* argv[])

{

time_t t;

time(&t);

srand((unsigned) time(&t));

srand(random(RAND_MAX));

int driver = VGA;

int mode = VGAHI;

initgraph(&driver, &mode, "");

x0 = random(maxx);

y0 = random(maxy);

c = random (8)+8;

redraw(1);

int key = 0;

while (key != 27) {

key = getch();

if (key == 0) key = getch();

switch(key) {

case 75:

redraw(0);

x0-=5;

if (x0<0) x0=0;

redraw(1);

break;

case 77:

redraw(0);

x0+=5;

if (x0>maxx) x0=maxx;

redraw(1);

break;

case 72:

redraw(0);

y0-=5;

if (y0<0) y0=0;

redraw(1);

break;

case 80:

redraw(0);

y0+=5;

if (y0>maxy) y0=maxy;

redraw(1);

break;

case 32:

c = random(8)+8;

redraw(1);

break;

case 59:

redraw(0);

bdot = !bdot;

f1x = random(640);

f1y = random(480);

f1c = random(8)+8;

redraw(1);

break;

case 60:

redraw(0);

brect = !brect;

f2x1 = random(640);

f2y1 = random(480);

f2x2 = random(640);

f2y2 = random(480);

f2c = random(8)+8;

redraw(1);

break;

case 61:

redraw(0);

bcirc = !bcirc;

f3x = random(640-100)+50;

f3y = random(480-100)+50;

f3r = random(50);

f3c = random(8)+8;

redraw(1);

break;

case 62:

redraw(0);

bline = !bline;

f4x1 = random(640);

f4y1 = random(480);

f4x2 = random(640);

f4y2 = random(480);

f4c = random(8)+8;

redraw(1);

break;

case 63:

redraw(0);

bfrect = !bfrect;

f5x1 = random(640);

f5y1 = random(480);

f5x2 = random(640);

f5y2 = random(480);

f5c = random(8)+8;

redraw(1);

break;

case 64:

redraw(0);

bfcirc = !bfcirc;

f6x = random(640-100)+50;

f6y = random(480-100)+50;

f6r = random(50);

f6c = random(8)+8;

redraw(1);

break;

case 65:

redraw(0);

bellip = !bellip;

f7x = random(640-100)+50;

f7y = random(480-100)+50;

f7rx = random(50);

f7ry = random(50);

f7c = random(8)+8;

redraw(1);

break;

case 66:

redraw(0);

bfellip = !bfellip;

f8x = random(640-100)+50;

f8y = random(480-100)+50;

f8rx = random(50);

f8ry = random(50);

f8c = random(8)+8;

redraw(1);

break;

}

}

closegraph();

return 0;

}

Соседние файлы в папке l3