Prévia do material em texto
AMPLI
ENGENHARIA CIVIL EAD
Aluno: Luiz Guilherme Valério
Algoritmos e Lógica de Programação
Unidade: 3 – Conceitos de programação
Aula: 3 – Estruturas Condicionais em Linguagem C
Maringá/PR
2024
LUIZ GUILHERME VALÉRIO
MATRÍCULA - 2024016287
Algoritmos e Lógica de Programação
Unidade: 3 – Conceitos de programação
Aula: 3 – Estruturas Condicionais em Linguagem C
Maringá/PR
2024
1. Codificação Completa do Exercício:
Segue arquivo baixado realizado dentro do Portugol Webstudio:
Além disso, segue descrição completa:
programa {
// Biblioteca útil para utilização do timer para execução do código
inclua biblioteca Util --> u
funcao inicio() {
inteiro labirinto[5][5]
inteiro posX = 0
inteiro posY = 0
inteiro numA = 0
inteiro numB = 0
inteiro numC = 0
inteiro numD = 0
// LEGENDA:
// número 0 = caminho livre
// número 1 = parede
// número 2 = tesouro
// número 3 = armadilha
// ENDEREÇOS DA MATRIZ
labirinto[0][0] = 0
labirinto[0][1] = 1
labirinto[0][2] = 1
labirinto[0][3] = 1
labirinto[0][4] = 1
labirinto[1][0] = 1
labirinto[1][1] = 0
labirinto[1][2] = 0
labirinto[1][3] = 0
labirinto[1][4] = 1
labirinto[2][0] = 1
labirinto[2][1] = 3
labirinto[2][2] = 0
labirinto[2][3] = 0
labirinto[2][4] = 1
labirinto[3][0] = 1
labirinto[3][1] = 0
labirinto[3][2] = 0
labirinto[3][3] = 0
labirinto[3][4] = 1
labirinto[4][0] = 1
labirinto[4][1] = 1
labirinto[4][2] = 1
labirinto[4][3] = 1
labirinto[4][4] = 2
escreva("DESCRIÇÃO DO JOGO \n \n")
escreva("Suponha que você está em uma missão para encontrar um tesouro escondido no meio de um labirinto muito perigoso. \n")
escreva("O labirinto é composto por uma séries de corredores estreitos, bifurcações e salas ocultas. \n")
escreva("Sua missão é encontrar o caminho para o tesouro, evitando armadilhas e obstáculos ao longo do caminho.")
escreva("DESCRIÇÃO DO LABIRINTO \n \n")
escreva("- Existem caminhos que não têm saída, fazendo com que você precise voltar atrás e tentar outro caminho. \n")
escreva("- Algumas portas podem levar de volta ao início do labirinto, obrigando-o a recomeçar sua busca. \n")
escreva("- O tesouro está escondido em um local diferente a cada vez que o programa iniciar, tornando a exploração do labirinto desafiadora e imprevisível. \n \n")
escreva("Boa sorte em sua busca pelo tesouro!")
enquanto(labirinto[posX][posY] != 2) {
escreva("Sua posição atual é a seguinte: (", posX,", ",posY,") \n")
faca {
escreva("Digite um valor de 0 a 4 para a posição X: ")
leia(posX)
}
enquanto (posX 4)
faca {
escreva("Digite um valor de 0 a 4 para a posição Y: ")
leia(posY)
}
enquanto (posY 4)
se(labirinto[posX][posY] == 0) {
escreva("YEAH!!! \nCaminho está livre! \n")
}
se(labirinto[posX][posY] == 1) {
escreva("OPS! \nVocê atingiu uma parede! \n")
}
se(labirinto[posX][posY] == 2) {
escreva("PARABÉNS!!! \nVocê encontrou o tesouro \n")
}
se(labirinto[posX][posY] == 3) {
escreva("ARMADILHA! \nVolte ao início do labirinto! \n")
posX = 0
posY = 0
// Retirar o tesouro do local anterior
labirinto[4][4] = 1
labirinto[numA][numB] = 0
// Sortear 2 números aleatórios entre 0 e 4
// Atribuir estes números às variáveis numA e numB
numA = u.sorteia(0, 4)
numB = u.sorteia(0, 4)
labirinto[numA][numB] = 2
// Retirar a armadilha do local anterior
labirinto[2][1] = 1
labirinto[numC][numD] = 0
// Sortear 2 números aleatórios entre 0 e 4
numC = u.sorteia(0, 4)
numD = u.sorteia(0, 4)
// Conferir se a nova posição da armadilha é igual à posição do tesouro
se(numC == numA e numD == numB) {
numC = u.sorteia(0, 4)
numD = u.sorteia(0, 4)
}
labirinto[numC][numD] = 3
}
}
}
}
A seguir a explicação dos blocos principais:
Explicação
Trecho de Código
Declaração e inicialização da matriz do labirinto, que será usada para representar as posições de paredes, caminhos, armadilhas e o tesouro.
inteiro labirinto[5][5]
Definição de variáveis para posição e sorteios: posX e posY representam as coordenadas atuais do jogador, enquanto numA, numB, numC, e numD são usadas para armazenar as posições sorteadas do tesouro e das armadilhas.
inteiro posX = 0 inteiro posY = 0 inteiro numA = 0 inteiro numB = 0 inteiro numC = 0 inteiro numD = 0
Preenchimento manual da matriz labirinto: Aqui o código inicializa a matriz com valores representando o layout do labirinto. Os valores 0, 1, 2 e 3 representam caminhos, paredes, o tesouro e armadilhas, respectivamente.
labirinto[0][0] = 0 labirinto[0][1] = 1 ... labirinto[4][4] = 2
Mensagem inicial explicando o jogo: O jogador é informado sobre o objetivo e a estrutura do labirinto. Essa parte serve para orientar o jogador antes do início da interação.
escreva("DESCRIÇÃO DO JOGO \n \n") ... escreva("Boa sorte em sua busca pelo tesouro!")
Loop principal do jogo: Esse loop enquanto continua rodando até que o jogador encontre o tesouro, ou seja, quando labirinto[posX][posY] for igual a 2. O jogador insere novas coordenadas a cada rodada.
enquanto(labirinto[posX][posY] != 2) { ... }
Leitura da posição X e Y do jogador: Esse trecho coleta as coordenadas de movimento do jogador e garante que elas estejam dentro dos limites do labirinto (entre 0 e 4). Caso contrário, o jogador deve tentar novamente.
faca { escreva("Digite um valor de 0 a 4 para a posição X: ") leia(posX) } enquanto (posX 4)
Verificação da célula atual no labirinto: Dependendo do valor na célula labirinto[posX][posY], o jogador recebe um feedback: se o caminho está livre (0), se bateu em uma parede (1), se encontrou o tesouro (2), ou se caiu em uma armadilha (3).
se(labirinto[posX][posY] == 0) { escreva("YEAH!!! Caminho está livre! \n") } ...
Reseta a posição do jogador ao cair em uma armadilha: Se o jogador cair em uma armadilha (3), ele é enviado de volta para o início do labirinto (posição (0,0)), e o tesouro e as armadilhas são reposicionados.
se(labirinto[posX][posY] == 3) { escreva("ARMADILHA! Volte ao início do labirinto!") posX = 0 posY = 0 ... }
Reposicionamento aleatório do tesouro e da armadilha: Quando o jogador cai em uma armadilha, o código sorteia novas posições para o tesouro e para a armadilha, garantindo que eles não fiquem no mesmo local.
numA = u.sorteia(0, 4) numB = u.sorteia(0, 4) labirinto[numA][numB] = 2 ...
image1.emf
Aula 3 f.por
Aula 3 f.por
programa {
// Biblioteca útil para utilização do timer para execução do código
inclua biblioteca Util --> u
funcao inicio() {
inteiro labirinto[5][5]
inteiro posX = 0
inteiro posY = 0
inteiro numA = 0
inteiro numB = 0
inteiro numC = 0
inteiro numD = 0
// LEGENDA:
// número 0 = caminho livre
// número 1 = parede
// número 2 = tesouro
// número 3 = armadilha
// ENDEREÇOS DA MATRIZ
labirinto[0][0] = 0
labirinto[0][1] = 1
labirinto[0][2] = 1
labirinto[0][3] = 1
labirinto[0][4] = 1
labirinto[1][0] = 1
labirinto[1][1] = 0
labirinto[1][2] = 0
labirinto[1][3] = 0
labirinto[1][4] = 1
labirinto[2][0] = 1
labirinto[2][1] = 3
labirinto[2][2] = 0
labirinto[2][3] = 0
labirinto[2][4] = 1
labirinto[3][0] = 1
labirinto[3][1] = 0
labirinto[3][2] = 0
labirinto[3][3] = 0
labirinto[3][4] = 1
labirinto[4][0] = 1
labirinto[4][1] = 1
labirinto[4][2] = 1
labirinto[4][3] = 1
labirinto[4][4] = 2
escreva("DESCRIÇÃO DO JOGO \n \n")
escreva("Suponha que você está em uma missão para encontrar um tesouro escondido no meio de um labirinto muito perigoso. \n")
escreva("Olabirinto é composto por uma séries de corredores estreitos, bifurcações e salas ocultas. \n")
escreva("Sua missão é encontrar o caminho para o tesouro, evitando armadilhas e obstáculos ao longo do caminho.")
escreva("DESCRIÇÃO DO LABIRINTO \n \n")
escreva("- Existem caminhos que não têm saída, fazendo com que você precise voltar atrás e tentar outro caminho. \n")
escreva("- Algumas portas podem levar de volta ao início do labirinto, obrigando-o a recomeçar sua busca. \n")
escreva("- O tesouro está escondido em um local diferente a cada vez que o programa iniciar, tornando a exploração do labirinto desafiadora e imprevisível. \n \n")
escreva("Boa sorte em sua busca pelo tesouro!")
enquanto(labirinto[posX][posY] != 2) {
escreva("Sua posição atual é a seguinte: (", posX,", ",posY,") \n")
faca {
escreva("Digite um valor de 0 a 4 para a posição X: ")
leia(posX)
}
enquanto (posX 4)
faca {
escreva("Digite um valor de 0 a 4 para a posição Y: ")
leia(posY)
}
enquanto (posY 4)
se(labirinto[posX][posY] == 0) {
escreva("YEAH!!! \nCaminho está livre! \n")
}
se(labirinto[posX][posY] == 1) {
escreva("OPS! \nVocê atingiu uma parede! \n")
}
se(labirinto[posX][posY] == 2) {
escreva("PARABÉNS!!! \nVocê encontrou o tesouro \n")
}
se(labirinto[posX][posY] == 3) {
escreva("ARMADILHA! \nVolte ao início do labirinto! \n")
posX = 0
posY = 0
// Retirar o tesouro do local anterior
labirinto[4][4] = 1
labirinto[numA][numB] = 0
// Sortear 2 números aleatórios entre 0 e 4
// Atribuir estes números às variáveis numA e numB
numA = u.sorteia(0, 4)
numB = u.sorteia(0, 4)
labirinto[numA][numB] = 2
// Retirar a armadilha do local anterior
labirinto[2][1] = 1
labirinto[numC][numD] = 0
// Sortear 2 números aleatórios entre 0 e 4
numC = u.sorteia(0, 4)
numD = u.sorteia(0, 4)
// Conferir se a nova posição da armadilha é igual à posição do tesouro
se(numC == numA e numD == numB) {
numC = u.sorteia(0, 4)
numD = u.sorteia(0, 4)
}
labirinto[numC][numD] = 3
}
}
}
}