
ОргЭВМ_лаб4
.docx
Санкт-Петербургский государственный электротехнический университет имени В. И. Ленина
Кафедра Вычислительной техники
ОТЧЕТ
По лабораторной работе № 4 в дисциплине ОргЭВМ
Работу выполнил: Иванов Серафим Кириллович, 0392
Работу проверил: Ельчанинов М. Н
2021 год
Задание на работу:
Разработать, написать и отладить программу управления перемещением символа
Изменить программу, заменив стандартные функции библиотеки C++ своими
Код программы и результат ее работы:
#include <iostream>
#include <conio.h>
#include <windows.h>
static int x = 0;
static int y = 0;
void cursor(bool status)
{
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO info;
if (!status)
{
info.dwSize = 100;
info.bVisible = FALSE;
SetConsoleCursorInfo(consoleHandle, &info);
}
else
{
info.dwSize = 10;
info.bVisible = TRUE;
SetConsoleCursorInfo(consoleHandle, &info);
}
}
void reset(int dir)
{
switch (dir)
{
case 72:
y--;
break;
case 80:
y++;
break;
case 77:
x++;
break;
case 75:
x--;
break;
default:
return;
}
std::cout << "\b ";
if (y == -1)
{
y = 9;
}
else if (x == -1)
{
x = 29;
}
else
{
x = x % 30;
y = y % 10;
}
COORD position = { x,y }; //позиция x и y
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsole, position);
std::cout << "\x1b[36m*";
}
int main()
{
cursor(0);
//set(20, 0);
HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD crd = { 31, 10 };
SMALL_RECT src = { 0, 0, crd.X - 1, crd.Y - 1 };
SetConsoleWindowInfo(out_handle, true, &src);
SetConsoleScreenBufferSize(out_handle, crd);
std::cout << "\x1b[36m*";
int choice = 0;
while (choice != 27)
{
choice = _getch();
if (choice == 224)
{
choice = _getch();
reset(choice);
}
}
return 0;
}