Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛАБ 4 / LAB-4.2(var 12)

.cpp
Скачиваний:
17
Добавлен:
04.11.2020
Размер:
5.15 Кб
Скачать
#include <bios.h>
#include <stdio.h>
#include <conio.h>

int pressed()    // какая кнопка нажата
{
	union REGS r; 
	r.h.ah = 0x0B;	// AH=0Bh проверка состояния стандартного ввода.
					//	Возвращает в регистре AL значение FFh,
					// если буфер клавиатуры не пуст, и 0 в противном случае.
	int86(0x21, &r, &r);
	return r.h.al;
}
int whatpresed()   // проверка на нажатие кнопок вообще
{
	union REGS r;
	r.h.ah = 0x7; // AH=07h - ввод с консоли с ожиданием без "эха" на экран
				  // ASCII-код прочитанного символа возвращается в AL.
	
	int86(0x21, &r, &r);  // int int86(int intnum, union REGS *regsin, union REGS *regsout)
							  // int int86(номер прерывания, откуда , куда)
							  // является указателем на структуру, в которую записываются
							  // возвращаемые значения регистров
							  // int86 выполняeт  программное  прерывание 
	return r.h.al; / на этом этапе просто возвращается ASCII код считонного символа
}

int main()
{
	clrscr();			//  очистка экрана, закоментируй эту строку, запускай, смотри что происходит, поймешь зачем она
	char Pressed = 0;		// переменная для состояния кнопки (нажата?/нет?/какая нажата?)
	window(25, 10, 55, 20);	// задаем окно программы в консоли, первые два числа 25,10 - левый вверхний угол (координаты x,y)
							// вторые два числа 55,20 - правый нижний угол (координаты x,y)
	textbackground(6);	//	цвет заданного окна ВЫБИРАЙ САМ
	textcolor(2);		//	цвет символа/текста	ВЫБИРАЙ САМ
	/*
	коды цветов
	BLACK			черный	 			0 
	BLUE 			синий 				1
	GREEN 			зеленый 			2 
	CYAN 			сине-зеленый 		3 
	RED 			красный				4 
	MAGENTA 		красно-синий 		5
	BROWN	 		коричневый 			6
	LIGHTGRAY 		светло-серый 		7 
	DARKGRAY 	 	темно-серый 		8 
	LIGHTBLUE 	 	ярко-синий 			9 
	LIGHTGREEN		ярко-зеленый		10
	LIGHTCYAN	  	яркий сине-зеленый	11
	LIGHTRED 		ярко-красный 		12 
	LIGHTMAGENTA	яркий красно-синий	13
	YELLOW	 		желтый	 			14
	WHITE  			белый 				15
	*/
	
	clrscr();			// снова очистка, но теперь заданного окна

	int SETTEDWINDOWS_W = 31;		// ширинa  //что за 31?  это Xmax - Xmin + 1 , т.е. 55-25+1
	int SETTEDWINDOWS_H = 11;		// и высотa окна (значение сколько пикселов) //Ymax - Ymin + 1, т.е. 20-10+1

	int curX = 1, curY = 1;					// задали текущее местоположение курсора (мигающая штука _ )
	gotoxy(curX, curY);				
	
	printf("*");			// печатали символ *
	gotoxy(curX, curY);		// задали текущее местоположение курсора в изначальное местоположение чтоб потом стереть
	
	while(Pressed != 27) // пока не нажата ESC
	{
		Pressed = 0;
		unsigned int temp = 0;
		while(pressed() == 0);	// пока НЕ нажата никакая клавиша вообще
			temp = whatpresed(); 	// возвращает нажатую
		Pressed = temp%256;		// перевод возвращенного значения в char, чтоб потом сравнить с табличными значениями клавиш
		if(Pressed == 0)			// если до сих пор НЕ нажата никакая клавиша
			Pressed = temp/256;		// то значение клавиши нулевое
		clrscr();				// очиска экрана, ...почему? Потому что нужно переместить символ,
								//   а переместить означает удалить и рисовать в другом месте
		if(Pressed==65) {// нажали F7
			gotoxy(curX, curY);	
			clrscr();	// очистка экрана
			--curX; // из текущей позиции курсор перемещаем на один шаг назад
			gotoxy(curX, curY);		// на текущей позиции печатаем символ
			printf("*");
		}
		if(Pressed == 66) {	// нажали F8
			gotoxy(curX, curY);
			clrscr();	// очистка экрана
			++curX; // из текущей позиции курсор перемещаем на один шаг вперед
			gotoxy(curX, curY);   // на текущей позиции печатаем символ
			printf("*");
		}
	}
	return 0;
}
Соседние файлы в папке ЛАБ 4