Добавил:
anersisyan1999
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛАБ 4 / LAB-4.2(var 12)
.cpp#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