English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Uso de C++Implementación paso a paso del Tetris

Primero, introducción al experimento

1.1 Contenido del experimento

En esta sección del experimento, realizamos el análisis de ideas antes del diseño del Tetris ruso, así como la introducción del método de uso de la biblioteca ncurses.

1.2 Puntos clave del experimento

C++ Fundamentos de la programación
Uso de la biblioteca ncurses
Diseño lógico del Tetris ruso

1.3 Ambiente de experimento

Terminal xface
g++ Compilador
Biblioteca ncurses

1.4 Público objetivo

Este curso tiene un nivel general, es adecuado para aquellos con conocimientos en C++ Fundamentos de la programación, interesados en el diseño del juego y el análisis lógico.

1.5 Obtener el código

git clone https://github.com/Gamerchen/game_zero.git

Segundo, preparación para el desarrollo

2.1 Instalar la biblioteca ncurses

sudo apt-get update
sudo apt-get install libncurses5-dev

2.2 Compilar el programa

El comando de compilación debe incluir -l Introducción de la biblioteca ncurses:

g++ main.c -l ncurses

Tercero, principio del experimento

3.1 Análisis previo al diseño

Antes de comenzar a escribir el programa, debemos primero analizar qué funciones debe implementar el diseño del programa, y en qué módulos se deben dividir. En el Tetris ruso, lo primero que deberíamos pensar es mostrar el cuadrado, seguido de la caída del cuadrado, el movimiento a la izquierda y a la derecha, la rotación y, finalmente, eliminar las filas llenas. Otro juego básico de Tetris ruso también debe tener la función de sugerir la forma del siguiente cuadrado.

Por lo tanto, los problemas que debemos resolver en la programación son:

Mostrar el cuadrado
Implementar el movimiento del cuadrado
Girar el cuadrado
Eliminar filas llenas de cuadrados
Sugerir la forma del siguiente cuadrado

3.2 Gráficos básicos

Cada cuadrado está compuesto por cuatro cuadrados, caen desde el centro del cuadro de juego, y pueden girarse sin colisionar con los bordes del cuadro y otros cuadrados dentro del cuadro.


3.3 Uso de la biblioteca NCURSES

En términos simples, NCURSES es una biblioteca desde System V Release 4.0 (SVr4) es una réplica de CURSES, una biblioteca configurable que es completamente compatible con las versiones anteriores de CURSES y permite que las aplicaciones controlen directamente la visualización en la pantalla del terminal. NCURSES encapsula las funciones de bajo nivel del terminal, incluye algunas funciones para crear ventanas y extiende la biblioteca básica CURSES con Menu, Panel y Form. Podemos construir una aplicación que incluya múltiples ventanas (multiple windows), menús (menus), paneles (panels) y formularios (forms). Las ventanas pueden ser gestionadas de manera independiente, por ejemplo, permitiéndoles desplazarse (scrollability) o ocultarse. Los menús (Menus) permiten a los usuarios crear opciones de comandos para facilitar la ejecución de comandos. Los formularios (Forms) permiten a los usuarios crear ventanas simples para la entrada y visualización de datos. Los paneles (Panels) son una extensión de la funcionalidad de gestión de ventanas de NCURSES, que se puede usar para cubrir o apilar ventanas.

3.3.1 NCURSES--Desde el programa Hello World

Si llama a las funciones de la biblioteca NCURSES, debe cargar el archivo ncurses.h en el código (ncurses.h ya incluye stdio.h)

Ejemplo:

#include <ncurses.h>
int main()
{
 initscr(); //Inicialización, entrada al modo NCURSES
 printw("Hello World!"); //Imprime "Hello Wowrld!" en la pantalla virtual
 refresh(); //Escribe el contenido de la pantalla virtual en la pantalla y actualiza
 getch(); //Esperar la entrada del usuario
 endwin(); //Salir del modo NCURSES
 return 0;
}

En el ejemplo anterior, hemos presentado el uso de las funciones más básicas de la biblioteca NCURSES, la función de las cuales se ha explicado en los comentarios, aquí no se repetirá.

3.3.2 Mecanismo de ventana

Al inicializar NCURSES, crea por defecto una ventana llamada stdscr, generalmente de tamaño 80 columnas,25 fila (puede variar en función del monitor o la tarjeta gráfica), además, puede crear su propia ventana mediante las funciones del sistema de ventanas.

Por ejemplo, si llama a la siguiente función:

printw("Hi!");
refresh();

Escribirá "Hi!" en la posición del cursor actual de stdscr, llamando a la función refresh(), solo actualizará el búfer en stdscr.

Si ya ha creado una ventana llamada win y desea escribir contenido en esta ventana, puede agregar w antes de la función común y también debe cambiar los parámetros.

printw(string) //Imprime la cadena string en la posición del cursor actual de stdscr
mvprintw(y, x, string)  //Imprima la cadena de caracteres string en las coordenadas (y, x)
wprintw(win, string)  //Imprima la cadena de caracteres string en la posición del cursor actual de la ventana win
mvwprintw(win, y, x, string)  //Mueva el cursor al punto (y, x) de la ventana win y imprima la cadena de caracteres string
Creo que después de ver los ejemplos anteriores, ya puedes ver la diferencia en las funciones de cada una a través de las reglas de nombramiento de las funciones.

3.3.3 newwin y la función box

La creación de una ventana se inicia con la función newwin(), que devuelve un puntero a la estructura de la ventana, este puntero puede ser transmitido a algunas funciones que necesitan parámetros de ventana como wprintw().

Sin embargo, hemos creado una ventana pero no la podemos ver, necesitamos usar la función box() para dibujar el borde alrededor de la ventana ya definida.

Ejemplo:

WINDOW *create_newin(int height, int width, int starty, int startx)
{
 WINDOW *local_win;
 local_win = newin(height, width, starty, startx);
 box(local_win, 0, 0);
 wrefresh(local_win);
 return local_win;
}

Aquí termina la introducción básica del uso del repositorio NUCRSES, para problemas específicos en el uso, aún es necesario consultar los materiales relevantes.

Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado una edición humana y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará