Cursos / Redes de Computadores / Programação Estruturada / Aula

arrow_back Aula 11 - Jogo do labirinto parte 2 – recursão

2. Pontos de Saída e de Chegada

O tabuleiro que foi implementado na aula passada possui paredes externas que delimitam o tabuleiro, bem como paredes internas, que representam os obstáculos dentro do labirinto. Esses obstáculos foram posicionados de forma aleatória, certo?

Pois bem, precisamos agora definir um ponto de saída e um ponto de chegada para que seja possível ao computador tentar encontrar um caminho válido entre esses dois pontos, respeitando, é claro, todos os obstáculos do labirinto. Para isso, precisamos definir duas novas constantes:

Essas constantes representam os caracteres utilizados para representar o ponto de início e de destino (chegada) em questão. Elas devem ser definidas juntas com as outras constantes já definidas na aula anterior (PAREDE_VERTICAL, PAREDE_HORIZONTAL etc.).

Agora que já temos os caracteres a serem utilizados para definir as posições de início e destino no labirinto, precisamos escolher os locais no tabuleiro onde iremos colocar esses caracteres. Vamos começar com a posição de início. Além da constante INICIO, vamos definir duas variáveis para representar a posição no tabuleiro desse caractere de início:

Note que não estamos usando a palavra-chave final na declaração das variáveis, pois não nos interessa declará-las como constantes. Isso porque você pode querer alterar o programa para jogar mais de uma vez sem ter que reiniciar o programa. Nesse caso, o valor da linha e da coluna da matriz que representa o início do jogo mudaria, não podendo assim as variáveis ser declaradas como constantes.

Para definir os valores dessas variáveis, vamos primeiro definir uma função que gera um número inteiro entre um dado intervalo:

Note que essa função recebe como parâmetro dois números inteiros, representando os valores mínimo e máximo que a função deve retornar. Para isso, usamos a função “Math.random()” que gera um número aleatório entre 0 e 1. Esse número é então multiplicado pela diferença entre o valor máximo e o mínimo, que basicamente é a amplitude do intervalo.

Por exemplo, se a função receber os números 10 e 15 como parâmetro, a amplitude do intervalo será de 5. Quando multiplicado por um número real (float) entre 0 e 1, o resultado é um valor do tipo float entre 0 e 5. A função “Math.round()” é então utilizada para arredondar esse número, ou seja, transformá-lo novamente em um inteiro. O uso de (int) indica que o inteiro retornado que esperamos é do tipo int, e não do tipo long, tipo padrão de retorno da função “Math.round()”. Por fim, o valor entre 0 e 5 é adicionado ao número mínimo do intervalo, que nesse caso é o valor 10. No final, o resultado dessa operação será algo entre 10 e 15, percebeu?

Agora que temos essa função, podemos colocar no final da função “inicializarMatriz()” o seguinte código:

Isso fará com que o caractere que representa o início do labirinto seja posicionado em uma linha e coluna cujos índices estão entre 1 (não usamos o zero porque é a parede externa) e a metade do tabuleiro (TAMANHO / 2 - 1). Isso quer dizer que o ponto de início será posicionado na parte superior esquerda do tabuleiro!

Podemos fazer a mesma coisa para a posição do caractere de destino do labirinto, só que posicionando-o na parte inferior à direita do tabuleiro:

O código mostrado deve ser posicionado também no final do procedimento “inicializarMatriz()”. Note que deve haver a declaração de duas variáveis auxiliares usadas para calcular a linha e coluna do caractere que representa o destino do labirinto.

Versão 5.3 - Todos os Direitos reservados