Estou cursando programação de jogos e estudando C++. Só que como estamos acostumados a ver que o mercado tende para o lado do mais "caro" rsrsrs, no caso para o sistema operacional Windows, assim também não seria diferente a orientação "tecnológica" do meu curso (não os culpo). Até alguns dias eu conseguia compilar os códigos dos exercícios tanto em Windows quanto em
Linux, mas me deparei com uma situação desesperadora, programamos em aula um protótipo de Tron em modo console. E para receber as entradas de dados utilizamos a biblioteca
conio.h. Mal sabia eu a dor cabeça que teria.
Pois bem, na minha infindável busca na internet, descobri que a biblioteca
curses.h seria a possível substituta, já que tem a mesma finalidade de receber dados do teclado, além de também exibir dados na saída padrão (stdout).
Certo ao iniciar o meu percurso em debulhar esta maravilhosa biblioteca, vi que as diferenças não são muitas, mas a estrutura do código teve de ser ligeiramente alterada.
Vamos seguir em frente. Quando utilizamos a biblioteca conio.h temos a possibilidade de executar as funções getch() para ler as entradas do teclado e kbhit() para testar se há buffers de teclado a serem lidos. É muito útil, e eu diria até indispensável o uso desta biblioteca para a programação de jogos e outro programas. Mas no ambiente Linux infelizmente não podemos contar com ela.
Ao invés disso, possuímos a biblioteca curses.h, mencionada anteriormente, que faz a mesma coisa, entretanto com ligeiras diferenças as quais são:
Para receber as entradas do teclado, tive de definir uma variável para a tecla pressionada, segue o exemplo:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
using namespace std;
char tecla; // esta variável irá receber as entradas de teclado em modo char.
Estrutura do código ao chamar as funções em ncurses:
int main()
{
tecla = 0; // atribuí um valor qualquer para a variável não ter estado no início do programa.
while(1)
{
initscr(); // INICIA A CHAMADA DA NCURSES (Linux)
clrtobot(); // Limpa a tela
keypad(stdscr, TRUE); // carrega o módulo do teclado para a tela padrão
noecho(); // não exibe as entradas de teclado no video.
No final bloco, quando não houver mais recebimento de entradas do teclado, deve-se adicionar as funções:
refresh(); // Limpa o buffer de tela e exibe os buffers armazenados.
delay_output(200); //Diminui a velocidade de execução do bloco em ms // OPCIONAL
endwin(); // Finaliza a chamada da NCURSES