Вы находитесь на странице: 1из 10

function [ ] = enraya( )

% Funcion tres en raya sobre consola MatLab


%Copyright (C) 2012 Jorge Crespo bajo licencia BSD
%Copyright (C) 2012 Jorge Crespo under license BSD
%Saludo y variables iniciales
fprintf '\n'
fprintf 'Bienvenido al 3 en raya sobre MatLab en consola, el original \n'
fprintf '\n'
jug=0;
Stop=0;
A=[0 0 0;0 0 0;0 0 0];
contador=0;
jugando=0;
%Se repite ste ciclo en cada jugada
while Stop==0
%Seleccin del modo de juego
if jugando==0
modo=input ('Introduzca el modo de juego que desea; 1 para un ju
gador, 2 para dos jugadores y 3 para salir: ');
end
%Si seleccionas salir, se sale del ciclo de arriba
if modo==3
Stop=1;
jugando=3;
end
%Modo de un jugador
if modo==1

%Mensaje de inicio
if jugando==0
fprintf ('Ha seleccionado el modo de un jugadores. Usted
es el jugador uno y la mquina el dos. El primer turno ser suyo \n', jug);
end
jugando=1;

%Cambio de jugador en cada turno
if jug==1
jug=2;
else;
jug=1;
end

%Introduccin de casilla del jugador 1 (Humano)
if jug==1
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', jug);
fila=input ('Introduzca la FILA donde colocar su ficha:
');
columna=input ('Introduzca la COLUMNA donde colocar su f
icha: ');
fprintf '\n'
end

%Sistema de IA para seleccionar la casilla por la mquina
%Hace una serie de pruebas y cuando una tiene xito no hace las s
iguientes
if jug==2
fprintf '\n'
fprintf ('Turno de la mquina \n', jug);
fprintf '\n'
calcula_posicion=0;
while calcula_posicion==0
prueba=1;
%En la prueba uno comprueba si la casilla centra
l est ocupada, si no lo est, la selecciona
if prueba==1
if A(2,2)==0
fila=2;
columna=2;
prueba=0;
calcula_posicion=1;
else
prueba=2;
end
end

%En la prueba dos primero comprueba si ocupando
alguna casilla puede ganar y despus
%Si el jugador uno puede ganar ocupando alguna o
tra
if prueba==2
fila=0;
columna=0;
if A(2,2)==jug
if A(1,2)==jug
filapr=3;
columnapr=2;
if A(filapr,columnapr)==
0
fila=3;
columna=2;
end
end
if A(3,2)==jug
filapr=1;
columnapr=2;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(2,1)==jug
filapr=2;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(2,3)==jug
filapr=2;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(1,1)==jug
filapr=3;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(3,3)==jug
filapr=1;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(3,1)==jug
filapr=1;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(1,3)==jug
filapr=3;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
end
if A(1,1)==jug
if A(1,2)==jug
filapr=1;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(1,3)==jug
filapr=1;
columnapr=2;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(2,1)==jug
filapr=3;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(3,1)==jug
filapr=2;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end

end
if A(3,3)==jug
if A(3,2)==jug
filapr=3;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(3,1)==jug
filapr=3;
columnapr=2;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(2,3)==jug
filapr=1;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(1,3)==jug
filapr=2;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
end
if A(1,3)==jug
if A(1,2)==jug
filapr=1;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(2,3)==jug
filapr=3;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
end
if A(3,1)==jug
if A(2,1)==jug
filapr=1;
columnapr=1;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
if A(3,2)==jug
filapr=3;
columnapr=3;
if A(filapr,columnapr)==
0
fila=filapr;
columna=columnap
r;
end
end
end
%Si existe alguna combinacin para ganar,
se selecciona esa casilla
if fila~=0
prueba=0;
calcula_posicion=1;
jug=2;
else
if jug==2
jug=1;
prueba=2;
else
jug=2;
prueba=3;
end
end
end

%Si no encuentra nada en la prueba 2, o si se en
cuentra algo y la casilla est ocupada, pasa a la prueba 3
if fila ~=0
if A(fila,columna)~=0
prueba=3;
calcula_posicion=0;
end
end


%En la prueba 3 busca una casilla aleatoria, y s
i sta est ocupada vuelve a probar
if prueba==3
if fila==0
fila=2;
columna=2;
end

while A(fila,columna)~=0
fila = (fix(rand(1)*2.99))+1;
columna = (fix(rand(1)*2.99))+1;
end
calcula_posicion=1;
prueba=4;
end
end
end


%Si la casilla seleccionada por la mquina o la persona est libre
, la ocupa
if A(fila,columna)==0
A(fila,columna)=jug;
contador=contador+1;

%Dibuja la matriz en la consola
for i=1:3
fprintf ('%4.0f%4.0f%4.0f\n',A(i,1),A(i,2),A(i,3
))
fprintf '\n'
end

%Comprueba si el jugador que acaba de ocupar una casilla
ha ganado
if A(2,2)==jug
if A(1,2)==jug
if A(3,2)==jug
Stop=jug;
end
end
if A(2,1)==jug
if A(2,3)==jug
Stop=jug;
end
end
if A(1,1)==jug
if A(3,3)==jug
Stop=jug;
end
end
if A(3,1)==jug
if A(1,3)==jug
Stop=jug;
end
end
end
if A(1,1)==jug
if A(1,2)==jug
if A(1,3)==jug
Stop=jug;
end
end
if A(2,1)==jug
if A(3,1)==jug
Stop=jug;
end
end
end
if A(3,3)==jug
if A(3,2)==jug
if A(3,1)==jug
Stop=jug;
end
end
if A(2,3)==jug
if A(1,3)==jug
Stop=jug;
end
end
end

%Si ste ha sido el noveno movimiento, acaba la partida
if contador==9 & Stop==0
Stop=3;
end
%Si la casilla estaba ocupada, te penaliza con una prdida de tur
no
else
fprintf '\n'
fprintf 'Esa casilla estaba ocupada, por listo pierdes e
l turno \n'
fprintf '\n'
end
%Si ha ganado alguien o la partida ha acabado muestra un mensaje
if Stop==1
jugando=0;
fprintf 'Gana el jugador 1 \n'
end
if Stop==2
jugando=0;
fprintf 'Gana el jugador 2 \n'
end
if Stop==3
jugando=0;
fprintf 'Todo el mundo pierde \n'
end
%Acaba el cdigo para el modo de un jugador
end
%Modo de dos jugadores
if modo==2
%Mensaje de inicio
if jugando==0
fprintf ('Ha seleccionado el modo de dos jugadores. El p
rimer turno ser del jugador 1 \n', jug);
end

jugando=1;
%Cambio de jugadores en cada ronda
if jug==1
jug=2;
else;
jug=1;
end
%Mensajes pidiendo la introduccin de la fila y columna, se muest
ran en cada ronda y cada vez para un jugador
fprintf '\n'
fprintf ('Turno del jugador %1.0f \n', jug);
fila=input ('Introduzca la FILA donde colocar su ficha: ');
columna=input ('Introduzca la COLUMNA donde colocar su ficha: ')
;
fprintf '\n'

%Comprueba si la casilla seleccionada est ocupada, y si no la se
lecciona
if A(fila,columna)==0
A(fila,columna)=jug;
contador=contador+1;

%Muestra la matriz en consola
for i=1:3
fprintf ('%4.0f%4.0f%4.0f\n',A(i,1),A(i,2),A(i,3
))
fprintf '\n'
end

%Comprueba si el jugador que acaba de ocupar una casilla
ha ganado
if A(2,2)==jug
if A(1,2)==jug
if A(3,2)==jug
Stop=jug;
end
end
if A(2,1)==jug
if A(2,3)==jug
Stop=jug;
end
end
if A(1,1)==jug
if A(3,3)==jug
Stop=jug;
end
end
if A(3,1)==jug
if A(1,3)==jug
Stop=jug;
end
end
end
if A(1,1)==jug
if A(1,2)==jug
if A(1,3)==jug
Stop=jug;
end
end
if A(2,1)==jug
if A(3,1)==jug
Stop=jug;
end
end
end
if A(3,3)==jug
if A(3,2)==jug
if A(3,1)==jug
Stop=jug;
end
end
if A(2,3)==jug
if A(1,3)==jug
Stop=jug;
end
end
end

%Si ste ha sido el noveno movimiento, acaba la partida
if contador==9 & Stop==0
Stop=3;
end
%Si la casilla estaba ocupada, te penaliza con una prdida de tur
no
else
fprintf '\n'
fprintf 'Esa casilla estaba ocupada, por listo pierdes e
l turno \n'
fprintf '\n'
end
%Si ha ganado alguien o la partida ha acabado muestra un mensaje
if Stop==1
jugando=0;
fprintf 'Gana el jugador 1 \n'
end
if Stop==2
jugando=0;
fprintf 'Gana el jugador 2 \n'
end
if Stop==3
jugando=0;
fprintf 'Todo el mundo pierde \n'
end
%Acaba el cdigo para el modo de un jugador
end
end
end

Вам также может понравиться