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!

Plus

De
R$ 1.800
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

Matricule-se

Pro

De
R$ 2.400
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Luri powered by ChatGPT

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas