No BSD License  

Highlights from
Knight_Tour

image thumbnail
from Knight_Tour by Krishna Lalith
can u cover a checker board with one knight?

KnightTour()
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')
%------------------------------------------------------------

Contact us at files@mathworks.com