Ir ao conteúdo
  • Cadastre-se
Tiago Cavalcante Trindade

C++ Tutorial: como colocar cor no C++

Posts recomendados

Aqui vai uma biblioteca para colocar cor no terminal do c++:

// color.hpp

// author: Tiago Cavalcante Trindade
// version: 1.0.3
// email: tiagotrindade111@gmail
// access: https://www.clubedohardware.com.br/forums/topic/1396899-tutorial-como-colocar-cor-no-c/

#pragma once

#include <iostream>

using namespace std;

namespace style {
	enum FOREGROUND {
		fBLACK = 30, /* letra preta */
		fRED, /* letra vermelha */
		fGREEN, /* letra verde */
		fYELLOW, /* letra amarela */
		fBLUE, /* letra azul */
		fMAGENTA, /* letra magenta */
		fCYAN, /* letra ciano */
		fWHITE, /* letra branca */
		fBLACKs = 90, /* letra preta estrondosa */
		fREDs, /* letra vermelha estrondosa */
		fGREENs, /* letra verde estrondosa */
		fYELLOWs, /* letra amarela estrondosa */
		fBLUEs, /* letra azul estrondosa */
		fMAGENTAs, /* letra magenta estrondosa */
		fCYANs, /* letra ciana estrondosa */
		fWHITEs, /* letra branca estrondosa */
	};
	enum BACKGROUND {
		bBLACK = 40, /* fundo preto */
		bRED, /* fundo vermelho */
		bGREEN, /* fundo verde */
		bYELLOW, /* fundo amarelo */
		bBLUE, /* fundo azul */
		bMAGENTA, /* fundo magenta */
		bCYAN, /* fundo ciano */
		bWHITE, /* fundo branco */
		bBLACKs = 100, /* fundo preto estrondoso */
		bREDs, /* fundo vermelho estrondoso */
		bGREENs, /* fundo verde estrondoso */
		bYELLOWs, /* fundo amarelo estrondoso */
		bBLUEs, /* fundo azul estrondoso */
		bMAGENTAs, /* fundo magenta estrondoso */
		bCYANs, /* fundo ciano estrondoso */
		bWHITEs /* fundo branco estrondoso */
	};
	enum STYLE {
		sRESET = 0, /* estilo de letra padrão */
		sBOLD, /* cor da letra fica mais forte */
		sUNDERLINE = 4, /* sublinhado */
		sINVERSE = 7, /* inverte a cor do fundo com a cor da letra */
	};
}

namespace color {
	/*escreve um texto em determinada cor*/
	void coutc(const char* text, style::FOREGROUND foreground) {
		cout << "[" << foreground << "m" << text << "[0m";
	}
	/*escreve um texto com determinada cor de fundo*/
	void coutc(const char* text, style::BACKGROUND foreground) {
		cout << "[" << foreground << "m" << text << "[0m";
	}
	/*escreve um texto com determinada estilo*/
	void coutc(const char* text, style::STYLE style) {
		cout << "[" << style << "m" << text << "[0m";
	}
	/*escreve um texto em determinada cor e com determinada cor de fundo*/
	void coutc(const char* text, style::FOREGROUND foreground,  style::BACKGROUND background) {
		cout << "[" << foreground << "m[" << background << "m" << text << "[0m";
	}
	/*escreve um texto em determinada cor e com determinado estilo*/
	void coutc(const char* text, style::FOREGROUND foreground, style::STYLE style) {
		cout << "[" << foreground << "m[" << style << "m" << text << "[0m";
	}
	/*escreve um texto com determinada cor de fundo e com determinado estilo*/
	void coutc(const char* text, style::BACKGROUND background, style::STYLE style) {
		cout << "[" << background << "m[" << style << "m" << text << "[0m";
	}
	/*escreve um texto em determinada cor e com determinada cor de fundo e em determinado estilo*/
	void coutc(const char* text, style::FOREGROUND foreground, style::BACKGROUND background, style::STYLE style) {
		cout << "[" << foreground << "m[" << background << "m[" << style << "m" << text << "[0m";
	}
}

Aqui está um exemplo de como usar:

// exemplo.cpp

#include "color.hpp"

int main() {
	color::coutc("Teste", style::fRED);
	color::coutc("Teste", style::fGREENs, style::bWHITE);
	color::coutc("Teste", style::fBLUE, style::bBLACK, style::sUNDERLINE);
	return 0;
}

Aqui estão as cores da letra:

    fBLACK = letra preta
    fRED = letra vermelha
    fGREEN = letra verde
    fYELLOW = letra amarela

    fBLUE = letra azul
    fMAGENTA = letra magenta
    fCYAN = letra ciano
    fWHITE = letra branca
    fBLACKs = letra preta estrondosa
    fREDs = letra vermelha estrondosa
    fGREENs = letra verde estrondosa
    fYELLOWs = letra amarela estrondosa
    fBLUEs = letra azul estrondosa
    fMAGENTAs = letra magenta estrondosa
    fCYANs = letra ciana estrondosa
    fWHITEs = letra branca estrondosa

Aqui estão as cores para o fundo:

    bBLACK = fundo preto
    bRED = fundo vermelho
    bGREEN = fundo verde
    bYELLOW = fundo amarelo
    bBLUE = fundo azul
    bMAGENTA = fundo magenta
    bCYAN = fundo ciano
    bWHITE = fundo branco
    bBLACKs = fundo preto estrondoso
    bREDs = fundo vermelho estrondoso
    bGREENs = fundo verde estrondoso
    bYELLOWs = fundo amarelo estrondoso
    bBLUEs = fundo azul estrondoso
    bMAGENTAs = fundo magenta estrondoso
    bCYANs = fundo ciano estrondoso
    bWHITEs = fundo branco estrondoso

Aqui estão os estilos para letra:

    sRESET = estilo de letra padrão
    sBOLD = cor da letra fica mais forte
    sUNDERLINE = sublinhado
    sINVERSE = inverte a cor do fundo com a cor da letra

Aqui vai um programa para ver cada cor e estilo:

// como-são-todas-as-cores.cpp

#include "color.hpp"

using namespace color;
using namespace style;

int main() {
	cout << "fBLACK: ";
	coutc("text", fBLACK);
	cout << "\nfRED: ";
	coutc("text", fRED);
	cout << "\nfGREEN: ";
	coutc("text", fGREEN);
	cout << "\nfYELLOW: ";
	coutc("text", fYELLOW);
	cout << "\nfBLUE: ";
	coutc("text", fBLUE);
	cout << "\nfMAGENTA: ";
	coutc("text", fMAGENTA);
	cout << "\nfCYAN: ";
	coutc("text", fCYAN);
	cout << "\nfWHITE: ";
	coutc("text", fWHITE);
	cout << "\nfBLACKs: ";
	coutc("text", fBLACKs);
	cout << "\nfREDs: ";
	coutc("text", fREDs);
	cout << "\nfGREENs: ";
	coutc("text", fGREENs);
	cout << "\nfYELLOWs: ";
	coutc("text", fYELLOWs);
	cout << "\nfBLUEs: ";
	coutc("text", fBLUEs);
	cout << "\nfMAGENTAs: ";
	coutc("text", fMAGENTAs);
	cout << "\nfCYANs: ";
	coutc("text", fCYANs);
	cout << "\nfWHITEs: ";
	coutc("text", fWHITEs);
	cout << "\nbBLACK: ";
	coutc("text", bBLACK);
	cout << "\nbRED: ";
	coutc("text", bRED);
	cout << "\nbGREEN: ";
	coutc("text", bGREEN);
	cout << "\nbYELLOW: ";
	coutc("text", bYELLOW);
	cout << "\nbBLUE: ";
	coutc("text", bBLUE);
	cout << "\nbMAGENTA: ";
	coutc("text", bMAGENTA);
	cout << "\nbCYAN: ";
	coutc("text", bCYAN);
	cout << "\nbWHITE: ";
	coutc("text", bWHITE);
	cout << "\nbBLACKs: ";
	coutc("text", bBLACKs);
	cout << "\nbREDs: ";
	coutc("text", bREDs);
	cout << "\nbGREENs: ";
	coutc("text", bGREENs);
	cout << "\nbYELLOWs: ";
	coutc("text", bYELLOWs);
	cout << "\nbBLUEs: ";
	coutc("text", bBLUEs);
	cout << "\nbMAGENTAs: ";
	coutc("text", bMAGENTAs);
	cout << "\nbCYANs: ";
	coutc("text", bCYANs);
	cout << "\nbWHITEs: ";
	coutc("text", bWHITEs);
	cout << "\nsReset: ";
	coutc("text", sRESET);
	cout << "\nsBOLD: ";
	coutc("text", sBOLD);
	cout << "\nsUNDERLINE: ";
	coutc("text", sUNDERLINE);
	cout << "\nsINVERSE: ";
	coutc("text", sINVERSE);
	return 0;
}

Por favor, se encontrarem um erro ou acharem que dá para melhorar algo avisem.

Atenção: caso você copie e cole o color.h o caractere contido em char.txt deve ser adicionado antes de todos os "["

Segue anexos os arquivos char.txt e color.zip.

color.zip é um arquivo com a biblioteca color.h, um programa de exemplo e outro que mostra como são todas as cores. 

char.txt

 

color 1.0.3.zip

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Tiago Cavalcante Trindade       qual caractere de qual biblioteca ?  muito bom seu código , parece que você pesquisou bastante ,  e para aprendizado é muito bom , ainda não havia visto esses comandos em lugar algum , mas não consegui colocar os códigos do jeito certo e eles não funcionaram ,   e pesquisando vi essa função

 

#include <stdio.h>
#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{black,blue,green,cyan,red,magenta,brown,lightgray,darkgray,   /* nome das cores */
lightblue,lightgreen,lightcyan,lightred,lightmagenta,yellow,white} colors;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = lightgray;

void textcolor_2 (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
int main(){
    textcolor_2(14,9);
    printf("Qualquer Coisa !\n\n\n");
    return 0;  
}

 

que é usada na na biblioteca conio2 , ou se não tiver a conio2 instalada funciona também , basta colocar a biblioteca #include <windows.h>  .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

color.h não utiliza nenhuma biblioteca de cores, é que o cmd aceita caracteres ascii e o código [032m, [033m, ... são cores ascii, só que, como outros caracteres ascii o de cor tem que mudar um pouco por isso tem um caractere especial antes.

2 horas atrás, devair1010 disse:

@Tiago Cavalcante Trindade       qual caractere de qual biblioteca ?  muito bom seu código , parece que você pesquisou bastante ,  e para aprendizado é muito bom , ainda não havia visto esses comandos em lugar algum , mas não consegui colocar os códigos do jeito certo e eles não funcionaram ,   e pesquisando vi essa função

 


#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{black,blue,green,cyan,red,magenta,brown,lightgray,darkgray,   /* nome das cores */
lightblue,lightgreen,lightcyan,lightred,lightmagenta,yellow,white} colors;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = lightgray;

void textcolor_2 (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}

 

que é usada na na biblioteca conio2 , ou se não tiver a conio2 instalada funciona também , basta colocar a biblioteca #include <windows.h>  .

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso aqui a RLUTIL, é bem simples de usar apenas um arquivo .h, ela é usada para criar jogos de texto em modo console mas aparentemente  é um sucessor espiritual da antiga conio2.h. Tem todos os recursos e mais alguns e funciona em C e C++.

 

https://github.com/tapio/rlutil

 

Exemplo de um programinha pra mover um "personagem" sem aquele lag de input.

#include <iostream>
#include "rlutil.h"

int main()
{
    int x = 5;
    int y = 5;

    rlutil::hidecursor();
    rlutil::cls();
    rlutil::locate(x,y); std::cout << '@' << std::endl;

    while (true)
    {
        if (kbhit())
        {
            char k = getch();
            rlutil::locate(x,y); std::cout << " ";
            if (k == 'a') --x;
            else if (k == 'd') ++x;
            else if (k == 'w') --y;
            else if (k == 's') ++y;
            else if (k == ' ') break;
            rlutil::locate(x,y); std::cout << '@';
        }

        std::cout.flush();
    }

    rlutil::showcursor();

    return 0;
}

Outros exemplo de cor e jogos.

 

cmd1.png.1d50cc8c5b3c713be87fae39ccb1c6ae.png

 

cmd2.png.8fdd10498325de7c0a98b717b6469ba0.png

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu resolvi adiantar a 1.1.0 porque vi que tinha errado na 1.0.5, eu utilizei cout, mas, o correto é system, cout não funciona, no meu depurador funcionou, mas, quando testei no cmd, não funcionou, daqui a no máximo 5 dias eu solto a 2.0.0 que vai ter os recursos que eu planejei color 1.1.0.zip

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um cara no youtube que criou uma biblioteca para criar jogos usando o console do windows, só que ele meio que elevou o nível da coisa hehe. Você que esta estudando pra criar um framework próprio pode ser interessante dar uma olhada. Deve ter as funções ou algo parecido com o que você procura.

 

https://github.com/OneLoneCoder/videos/blob/master/olcConsoleGameEngine.h

 

Alguns jogos que ele ensinou com o framework

 

RPG

 

FPS

 

Plataforma

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Benjamin Breeg Essa biblioteca realmente elevou um pouquinho o nível da coisa (a directx ficaria com inveja hehe), vou dar uma estudada nessa biblioteca.

adicionado 12 minutos depois
10 horas atrás, Tiago Cavalcante Trindade disse:

Eu resolvi adiantar a 1.1.0 porque vi que tinha errado na 1.0.5, eu utilizei cout, mas, o correto é system, cout não funciona, no meu depurador funcionou, mas, quando testei no cmd, não funcionou, daqui a no máximo 5 dias eu solto a 2.0.0 que vai ter os recursos que eu planejei color 1.1.0.zip

Eu disse que cout não funciona... erro meu cout funciona, mas tem que colocar \033 antes do ansi (antes eu disse ascii, mas eu errei) não um caractere especial.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!