Ir para o conteúdo
Goose

Duvida sobre dar cor as letras na consola

Mensagens Recomendadas

Goose    0
Goose

Boas Tardes a todos

Estou a desenvolver em consola o jogo do cubo magico (Rubik's Cube), mas aquilo tudo a branco fica um bocado confuso..

Vinha aqui então perguntar se existe alguma maneira de dar cor ao tipo char guardado numa matriz 3*3

Só tenho mesmo um carácter em cada posição da matriz

                                                                                                                                mat1 [0][0] = 'R';mat1 [0][1] = 'R';mat1 [0][2] = 'R';
															mat1 [1][0] = 'R';mat1 [1][1] = 'R';mat1 [1][2] = 'R';
											                                mat1 [2][0] = 'R';mat1 [2][1] = 'R';mat1 [2][2] = 'R';

	mat3 [0][0] = 'G';mat3 [0][1] = 'G';mat3 [0][2] = 'G';  mat2 [0][0] = 'W';mat2 [0][1] = 'W';mat2 [0][2] = 'W';  mat4 [0][0] = 'B';mat4 [0][1] = 'B';mat4 [0][2] = 'B';
	mat3 [1][0] = 'G';mat3 [1][1] = 'G';mat3 [1][2] = 'G';  mat2 [1][0] = 'W';mat2 [1][1] = 'W';mat2 [1][2] = 'W';  mat4 [1][0] = 'B';mat4 [1][1] = 'B';mat4 [1][2] = 'B';
	mat3 [2][0] = 'G';mat3 [2][1] = 'G';mat3 [2][2] = 'G';  mat2 [2][0] = 'W';mat2 [2][1] = 'W';mat2 [2][2] = 'W';  mat4 [2][0] = 'B';mat4 [2][1] = 'B';mat4 [2][2] = 'B';

															mat5 [0][0] = 'O';mat5 [0][1] = 'O';mat5 [0][2] = 'O';
															mat5 [1][0] = 'O';mat5 [1][1] = 'O';mat5 [1][2] = 'O';
															mat5 [2][0] = 'O';mat5 [2][1] = 'O';mat5 [2][2] = 'O';

															mat6 [0][0] = 'Y';mat6 [0][1] = 'Y';mat6 [0][2] = 'Y';
															mat6 [1][0] = 'Y';mat6 [1][1] = 'Y';mat6 [1][2] = 'Y';
															mat6 [2][0] = 'Y';mat6 [2][1] = 'Y';mat6 [2][2] = 'Y';

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Goose    0
Goose

so mais uma pergunta

estou a usar uma matriz[3][3] que grava um char dentro como gravo esse char com a cor ? da para fazer isso ? terei de alterar a matriz de Char para outro tipo?

#include <stdio.h>
#include <windows.h>   // WinApi header

int main()
{
  HANDLE  hConsole;
    int k;
char mat[3][3];

  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  
  k=10;
  do
  {
                SetConsoleTextAttribute(hConsole, k);
                mat[0][0] = printf("%s\n", "G");
        k++;
  }while(k == 10);
  do
   {
                SetConsoleTextAttribute(hConsole, k);
                mat[0][1] = printf("%s\n", "G");
        k++;
  }while (k == 11);

   
            printf("%c", mat[0][0]);printf("%c", mat[0][1]);

  getchar();  // wait
  return 0;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Sempre que imprimes um 'G' queres que ele apareça a verde, certo? E um 'R' a vermelho?

Ou seja, para cada letra tens uma cor especifica.

Eu mudaria a impressão para ser uma função definida por mim, que olhava para o caracter, decidia a cor, mudava a cor e imprimia o caracter.

Depois em vez de

printf("%c %c %c ", mat[0][0], mat[0][1], mat[0][2]);

teria qualquer coisa como

print_rubik(mat[0][0]); putchar(' ');
print_rubik(mat[0][1]); putchar(' ');
print_rubik(mat[0][2]); putchar(' ');

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Goose    0
Goose

onde defino isto ?

print_rubik(mat[0][0]); putchar(' ');
print_rubik(mat[0][1]); putchar(' ');
print_rubik(mat[0][2]); putchar(' ');

mais propriamente o print_rubik ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg
podes dar-me só um exemplo

Prefiro não o fazer por não me ser prático testar a função, nem estar com vontade para ir aprender o que é um HANDLE e como o usar correctamente. E não quero dar informações incorrectas.


Para escolher uma cor com base numa letra, sugiro o switch

switch (letra) {
    case 'G': cor = 42; break; /* cor inventada */
    /* ... */
    default: cor = 0; break;
}

Depois o SetTextConsoleAttribute (que não posso testar) para mudar a cor

SetConsoleTextAttribute(hConsole, cor);

e depois imprimes a letra

putchar(letra);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade