Matlab - Proyecto.. Juego Policia Ladron!

 
Vista:

Proyecto.. Juego Policia Ladron!

Publicado por Patricia (2 intervenciones) el 04/03/2010 03:55:32
Implementación del juego Policía-Ladrón
Descripción del juego Policía-Ladrón
La idea del juego es atrapar un ladrón, controlado por el computador, que está tratando de
escapar de uno o dos policías que son controlados por el jugador. El juego se desarrolla sobre un
tablero cuadriculado donde cada personaje ocupa una sola casilla y solo se permite un personaje por
casilla. Se desarrolla por turnos, en cada turno, el jugador mueve los policías una casilla cada uno y
luego de su turno, el computador mueve al ladrón en modo de no hacerse atrapar por los policías. El
juego se acaba cuando en el turno del jugador, uno de los policías se mueve a la casilla que ocupa el
ladrón.
Parte 1
El miniproyecto consta en escribir un script de Matlab donde se implementa el juego Policía-
Ladrón. Los parámetros de entrada para el script son:
1. M, N: Tamaños (fila y columna) de la tabla de juego.
2. P: Numero de policías que figuran en el juego (1 o 2)
A partir de los parámetros M, N se construye el tablero del juego (matriz MxN) donde se posicionan de
manera aleatoria (el)los policía(s) (jugador) y el único ladrón (computadora) de manera que se cumplan
los siguientes requisitos: (a) los policías no estén en la misma casilla, y (b) la posición del ladrón con
respecto a (el)los policía(s) diste de por lo menos dos posiciones, a tal efecto de evitar que (el) los
policía(s) atrape(n) el ladrón en la primera (y única) jugada.
Para cada jugada se debe imprimir en un lienzo (plot) la situación posicional del juego (las
posiciones de (el) los policía(s) y el ladrón), utilizando el comando imagesc, con las siguientes
restricciones:
1. La posición que ocupa el primer policía en el tablero (matriz) tiene valor 0
2. Si juega el policía 2, su respectiva posición tiene valor 25
3. La casilla del tablero donde esta el ladrón tiene valor 100
4. Todas las demás casillas vacías tienen valor 53
5. Las casillas que muestran los posibles movimientos de los policías tienen valor 60 y su uso se
explicará brevemente.
Una vez posicionado(s) el (los) policía(s) y el ladrón en el tablero, se pide a través de la consola
donde efectuar la siguiente jugada, es decir, donde mover (el) los policía(s). Con el comando input, se
pide al jugador entrar en la consola la dirección que quiere que (el) los policía(s) se mueva(n)
especificando la posición a jugar con las coordenadas “n” para norte, “s” para sur, “e” para este y “o”
para oeste con respecto a su(s) posición(es) actual(es). Si el usuario ingresa la letra “q” se termina
prematuramente el juego, para cualquier otro caso se vuelve a pedir una entrada valida. Con la
información ingresada se actualiza el tablero, esto involucra los siguientes subpasos:
(a) Se calcula la nueva posición del ladrón, es decir, Ud. debe calcular cual es la dirección (n,s,e,o)
mas favorable que el ladrón debe tomar para que no sea atrapado.
(b) Se muestra la situación posicional actualizada en el mismo lienzo
(c) Se espera a que el usuario ingrese su próxima jugada, teniendo en cuenta que si en la jugada
anterior uno de los policías atrapa el ladrón el juego se acaba, además si en el juego figuraron
dos policías, se tiene que indicar en la consola cual de ellos fue quien lo atrapó.
A titulo de ejemplo, se muestra en la figura siguiente el tablero de juego con dos policías
(azules), un ladrón (rojo) y los posibles movimientos de ambos policías
La idea del apartado (5) de la lista anterior es mostrar visualmente cuales son los posibles
movimientos permitidos al jugador. Hay que tomar en cuenta un caso especial y es cuando los dos
policías están distanciados por una sola casilla: hay que tener cuidado que ambos policías no se
posicionen sobre la misma casilla (esto se conoce como colisión). La secuencia de manejo de la entrada
(input) tiene que ser capaz de identificar esta situación y no permitir que el usuario colisione sus dos
policías. Es fundamental que estos cuadros amarillos no se dibujen sobre los personajes del juego.
Parte 2
La idea de esta parte es que al finalizar cada partida, mostrarle al usuario un histograma de la
distancia a la que estuvo la policía en atrapar al ladrón (para cada turno), es decir, se quiere visualizar
gráficamente cuantas veces a lo largo de la duración del juego (en turnos) estuvo la policía a una
distancia de 1,2,3,4,5,6 o más pasos de atrapar al ladrón. Considere la distancia de cada policía al
ladrón por separado, sin embargo, utilice ambos datos para construir el histograma.
Veamos un ejemplo:
Supongamos que una partida de dos policías (y el ladrón) tiene una duración de 10 turnos y la
siguiente tabla muestra las distancia de cada policía al ladrón (en casillas) para cada uno de los turnos:
Turno Distancia(policía1, ladrón) Distancia(policía2, ladrón)
1 5 6
2 4 7
3 3 6
4 3 5
5 2 3
6 3 2
7 2 1
8 1 2
9 2 1
10 1 0
De la tabla anterior es fácil verificar que el policía 2 atrapó al ladrón, a continuación se muestra el
histograma de interés:
Distancia Frecuencia
0 1 Ignorar
1 4
2 5
3 4
4 1
5 2
6 o más 3
Una vez que se tienen las frecuencias para cada distancia, lo que falta es graficar en un nuevo lienzo
estas frecuencias con barras (ver la ayuda del comando bar y/o plot).
Parte 3 (Opcional, valor 2 puntos)
Luego de finalizada la partida, se desea dar al usuario la oportunidad de reproducir todo el
juego desde el principio (como si fuera una animación), mostrando cada turno por pantalla y esperando
que el usuario presione la tecla Enter para mostrar el siguiente turno.
Ayuda: en cada turno guarde en varios vectores adicionales las coordenadas X e Y de cada policía y del
ladrón, para luego a partir de esta información reconstruir la matriz de situación posicional. Vea la
ayuda del comando pause. Al igual que la parte primera, grafique la matriz de situación posicional con
el comando imagesc.
Observaciones
1. El proyecto es totalmente individual, lo ideal es que cada estudiante resuelva e implemente el
proyecto por si solo. Como el proyecto es para la casa, no se les puede impedir que se reúnan
con sus compañeros para discutir los problemas, que consulten internet o cualquier otro medio
de información. Lo que si pido al estudiante es que sea lo suficientemente honesto y al
momento de desarrollar el script lo haga COMPLETAMENTE SOLO.
2. Dada la naturaleza de este proyecto la evaluación será de carácter estricta, es decir, se espera
que todos los proyectos entregados tengan funcionalidad completa. ADVERTENCIA: El
proyecto no se corregirá si la parte de entrega obligatoria no está completa.
3. La entrega se hará a través del casillero del aula virtual a su respectivo preparador.
4. Se recomienda que documente detalladamente su archivo de código, explicando cada parte.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:Proyecto.. Juego Policia Ladron!, La Solución

Publicado por Dave (1094 intervenciones) el 04/03/2010 05:31:53
Hola Patricia,

Tu proyecto es verdaderamente interesante, pero no complicado, solo se necesita un poco de tiempo, ingenio, y capacidad de programación, por lo cual deseo dejar abierta la disponibilidad de brindar mis servicios de programación en Matlab para cualquier tipo de ayuda.

Saludos
Dave

Email: [email protected]
Cel: 0051-1-975492021
RPM: *792021
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Proyecto.. Juego Policia Ladron!, La Solución

Publicado por patricia (2 intervenciones) el 04/03/2010 17:48:46
Hola se;or Dave como se encuentra? ese es el problema no tengo tantos conocimientos para realizar ese programa seria que usted me podria ayudar.

Disculpe el abuso.
Gracias
Patricia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:Proyecto.. Juego Policia Ladron!, La Solución

Publicado por Dave (1094 intervenciones) el 11/03/2010 22:28:02
Hola Patricia,

Aqui un avance de la implementacion de esta curioso juego, me agrado que tome un tiempo para programar una parte del requerimiento.

Espero que sea de alguna ayuda.

Saludos,
Dave

Email: [email protected]

................................................................................

clear all,clc,close all

% Determina el numero de filas y columnas

nf=100;

nc=50;

% Determina el numero de policias

np=2;


disp('Juego de Policias y ladron')

disp('**************************')

disp(' ')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[fil,col]=meshgrid(1:nf,1:nc);


for n=1:np

xp(n)=ceil(max(max(fil))*rand);

yp(n)=ceil(max(max(col))*rand);

end


if np==2

while or(xp(1)==xp(2),yp(1)==yp(2))



for n=1:np

xp(n)=ceil(max(max(fil))*rand);

yp(n)=ceil(max(max(col))*rand);

end

end

end


xlad=ceil(max(max(fil))*rand);

ylad=ceil(max(max(col))*rand);


for n=1:np

dist(n)=sqrt((xp(n)-xlad)^2+(yp(n)-ylad)^2);

end


if np==1



while or(dist<=4)

xlad=ceil(max(max(fil))*rand);

ylad=ceil(max(max(col))*rand);

dist=sqrt((xp-xlad)^2+(yp-ylad)^2);

end


elseif np==2



while or(dist(1)<=4,dist(2)<=4)

xlad=ceil(max(max(fil))*rand);

ylad=ceil(max(max(col))*rand);


for n=1:np

dist(n)=sqrt((xp(n)-xlad)^2+(yp(n)-ylad)^2);

end


end

end


%% seccion de colores

tabla=53*ones(nc,nf);

tabla(ylad,xlad)=100;


for n=1:np

if n==1

tabla(yp(n),xp(n))=0;

elseif n==2

tabla(yp(n),xp(n))=25;

end

end


figure(1)

imagesc(tabla)


opc='s';

while or(opc~='q',opc~='Q')


for n=1:np

disp(['Movimiento del policia ',num2str(n)])

opc= input('Ingresar n para norte, s para sur, e para este y o para oeste: ','s');

disp(' ')

switch opc

case {'n','N'}

iy=-1; ix=0;

case {'s','S'}

iy=1; ix=0;

case {'e','E'}

iy=0; ix=1;

case {'o','O'}

iy=0; ix=-1;

case {'q','Q'}

disp('Termino el juego')

return

otherwise

disp('No genera desplazamiento')

end



xp(n)=xp(n)+ix;

yp(n)=yp(n)+iy;

end




if or(opc~='q',opc~='Q')

disp(['Movimiento del ladron '])

opc= input('Ingresar n para norte, s para sur, e para este y o para oeste: ','s');

disp(' ')

switch opc

case {'n','N'}

iy=-1; ix=0;

case {'s','S'}

iy=1; ix=0;

case {'e','E'}

iy=0; ix=1;

case {'o','O'}

iy=0; ix=-1;

case {'q','Q'}

return

otherwise

disp('No genera desplazamiento')

end



xlad=xlad+ix;

ylad=ylad+iy;

else

disp('Termino el juego')

end



%% seccion de colores

tabla=53*ones(nc,nf);

tabla(ylad,xlad)=100;


for n=1:np

if n==1

tabla(yp(n),xp(n))=0;

elseif n==2

tabla(yp(n),xp(n))=25;

end

end


figure(1)

imagesc(tabla)



end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar