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

Uso de C++Implementação passo a passo do Tetris

Introdução ao experimento

1.1 Conteúdo do experimento

Nesta seção do experimento, faremos a análise de pensamento antes do design do Tetris e introduziremos o método de uso da biblioteca ncurses.

1.2 Conhecimentos de experimento

C++ Fundamentos de programação
Uso da biblioteca ncurses
Design lógico do Tetris

1.3 Ambiente de experimento

Terminal xface
g++ Compilador
Biblioteca ncurses

1.4 Público-alvo

Este curso tem um nível médio, é adequado para aqueles que têm conhecimentos em C++ Fundamentos de programação, interessados em design de jogos e análise lógica.

1.5 Obtenção do código

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

Preparação para desenvolvimento

2.1 Instalar a biblioteca ncurses

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

2.2 Compilar o programa

O comando de compilação deve incluir -l Incluir a biblioteca ncurses:

g++ main.c -l ncurses

Princípio do experimento

3.1 Análise prévia do design

Antes de começar a escrever o programa, devemos analisar quais funções precisamos implementar e como dividir o programa em módulos. No caso do Tetris, a primeira coisa que vem à mente é a exibição dos blocos, seguida pela queda, movimento para a direita e esquerda, rotação e, finalmente, a remoção das linhas cheias. Outra funcionalidade básica do jogo Tetris deve ser a indicação da forma do próximo bloco.

Portanto, os problemas que precisamos resolver em nosso código são:

Exibição de blocos
Implementação do movimento de blocos
Rotação de blocos
Remoção de linhas cheias de blocos
Indicação da forma do próximo bloco

3.2 Gráficos básicos

Cada bloco é composto por quatro boxes, cai do centro da janela de jogo, pode girar sem colidir com os limites da janela e outros blocos.


3.3 Uso da biblioteca NCURSES

Em termos simples, o NCURSES é uma biblioteca do System V Release 4.0 (SVr4) é uma cópia do CURSES, é uma biblioteca configurável que é completamente compatível com versões antigas do CURSES, e é uma biblioteca que permite que os aplicativos controlem diretamente a exibição do terminal. O NCURSES encapsula as funções de terminal de baixa camada, inclui algumas funções para criar janelas e tem extensões como Menu, Panel e Form para a biblioteca básica CURSES, permitindo-nos criar aplicações que contenham múltiplas janelas (multiple windows), menus, painéis (panels) e formulários (forms). As janelas podem ser gerenciadas independentemente, por exemplo, tornando-as roláveis (scrollable) ou ocultáveis. Os menus (Menus) permitem que o usuário crie opções de comando, facilitando a execução de comandos. E os formulários (Forms) permitem que o usuário crie janelas simples para entrada e exibição de dados. Os painéis (Panels) são uma extensão da funcionalidade de gerenciamento de janelas do NCURSES, que pode ser usada para cobrir ou empilhar janelas.

3.3.1 NCURSES--Começa com o programa Hello World

Se você chamar funções da biblioteca NCURSES, deve carregar o arquivo ncurses.h no código (o ncurses.h já inclui stdio.h)

Exemplo:

#include <ncurses.h>
int main()
{
 initscr(); //Inicialização, entrada no modo NCURSES
 printw("Hello World!"); //Imprime Hello Wowrld! na tela virtual
 refresh(); //Escreve o conteúdo da tela virtual no monitor e atualiza
 getch(); //Aguarda entrada do usuário
 endwin(); //Sai do modo NCURSES
 return 0;
}

Neste exemplo, introduzimos o uso das funções mais básicas da biblioteca NCURSES, cujas funções estão descritas nos comentários, não será repetido aqui.

3.3.2 Mecanismo de janelas

Quando o NCURSES é inicializado, ele cria por padrão uma janela chamada stdscr, geralmente com tamanho 80 colunas,25 linhas (pode variar dependendo do monitor ou da placa de vídeo), além disso, você pode criar suas próprias janelas através das funções do sistema de janelas.

Para exemplificar, se você chamar a seguinte função:

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

Ela imprimirá "Hi!" na posição do cursor atual de stdscr, chamando a função refresh(), atualizará apenas o buffer em stdscr.

Se você já criou uma janela chamada win e deseja imprimir conteúdo nela, você pode adicionar 'w' antes da função comum, e os parâmetros também devem mudar.

printw(string) //Imprime a string string na posição do cursor atual de stdscr
mvprintw(y, x, string)  //Imprima a string string na posição (y, x)
wprintw(win, string)  //Imprima a string string na posição do cursor atual da janela win
mvwprintw(win, y, x, string)  //Mova o cursor para a posição (y, x) da janela win e imprima a string string
Acredito que, após ver os exemplos acima, você já pode identificar a diferença nas funções através das regras de nomeação.

3.3.3 newwin e funções box

A criação de uma janela começa com a função newwin(), que retorna um ponteiro para a estrutura da janela, que pode ser passado para funções como wprintw() que precisam de parâmetros de janela.

No entanto, criamos uma janela mas não a podemos ver, precisamos usar a função box() para desenhar uma borda ao redor da janela já definida.

Exemplo:

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;
}

Foi aqui que apresentamos as maneiras básicas de uso da biblioteca NUCRSES. Para problemas específicos ao usá-la, ainda é necessário consultar materiais relevantes.

Declaração: O conteúdo deste artigo é extraído da Internet, pertence ao autor original, é contribuído e carregado voluntariamente pelos usuários da Internet, o site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal relevante. Se você encontrar conteúdo suspeito de violação de direitos autorais, bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Se confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar