Como criar um laberinto no pascalzim

Páginas: 8 (1937 palavras) Publicado: 15 de maio de 2014

No pascalzim em ingles


/ -------------------------------------------------------------
// como criar um game de labirinto :
// - Desenvolvedor do Pzim
// -------------------------------------------------------------
Program Pzim ;

var maze: array[1..25,1..80] of char;
i, j: integer ;
xDestino, yDestino: integer ;
x,y: integer;
flag:boolean;//----------------------------------------------------------------
// Funcao usada para saber se a posicao está dentro do labirinto
//----------------------------------------------------------------
Function isDentroLabirinto( i, j: integer ): boolean ;
Begin
if (i = 25) or (j = 80) then
isDentroLabirinto := false
else
isDentroLabirinto := true ;
End;//--------------------------------------------------------------------
// Funcao usada para saber se a posicao denota uma borda do labirinto
//--------------------------------------------------------------------
Function isBorda( i, j: integer ): boolean ;
Begin
if (i = 25) or (j = 80) then
isBorda := true
else
isBorda := false ;
End;//--------------------------------------------------------------------
// Funcao usada para saber o número de parede ao redor de uma posição
//--------------------------------------------------------------------
Function numParedes( i, j: integer ): integer ;
var x: integer;
Begin
if not isDentroLabirinto(i,j) then
numParedes := 0
else
Begin
x:= 4;
if not isDentroLabirinto(i+1,j) or (maze[i+1,j] 'P' ) thenx:= x-1;
if not isDentroLabirinto(i-1,j) or (maze[i-1,j] 'P' ) then x:= x-1;
if not isDentroLabirinto(i,j-1) or (maze[i,j-1] 'P' ) then x:= x-1;
if not isDentroLabirinto(i,j+1) or (maze[i,j+1] 'P' ) then x:= x-1;
numParedes := x;
End;
End;

//--------------------------------------------------------------------
// Procedimento que monta o labirinto, apartir de uma heurística.
//--------------------------------------------------------------------
Procedure NovoLabirinto;
Const BAIXO = 0;
DIREITA=1;
CIMA=2;
ESQUERDA=3;
Var direcoesValidas: array[0..3] of integer;
podeConstruir:boolean;
visited, posPilha, numPosCandidatas, direcaoEscolhida,x {linha},y {coluna} : integer;
pilhaCaminhoSeguido:array[0..2000] of integer;
Begin
// Define todas as posicoes do labirinto como parede
for i:=1 to 25 do
for j:=1 to 80 do
Begin
maze[i][j] := 'P' ;
End;

// Define a posicao de onde o labirinto irá comecar a ser construido
randomize;
x := 3 ;
y := 3 ;

// Variáveis usadas na construcao do labirinto
posPilha:= 0 ;
podeConstruir:= true;

// Enquanto o labirinto ainda puder ser construido, repete...
while (podeConstruir) do
Begin
numPosCandidatas := 0;

// Heuristica: as posicoes candidatas para próxima posicao
// na construcao do labirinto possuem uma parede entre a
// posicao atual e tem 4 paredes ao seu redor.
if (not isBorda(x,y)) and(numParedes(x,y-2)=4) then
Begin
direcoesValidas[numPosCandidatas] := BAIXO ;
numPosCandidatas:= numPosCandidatas+1;
End;
if (not isBorda(x,y)) and (numParedes(x+2,y)=4) then
Begin
direcoesValidas[numPosCandidatas] := DIREITA ;
numPosCandidatas:= numPosCandidatas+1;
End;
if (not isBorda(x,y))and (numParedes(x,y+2)=4) then
Begin
direcoesValidas[numPosCandidatas] := CIMA ;
numPosCandidatas:= numPosCandidatas+1;
End;
if (not isBorda(x,y)) and (numParedes(x-2,y)=4) then
Begin
direcoesValidas[numPosCandidatas] := ESQUERDA ;
numPosCandidatas:= numPosCandidatas+1;...
Ler documento completo

Por favor, assinar para o acesso.

Estes textos também podem ser interessantes

  • pascalzim
  • Pascalzim
  • Pascalzim
  • Pascalzim
  • Pascalzim
  • Pascalzim
  • Criar
  • Apostila Pascalzim

Seja um membro do Trabalhos Feitos

CADASTRE-SE AGORA!