texto para marco libreria hcon gotoxy funcion for dev coordenadas con como clrscr centrar biblioteca alternativa c++ windows console tetris cls

c++ - para - cómo usar la función gotoxy en lugar de clrscr



libreria para gotoxy codeblocks (1)

system("cls") ejecuta un comando de shell para borrar la pantalla. Esto es tremendamente ineficiente y definitivamente no para la programación de juegos.

Lamentablemente, la E / S de pantalla depende del sistema. Cuando te refieres a "cls" y no a "borrar", supongo que estás trabajando con la consola de Windows:

  • Si tiene una función gotoxy() , es posible posicionarse en una línea después de la otra e imprimir muchos espacios. No es ultra eficiente, pero es un enfoque. Esta pregunta SO proporciona gotoxy() alternatves, ya que es una función no estándar.

  • Esta recomendación de soporte de Microsoft proporciona una alternativa más efectiva para borrar la pantalla en Windows, usando las funciones de la consola GetConsoleScreenBufferInfo() como GetConsoleScreenBufferInfo() , FillConsoleOutputCharacter() y SetConsoleCursorPosition() .

Editar:

Entiendo que use salida basada en caracteres, al escribir una aplicación de consola y no una aplicación gráfica win32 con todas las funciones.

A continuación, puede adaptar el código proporcionado anteriormente, borrando solo una parte de la consola:

void console_clear_region (int x, int y, int dx, int dy, char clearwith = '' '') { HANDLE hc = GetStdHandle(STD_OUTPUT_HANDLE); // get console handle CONSOLE_SCREEN_BUFFER_INFO csbi; // screen buffer information DWORD chars_written; // count successful output GetConsoleScreenBufferInfo(hc, &csbi); // Get screen info & size GetConsoleScreenBufferInfo(hc, &csbi); // Get current text display attributes if (x + dx > csbi.dwSize.X) // verify maximum width and height dx = csbi.dwSize.X - x; // and adjust if necessary if (y + dy > csbi.dwSize.Y) dy = csbi.dwSize.Y - y; for (int j = 0; j < dy; j++) { // loop for the lines COORD cursor = { x, y+j }; // start filling // Fill the line part with a char (blank by default) FillConsoleOutputCharacter(hc, TCHAR(clearwith), dx, cursor, &chars_written); // Change text attributes accordingly FillConsoleOutputAttribute(hc, csbi.wAttributes, dx, cursor, &chars_written); } COORD cursor = { x, y }; SetConsoleCursorPosition(hc, cursor); // set new cursor position }

Editar 2:

Y, además, aquí hay dos funciones de posicionamiento de cusor que puedes mezclar con salida estándar de cout:

void console_gotoxy(int x, int y) { HANDLE hc = GetStdHandle(STD_OUTPUT_HANDLE); // get console handle COORD cursor = { x, y }; SetConsoleCursorPosition(hc, cursor); // set new cursor position } void console_getxy(int& x, int& y) { HANDLE hc = GetStdHandle(STD_OUTPUT_HANDLE); // get console handle CONSOLE_SCREEN_BUFFER_INFO csbi; // screen buffer information GetConsoleScreenBufferInfo(hc, &csbi); // Get screen info & size x = csbi.dwCursorPosition.X; y = csbi.dwCursorPosition.Y; }

Hacer el primer proyecto y es tetris; Ahora estoy haciendo la parte de la animación, pero tengo un problema para limpiar la pantalla, lo he intentado:

void clrscr() { system("cls"); }

Funcionó, pero siguió parpadeando en la pantalla, ¿hay alguna manera de usar la función gotoxy lugar de clrscr el mismo propósito?

Estoy usando el sistema de consola de Windows 32, en Visual Studio 2008.