// иллюстрация графических функций

#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>

// макроопределение, ранжирующее величину, возвращаемую
// генератором случайных чисел (rand) в интервале от  0
// до max

#define random(max) (rand() % (int)((max)+1))


void main()
{
	short  x, y;
	short  color;
	struct videoconfig vc;

	// устанавливаем графический режим с максимальным числом цветов

	if(!_setvideomode(_MAXCOLORMODE)) {
		puts("Видиоадаптер не поддерживает графический режим.");
		exit(1);
	}

	// получаем информацию о конфигурации видиосимтемы и о
	// установленном режиме работы видиоадаптера

	_getvideoconfig(&vc);

	while(!kbhit()) {

		// устанавливаем произвольный допустимый цвет, который
		// используется при изображении графических объектов

		_setcolor((short)random(vc.numcolors));

		// выбираем произвольную точку экрана - (x,y)

		x = (short)random(vc.numxpixels), y = (short)random(vc.numypixels);

		// рисуем закрашенный и незакрашенный прямоугольники

		_rectangle(_GFILLINTERIOR, x + 30, y + 40, x, y);
		_rectangle(_GBORDER,       x + 40, y + 30, x, y);
	}
	getch();

	// помещаем текущую точку в центр экрана

	_moveto(vc.numxpixels/2, vc.numypixels/2);

	while(!kbhit()) {
		_setcolor((short)random(vc.numcolors));
		x = (short)random(vc.numxpixels), y = (short)random(vc.numypixels);

		// рисуем линию из центра экрана в произвольную точку экрана

		_lineto(x, y);
		_moveto(vc.numxpixels/2, vc.numypixels/2);
	}
	getch();

	// устанавливаем режим видиоадаптера, принятый по умолчанию

	_setvideomode(_DEFAULTMODE);
}

