function KnightTour()
%Description:
%TRY TO COVER AS MUCH AS POSSIBLE WITH KNIGHT ON A CHESS BOARD.
%------------------------------------------------------------
clear all
clc
clf
%------------------------------------------------------------
%start
H = [2 1 -1 -2 -2 -1 1 2];
V = [-1 -2 -2 -1 1 2 2 1];
chess=ones(8,8);
disp(' White Horse -> Current Position')
disp(' RED Horse -> Possible Moves ')
disp(' Yellow Horse -> Already Stepped Move')
disp('\n')
disp(' Please wait 2 second for each step...')
rowposition=1+mod(fix(10*rand(1,1)),8);
columnposition=1+mod(fix(10*rand(1,1)),8);
move=0;
Button=1;
while Button==1
chess(rowposition,columnposition)=4;
chess_rep=chess;
chess_rep(rowposition,columnposition)=2;
possible=0;
for ii=1:8
rowmove=rowposition;
columnmove=columnposition;
rowmove=rowmove+V(ii);
columnmove=columnmove+H(ii);
if((rowmove>0 & columnmove>0) & (rowmove<9 & columnmove<9))
if chess_rep(rowmove,columnmove)~=4
chess_rep(rowmove,columnmove)=3;
possible=1;
end
end
end
Board(chess_rep);
if possible==0 bye(move); break; end
valid=0;
while valid==0
[Xnew Ynew Button] = ginput(1);
if Button~=1
bye(move);
valid=2;
break;
end
if Button==1
rowposition=ceil(Xnew/100);
columnposition=ceil(Ynew/100);
if((rowposition>0 & columnposition>0) & (rowposition<9 & columnposition<9))
if chess_rep(rowposition,columnposition)~=4
if chess_rep(rowposition,columnposition)==3
valid=1;
end
end
end
end
end
if move==64 bye(move); end
if valid==2 break; end
move=move+1;
end
%------------------------------------------------------------
%board
function Board(chess)
%------------------------------------------------------------
%getting board + horses
RH=imread('a.jpg');
RH=imresize(RH,[90 90],'bilinear'); %Red Horse
WH=imread('b.jpg');
WH=imresize(WH,[90 90],'bilinear'); %White Horse
YH=imread('c.jpg');
YH=imresize(YH,[90 90],'bilinear'); %Yellow Horse
CB=imread('h.jpg');
CB=imresize(CB,[800 800],'bilinear'); %Checker Board
CR=CB; %current display of board
pos=28:94:700; %co-ordinates
%------------------------------------------------------------
%display
clf
for ii=1:8
for jj=1:8
if chess(ii,jj)==2 CR(pos(jj)+1:pos(jj)+90,pos(ii)+1:pos(ii)+90,:)=RH; end
if chess(ii,jj)==3 CR(pos(jj)+1:pos(jj)+90,pos(ii)+1:pos(ii)+90,:)=WH; end
if chess(ii,jj)==4 CR(pos(jj)+1:pos(jj)+90,pos(ii)+1:pos(ii)+90,:)=YH; end
end
end
imshow(CR,'notruesize');
title('Knight Tour','fontsize',20,'color','b');
xlabel('Right click to exit');
t = 0 : 1/100 : 1;
sig = 0.4 * chirp(t,0,0.3,10000);
sound(sig,300,8)
%------------------------------------------------------------
%bye
function bye(move)
if move~=64
text(0,450,sprintf('%s','NICE TRY...'),'fontsize',25,'color','w');
text(0,300.0,sprintf('Number of moves is: %d',move),'fontsize',20,'color','w');
end
if move==64
text(2,450,sprintf('%s','EXCELLANT...'),'fontsize',25,'color','w');
end
pause(3);
close
clc
disp(' THANX 4 PLAYING')
%------------------------------------------------------------