Informe Proyecto
Informe Proyecto
Informe Proyecto
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);
*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;
Ini.fil:=0;
Ini.col:=0;
Fin.fil:=0;
Fin.col:=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];
Ini.fil:=2;
Ini.col:=1;
Fin.fil:=4;
Fin.col:=3;
2:
fils:=5;
cols:=5;
f:=1 .. fils
c:=1 .. cols
Lab[f,c]:=LN2[f,c];
Ini.fil:=1;
Ini.col:=2;
Fin.fil:=4;
Fin.col:=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
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 Juego.Crear(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;
Ini.fil:=0;
Ini.col:=0;
Fin.fil:=0;
Fin.col:=0;
end;
procedure Juego.CrearLab(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];
Ini.fil:=2;
Ini.col:=1;
Fin.fil:=4;
Fin.col:=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];
Ini.fil:=1;
Ini.col:=2;
Fin.fil:=4;
Fin.col:=5;
end;
end;
raton:=Ini;
dimcam:=0;
nivel:=niv;
Dibujar();
end;
procedure Juego.Automatico();
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 Juego.Dibujar;
var
f,c,dx,dy:integer;
img:TImage;
begin
case nivel of
1: begin
ctx.Caption:='Nivel :'+IntToStr(nivel);
ctx.Width:=500;
ctx.Height:=500;
dx:=80;
dy:=80;
for f:=1 to fils do
for c:=1 to cols do
begin
img:=TImage.Create(ctx);
img.Parent:=ctx;
if(lab[f,c]=1)then
img.Picture.LoadFromFile('images/ladrillo.jpg')
else
img.Picture.LoadFromFile('images/pasto.jpg');
img.Left:=f*dx;
img.Top:=c*dy;
img.Width:=dx;
img.Height:=dy;
img.Stretch:=true;
end;
img:=TImage.Create(ctx);
img.Parent:=ctx;
img.Picture.LoadFromFile('images/raton.jpg');
img.Left:=raton.col*dx;
img.Top:=raton.fil*dy;
img.Width:=dx;
img.Height:=dy;
img.Stretch:=true;
end;
2:begin
ctx.Caption:='Nivel :'+IntToStr(nivel);
ctx.Width:=500;
ctx.Height:=500;
dx:=80;
dy:=80;
for f:=1 to fils do
for c:=1 to cols do
begin
img:=TImage.Create(ctx);
img.Parent:=ctx;
if(lab[f,c]=1)then
img.Picture.LoadFromFile('images/ladrillo.jpg')
else
img.Picture.LoadFromFile('images/pasto.jpg');
img.Left:=f*dx;
img.Top:=c*dy;
img.Width:=dx;
img.Height:=dy;
img.Stretch:=true;
end;
img:=TImage.Create(ctx);
img.Parent:=ctx;
img.Picture.LoadFromFile('images/raton.jpg');
img.Left:=raton.col*dx;
img.Top:=raton.fil*dy;
img.Width:=dx;
img.Height:=dy;
img.Stretch:=true;
end;
end;
ctx.Show;
if(raton.fil=ini.fil)and(raton.col=ini.col)then
ShowMessage('En la Entrada ...!!!');
if(raton.fil=fin.fil)and(raton.col=fin.col)then
ShowMessage('Llegaste a la Salida...!!!');
end;
procedure Juego.MoverRaton(dir:Direccion);
begin
//el raton no puede pasar por las paredes
//Mejorar el Codigo
case nivel of
1:begin
case dir of
Arriba:begin
raton.fil:=raton.fil-1;
if ((raton.fil=2)and(raton.col=2))or((raton.fil=3)and(raton.col=2))or((raton.fil=3)and(raton.col=3))or((raton.fil=4)and(raton.col=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.fil:=raton.fil+1;
end;
end;
Abajo :begin
raton.fil:=raton.fil+1;
if ((raton.fil=2)and(raton.col=2))or((raton.fil=3)and(raton.col=2))or((raton.fil=3)and(raton.col=3))or((raton.fil=4)and(raton.col=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.fil:=raton.fil-1;
end;
end;
Derecha:begin
raton.col:=raton.col+1;
if ((raton.fil=2)and(raton.col=2))or((raton.fil=3)and(raton.col=2))or((raton.fil=3)and(raton.col=3))or((raton.fil=4)and(raton.col=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.col:=raton.col-1;
end;
end;
Izquierda:begin
raton.col:=raton.col-1;
if ((raton.fil=2)and(raton.col=2))or((raton.fil=3)and(raton.col=2))or((raton.fil=3)and(raton.col=3))or((raton.fil=4)and(raton.col=3))
then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.col:=raton.col+1;
end;
end;
end;
end;
2:begin
case dir of
Arriba:begin
raton.fil:=raton.fil-1;
if
((raton.fil=2)and(raton.col=2))or((raton.fil=2)and(raton.col=3))or((raton.fil=2)and(raton.col=4))or((raton.fil=3)and(raton.col=4))or((raton.fil=
4)and(raton.col=4))or((raton.fil=4)and(raton.col=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.fil:=raton.fil+1;
end;
end;
Abajo :begin
raton.fil:=raton.fil+1;
if
((raton.fil=2)and(raton.col=2))or((raton.fil=2)and(raton.col=3))or((raton.fil=2)and(raton.col=4))or((raton.fil=3)and(raton.col=4))or((raton.fil=
4)and(raton.col=4))or((raton.fil=4)and(raton.col=5))then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.fil:=raton.fil-1;
end;
end;
Derecha:begin
raton.col:=raton.col+1;
if
((raton.fil=2)and(raton.col=2))or((raton.fil=2)and(raton.col=3))or((raton.fil=2)and(raton.col=4))or((raton.fil=3)and(raton.col=4))or((raton.fil=
4)and(raton.col=4))or((raton.fil=4)and(raton.col=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.col:=raton.col-1;
end;
end;
Izquierda:begin
raton.col:=raton.col-1;
if
((raton.fil=2)and(raton.col=2))or((raton.fil=2)and(raton.col=3))or((raton.fil=2)and(raton.col=4))or((raton.fil=3)and(raton.col=4))or((raton.fil=
4)and(raton.col=4))or((raton.fil=4)and(raton.col=5)) then
else
begin
ShowMessage('No puede pasar por las paredes');
raton.col:=raton.col+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:=Juego.Crear(Lab);
J.CrearLab(1);
end;
procedure TForm1.BIzqClick(Sender: TObject);
begin
J.MoverRaton(Izquierda);
end;
procedure TForm1.BArrClick(Sender: TObject);
begin
J.MoverRaton(Arriba);
end;
procedure TForm1.Bauto2Click(Sender: TObject);
begin
J.CrearLab(2);
J.Automatico();
end;
procedure TForm1.BAbaClick(Sender: TObject);
begin
J.MoverRaton(Abajo);
end;
procedure TForm1.BDerClick(Sender: TObject);
begin
J.MoverRaton(Derecha);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
J:=Juego.Crear(Lab);
J.CrearLab(2);
end;
procedure TForm1.BautoClick(Sender: TObject);
begin
J.CrearLab(1);
J.Automatico();
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 TLab.FormKeyDown(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
https://virtual.uagrm.edu.bo/pregrado/course/view.php?id=28094