0% encontró este documento útil (0 votos)
12 vistas12 páginas

Juego Laberinto en Pascal con Matrices

Este documento describe un proyecto para desarrollar un juego llamado "Ratón en el Laberinto" utilizando matrices y programación orientada a objetos en Pascal. El juego tendrá dos niveles con laberintos de 4x4 y 5x5 celdas respectivamente. El objetivo es mover el ratón a través del laberinto hasta la salida siguiendo los pasos de análisis, diseño, implementación y pruebas propios del desarrollo de software.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
12 vistas12 páginas

Juego Laberinto en Pascal con Matrices

Este documento describe un proyecto para desarrollar un juego llamado "Ratón en el Laberinto" utilizando matrices y programación orientada a objetos en Pascal. El juego tendrá dos niveles con laberintos de 4x4 y 5x5 celdas respectivamente. El objetivo es mover el ratón a través del laberinto hasta la salida siguiendo los pasos de análisis, diseño, implementación y pruebas propios del desarrollo de software.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

FACULTAD: TECNOLOGIA

Universitario: Luis Ernesto Jiménez Cruz


Carrera: Ingeniería Electrónica
Docente: ING Evans Balcázar Veizaga
Materia: Programación 1
I. Introduccion
Este proyecto trata básicamente de elaborar un programa que permita interactuar entre el
usuario computador con un juego llama RATON EN EL LABERINTO que este consta de 2
niveles en el modelo original había solo 1 nivel que consta un laberinto de una matriz de
4x4 u el objetivo es llegar a la salida y en este solo vamos a implementar otro nivel cuya
diferencia es una matriz de 5x5. También hemos implementado alguna mejora al código
orinal como el de no pasar las paredes y terminar la implementación del juego automático

II. Antecedentes y Justificación


 Con este proyecto vemos que mediante el uso de matrices aplicada en la
programación se diseñar un juego autodidacta simple pero funcional con el que el
usuario interactúa con el ordenador
 El proyecto tiene el fin de entender como acciones que parece fácil para al usuario
a diferencia en la implementación del código es más difícil de lo que parece.

III. Problema
 Situación problemática
Realizar una aplicación que mediante el uso de matrices permita jugar al RATON
EN EL LABERINTO.
 Formulación del problema
Realizamos el paso correspondiente para realizar la aplicación:
1. Análisis
1.1 Lógico/Matemático
 Usaremos una matriz cuadrada para el juego
 Usuremos un archivo tipo para el cambio de la posición

1.2 Abstracción
Juego/Atributos
 Lab:array[1..MAX_F,1..MAX_C]of integer;
 Fils,Cols:integer;
 Ini,Fin,raton:posicion;
 Cam:array[1..MAX_F*MAX_F]of posicion;
 dimcam,nivel:integer;

comportamientos
 Crear(Form:TLab);
 CrearLab(niv:integer);
 Automatico();
 Dibujar();
 MoverRaton(dir:Direccion)
2. Diseño
2.1 Diseño Formal
JUEGO

 Lab:array[1..MAX_F,1..MAX_C]of integer;
 Fils,Cols:integer;
 Ini,Fin,raton:posicion;
 Cam:array[1..MAX_F*MAX_F]of posicion;
 dimcam,nivel:integer;
 Crear(Form:TLab);
 CrearLab(niv:integer);
 Automatico();
 Dibujar();
 moverRaton(dir:Direccion);

2.2 Diseño procedimental

*Constructor: Crear
p/
fils:=0; Co
cols:=0;
f:=1 .. MAX_F
c:=1 .. MAX_C
Lab[f,c]:=-1;
ctx:=Form;
f:=1 .. MAX_F*MAX_C
Cam[f].fil:=-1;
Cam[f].col:=-1;
[Link]:=0;
[Link]:=0;
[Link]:=0;
[Link]:=0;
*CrearLab: CrearLab
P/( niv ) niv->
1://4x4
Po
fils:=4;
cols:=4;
f:=1 .. fils
c:=1 .. cols
Lab[f,c]:=LN1[f,c];
[Link]:=2;
[Link]:=1;
[Link]:=4;
[Link]:=3;
2:
fils:=5;
cols:=5;
f:=1 .. fils
c:=1 .. cols
Lab[f,c]:=LN2[f,c];
[Link]:=1;
[Link]:=2;
[Link]:=4;
[Link]:=5;
end;
end;
raton:=Ini;
dimcam:=0;
nivel:=niv;
Dibujar();
*Automático: Automático
P/
En la implementación. Po

*Dibujar: Dibujar
P/
En la implementación.
Po

*Mover Ratón:
P/ MoverRaton
En la implementación. dir->
Po

La implementación se verá más adelante.


3. Objetivos
3.1 Objetivo General
 Diseñar un juego simple pero funcional a partir de un lenguaje de
programación (pascal), este juego será desarrollado con matrices.
Dicho juego tendrá tres niveles cada nivel tendrá una matriz
cuadrada

 Objetivo destructivo: que los alumnos reemplacen la imagen


de "cerebro mágico" que tienen de la computadora, y entiendan que
es básicamente una máquina que responde (precisa y rápidamente)
a una serie de instrucciones simples.
 Objetivo constructivo: que los alumnos aprendan que aun
siguiendo simples instrucciones una computadora puede realizar
tareas sumamente complejas y mostrar un comportamiento
pseudointeligente
3.2 Objetivo Especifico
 Demostrar el uso de las matrices y archivos en una sola aplicación
de juego
 Explicar el uso del lenguaje de programación en la aplicación de un
juego

4. Metodología
 Para la realización de este proyecto usaremos la programación
orientada a objetos y eventos que siguen los pasos anteriormente
mencionados
 Definición de Programación Orientada a Objetos (POO) es un
paradigma de programación, es decir, un modelo o un estilo
de programación que nos da unas guías sobre cómo trabajar con él. Se
basa en el concepto de clases y objetos. ... Luego, se
crean objetos individuales a partir de la plantilla de clase
5. Marco Teórico
Es la aplicación de todo lo aprendido en clases como programación orientada
a objetos, arreglos de una dimensión, arreglos de dimensiones, y archivo tipo.
6. Desarrollo
6.1 Implementación
unit ujuego;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Graphics, ExtCtrls, Dialogs, flab;
const
MAX_F=25;
MAX_C=25;
Arriba=1;
Abajo=2;
Izquierda=3;
Derecha=4;
type
Direccion=integer;
Posicion=record
fil,col:integer;
end;
{ Juego }
Juego=class
private
Lab:array[1..MAX_F,1..MAX_C]of integer;
Fils,Cols:integer;
Ini,Fin,raton:posicion;
Cam:array[1..MAX_F*MAX_F]of posicion;
dimcam,nivel:integer;
//ctx es para interactuar con el Formulario
Ctx:TLab;
public
constructor Crear(Form:TLab);
procedure CrearLab(niv:integer);
procedure Automatico();
procedure Dibujar();
procedure MoverRaton(dir:Direccion);
end;
implementation
{ Juego }
constructor [Link](Form: TLab);
var
f,c:integer;
begin
fils:=0;
cols:=0;
for f:=1 to MAX_F do
for c:=1 to MAX_C do
Lab[f,c]:=-1;
ctx:=Form;
for f:=1 to MAX_F*MAX_C do
begin
Cam[f].fil:=-1;
Cam[f].col:=-1;
end;
[Link]:=0;
[Link]:=0;
[Link]:=0;
[Link]:=0;
end;
procedure [Link](niv: integer);
var
f,c:integer;
LN1:Array[1..4,1..4]of integer =((1,0,1,1),(1,0,0,1),(1,1,0,0),(1,1,1,1));
LN2:Array[1..5,1..5]of integer=((1,1,1,1,1),(0,0,1,1,1),(1,0,1,1,1),(1,0,0,0,1),(1,1,1,0,1));
begin
case niv of
1:begin //4x4
fils:=4;
cols:=4;
for f:=1 to fils do
for c:=1 to cols do
Lab[f,c]:=LN1[f,c];
[Link]:=2;
[Link]:=1;
[Link]:=4;
[Link]:=3;
end;
2:begin
fils:=5;
cols:=5;
for f:=1 to fils do
for c:=1 to cols do
Lab[f,c]:=LN2[f,c];
[Link]:=1;
[Link]:=2;
[Link]:=4;
[Link]:=5;
end;
end;
raton:=Ini;
dimcam:=0;
nivel:=niv;
Dibujar();
end;

procedure [Link]();
begin
//aqui debe ir codigo de juego automatico
case nivel of
1:begin
MoverRaton(4);
MoverRaton(2);
MoverRaton(4);
MoverRaton(2);
end;
2:begin
MoverRaton(2);
MoverRaton(4);
MoverRaton(4);
MoverRaton(2);
MoverRaton(2);
MoverRaton(4);
end;
end;
end;
procedure [Link];
var
f,c,dx,dy:integer;
img:TImage;
begin
case nivel of
1: begin
[Link]:='Nivel :'+IntToStr(nivel);
[Link]:=500;
[Link]:=500;
dx:=80;
dy:=80;
for f:=1 to fils do
for c:=1 to cols do
begin
img:=[Link](ctx);
[Link]:=ctx;
if(lab[f,c]=1)then
[Link]('images/[Link]')
else
[Link]('images/[Link]');
[Link]:=f*dx;
[Link]:=c*dy;
[Link]:=dx;
[Link]:=dy;
[Link]:=true;
end;
img:=[Link](ctx);
[Link]:=ctx;
[Link]('images/[Link]');
[Link]:=[Link]*dx;
[Link]:=[Link]*dy;
[Link]:=dx;
[Link]:=dy;
[Link]:=true;
end;
2:begin
[Link]:='Nivel :'+IntToStr(nivel);
[Link]:=500;
[Link]:=500;
dx:=80;
dy:=80;
for f:=1 to fils do
for c:=1 to cols do
begin
img:=[Link](ctx);
[Link]:=ctx;
if(lab[f,c]=1)then
[Link]('images/[Link]')
else
[Link]('images/[Link]');
[Link]:=f*dx;
[Link]:=c*dy;
[Link]:=dx;
[Link]:=dy;
[Link]:=true;
end;
img:=[Link](ctx);
[Link]:=ctx;
[Link]('images/[Link]');
[Link]:=[Link]*dx;
[Link]:=[Link]*dy;
[Link]:=dx;
[Link]:=dy;
[Link]:=true;
end;
end;
[Link];
if([Link]=[Link])and([Link]=[Link])then
ShowMessage('En la Entrada ...!!!');
if([Link]=[Link])and([Link]=[Link])then
ShowMessage('Llegaste a la Salida...!!!');
end;

procedure [Link](dir:Direccion);
begin
//el raton no puede pasar por las paredes
//Mejorar el Codigo
case nivel of
1:begin
case dir of
Arriba:begin
[Link]:=[Link]-1;
if (([Link]=2)and([Link]=2))or(([Link]=3)and([Link]=2))or(([Link]=3)and([Link]=3))or(([Link]=4)and([Link]=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]+1;
end;
end;
Abajo :begin
[Link]:=[Link]+1;
if (([Link]=2)and([Link]=2))or(([Link]=3)and([Link]=2))or(([Link]=3)and([Link]=3))or(([Link]=4)and([Link]=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]-1;
end;
end;
Derecha:begin
[Link]:=[Link]+1;
if (([Link]=2)and([Link]=2))or(([Link]=3)and([Link]=2))or(([Link]=3)and([Link]=3))or(([Link]=4)and([Link]=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]-1;
end;
end;
Izquierda:begin
[Link]:=[Link]-1;
if (([Link]=2)and([Link]=2))or(([Link]=3)and([Link]=2))or(([Link]=3)and([Link]=3))or(([Link]=4)and([Link]=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]+1;
end;
end;
end;
end;
2:begin
case dir of
Arriba:begin
[Link]:=[Link]-1;
if
(([Link]=2)and([Link]=2))or(([Link]=2)and([Link]=3))or(([Link]=2)and([Link]=4))or(([Link]=3)and([Link]=4))or(([Link]=
4)and([Link]=4))or(([Link]=4)and([Link]=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]+1;
end;
end;
Abajo :begin
[Link]:=[Link]+1;
if
(([Link]=2)and([Link]=2))or(([Link]=2)and([Link]=3))or(([Link]=2)and([Link]=4))or(([Link]=3)and([Link]=4))or(([Link]=
4)and([Link]=4))or(([Link]=4)and([Link]=5))then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]-1;
end;
end;
Derecha:begin
[Link]:=[Link]+1;
if
(([Link]=2)and([Link]=2))or(([Link]=2)and([Link]=3))or(([Link]=2)and([Link]=4))or(([Link]=3)and([Link]=4))or(([Link]=
4)and([Link]=4))or(([Link]=4)and([Link]=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]-1;
end;
end;
Izquierda:begin
[Link]:=[Link]-1;
if
(([Link]=2)and([Link]=2))or(([Link]=2)and([Link]=3))or(([Link]=2)and([Link]=4))or(([Link]=3)and([Link]=4))or(([Link]=
4)and([Link]=4))or(([Link]=4)and([Link]=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
[Link]:=[Link]+1;
end;
end;
end;
end;
end;
Dibujar();
end;
end.
1.1 EVENTOS.
unit flaberinto;
{$mode objfpc}{$H+}
Interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,ujuego,flab;
Type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
BDer: TButton;
BIzq: TButton;
BArr: TButton;
BAba: TButton;
Bauto: TButton;
Button2: TButton;
Bauto2: TButton;
procedure BAbaClick(Sender: TObject);
procedure BArrClick(Sender: TObject);
procedure Bauto2Click(Sender: TObject);
procedure BautoClick(Sender: TObject);
procedure BIzqClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BDerClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
J:juego;
public
{ public declarations }
end;
var
Form1: TForm1;

implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
J:=[Link](Lab);
[Link](1);
end;
procedure [Link](Sender: TObject);
begin
[Link](Izquierda);
end;
procedure [Link](Sender: TObject);
begin
[Link](Arriba);
end;
procedure TForm1.Bauto2Click(Sender: TObject);
begin
[Link](2);
[Link]();
end;
procedure [Link](Sender: TObject);
begin
[Link](Abajo);
end;
procedure [Link](Sender: TObject);
begin
[Link](Derecha);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
J:=[Link](Lab);
[Link](2);
end;
procedure [Link](Sender: TObject);
begin
[Link](1);
[Link]();
end;
end.
unit flab;
{$mode objfpc}{$H+}

interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
{ TLab }
TLab = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ private declarations }
public
{ public declarations }
end;
var
Lab: TLab;
implementation
{$R *.lfm}
{ TLab }
procedure [Link](Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case(key) of
38:begin
Caption:= 'Arriba'
end;
40:begin
Caption:= 'Abajo'
end;
39:begin
Caption:= 'Derecha'
end;
37:begin
Caption:= 'Izquierda'
end;
end;
end;
7. Interfaz Graficas

8. Resultados
Los resultados son los esperados la aplicación funciona correctamente.
9. Conclusiones
De acuerdo con los objetivos planteados el proyecto ha sido un éxito, y hemos
logrado aplicar los conocimientos aduridos a lo largo del semestre en un juego
autodidacta llamado “EL RATON EN EL LABERINTO” mediante el uso de un
lenguaje de programación y matrices.

10. Bibliografía
[Link]

También podría gustarte