Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Programação > Cursos de C e C++ > Conteúdos de C e C++ > Primeiras aulas do curso C: recursos avançados da linguagem

C: recursos avançados da linguagem

Matrizes - Introdução

Olá! Boas-vindas ao nosso Curso de C. Assim como os anteriores, aqui também implementaremos um jogo, e este será muito desafiador.

O jogo se chama "Foge-foge" e é um derivado do Pac-man, ou seja, um monstrinho no mapa deve sair correndo atrás de pílulas e fantasmas. Para implementarmos esse jogo temos um grade desafio pela frente, pois devemos escrever muitos algoritmos, como por exemplo o de movimento do personagem e outro de perseguição dos fantasmas. Além disso, aprenderemos mais sobre matrizes, structs, funções recursivas e até mesmo diretivas de compilação.

No final do curso teremos um jogo visualmente bonito para a pessoa usuária final. Você está pronto para este desafio? Então, vamos começar!

Matrizes - Entendendo as matrizes

O primeiro passo para a implementação do Foge-Foge é pensar no mapa que nosso herói andará. Nele, precisamos representar tudo o que pode existir por lá, como paredes, monstros, o próprio herói, e lugares pela qual ele pode passar.

Podemos representar um mapa por meio de várias linhas e colunas. E, em cada posição, teríamos um caractere que representaria o que tem ali. Veja o exemplo do mapa abaixo, onde o ponto (.) significa "caminho livre", o arroba (@) representa nosso herói e os caracteres | e - representam paredes:

  0123456789
0 |--------|
1 |...|..-.|
2 |..-|.@..|
3 |......-.|
4 |--------|

Nosso herói que está na linha 2, coluna 6, pode andar para esquerda, direita, cima ou baixo. Mas não pode andar duas vezes seguidas para a esquerda, por exemplo, pois há uma parede ali.

Podemos representar cada linha desse mapa por meio de um array de caracteres. Como cada linha tem 10 posições, um array de 10 posições resolveria. E como temos 5 linhas, precisamos de 5 desses arrays para representar todo o mapa:

char linha1[10];
char linha2[10];
char linha3[10];
char linha4[10];
char linha5[10];

Claramente essa não é uma boa solução. Imagine se tivéssemos um mapa com 50 linhas? Precisaríamos ter 50 variáveis dessas. E manipulá-las não seria fácil. A solução para isso é deixar de usar vetores e passar a usar matrizes. Matrizes, assim como na matemática, é uma estrutura retangular de dados, ou seja, nosso "linhas e colunas".

Se quisermos uma matriz de caracteres de 5x10, declaramos uma variável para tal. Para declararmos matrizes em C, basta repetirmos duas vezes o conjunto de [], um para linhas e outro para colunas, respectivamente:

char mapa[5][10];

Acessar e alterar valores das posições é análogo ao uso de vetores, com a diferença que agora passamos ambas as posições:

// armazenando na posicao 0x0
mapa[0][0] = '|';

// imprimindo a posição 2x3
printf("%c", mapa[2][3]);

Matrizes - Salvando e lendo dados de uma matriz

Para que nosso jogo fique interessante, vamos lê-lo de um arquivo. Nosso programa deve ler linha a linha e salvá-las na matriz mapa. Vamos começar abrindo o arquivo, do jeito que já conhecemos:

FILE* f;

f = fopen("mapa.txt", "r");
if(f == 0) {
    printf("Erro na leitura do mapa");
    exit(1);
}

Agora precisamos mudar a declaração do nosso mapa. Apesar do mapa acima ter 10 caracteres na linha, precisamos lembrar que quando usarmos o fscanf(), passando uma string como máscara, ele colocará um \n ao final. Podemos também usar as funções de leitura que vimos no final do capítulo de I/O, como a fread(), e ler byte a byte, mas isso nos daria um trabalho desnecessário. Vamos declarar o array com uma posição a mais em cada linha, apenas para guardar o enter:

char mapa[5][10+1];

Com isso em mãos, podemos agora fazer o loop para capturar as linhas do arquivo. Apontamos mapa[i] como o lugar onde os caracteres devem ser colocados:

for(int i = 0; i < 5; i++) {
    fscanf(f, "%s", mapa[i]);
}

Podemos imprimir o mapa, de maneira simples por enquanto:

for(int i = 0; i < 5; i++) {
    printf("%s\n", mapa[i]);
}

Por fim, precisamos fechar o arquivo:

fclose(f);

Pronto. Já estamos lendo a matriz de mapa de um arquivo. Mas podemos melhorar ainda mais.

Sobre o curso C: recursos avançados da linguagem

O curso C: recursos avançados da linguagem possui 154 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de C e C++ em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda C e C++ acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas