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!
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]);
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.
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.