Tres en Raya Matlab

function [ ] = enraya( ) % Funcion tres en raya sobre consola MatLab %Copyright (C) 2012 Jorge Crespo bajo licencia BSD

Views 127 Downloads 7 File size 17KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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