function EdgeTiling(action)
global fig tiles tilenum numy BackTrackCost tile_soln;
clc;
%----------------------------------------------------------------------
if nargin < 1,
fig=figure( ...
'Name','Edge Tiling', 'NumberTitle','off', ...
'Visible','off', 'BackingStore','off','units','normalized');
tiles=mod(fix(100*rand(4,4)),10);
Total_Cost=costly(tiles)
[tile_soln,BackTrackCost]=BackTrackAlgo(tiles);
%drawing
for ii=1:2,
for jj=1:2,
c=0.5; %center
o=0.35;%offset
cx=ii-0.5; cy=jj-0.5;
x=[cx-c cx+c cx+c cx-c];
y=[cy-c cy-c cy+c cy+c];
xs=[x(1)+o x(2)-o x(3)-o x(4)+o];
ys=[y(1)+o y(2)+o y(3)-o y(4)-o];
tilenum(ii,jj)=patch(xs,ys,'w','ButtonDownFcn',{@board,ii,jj});
tiledef(ii-0.5,jj-0.5);
tile=tiles(2*(ii-1)+jj,:);
numy(2*(ii-1)+jj,1)=text((x(1)+x(2))/2,(o+y(1)+y(2))/2,sprintf('%1d',tile(1)),'color','k','fontsize',14);
numy(2*(ii-1)+jj,2)=text((-o+x(2)+x(3))/2,(y(2)+y(3))/2,sprintf('%1d',tile(2)),'color','k','fontsize',14);
numy(2*(ii-1)+jj,3)=text((x(3)+x(4))/2,(-o+y(3)+y(4))/2,sprintf('%1d',tile(3)),'color','k','fontsize',14);
numy(2*(ii-1)+jj,4)=text((o+x(4)+x(1))/2,(y(4)+y(1))/2,sprintf('%1d',tile(4)),'color','k','fontsize',14);
end
end
%creating default buttons
uicontrol('units','centimeters',...
'position',[4 0 0.8 0.6],'string','Intro',...
'callback','EdgeTiling(''Intro'')',...
'interruptible','on','BackgroundColor','w');
uicontrol('units','centimeters',...
'position',[6 0 0.8 0.6],'string','New',...
'callback','EdgeTiling(''New'')',...
'interruptible','on','BackgroundColor','w');
uicontrol('units','centimeters',...
'position',[8 0 0.8 0.6],'string','Soln',...
'callback','EdgeTiling(''Soln'')',...
'interruptible','on','BackgroundColor','w');
uicontrol('units','centimeters',...
'position',[10 0 0.8 0.6],'string','Exit',...
'callback','delete(gcf)',...
'interruptible','on','BackgroundColor','w');
figure(fig);
action='';
end
%--------------------------------------------------------------------------
if strcmp(action,'Intro')
%To Do...
msg={'Description of GAME: ',...
' ',...
'Objective: Minimize the Overall cost. ',...
' ',...
'Move: Rotate the Tile by clicking the white box at center. '...
' ',...
'Note: This game is a variant of Matlab game contest "Tiles".'};
msgbox(msg,'Edge Tiling Game','help');
scrsz = get(0,'ScreenSize');
Helpfig=figure('Name','Help','NumberTitle','off','Visible','off','BackingStore','off');
figure(Helpfig);
image(imread('intro.jpg'));
set(Helpfig,'Position',[scrsz(3)/10 scrsz(3)/20 scrsz(3)/2 scrsz(4)/1.2]);
axis off
if ~waitforbuttonpress, close(Helpfig); end
end
%--------------------------------------------------------------------------
if strcmp(action,'New')
tiles=mod(fix(100*rand(4,4)),10);
Total_Cost=costly(tiles)
[tile_soln,BackTrackCost]=BackTrackAlgo(tiles);
for ii=1:2,
for jj=1:2,
tile=tiles(2*(ii-1)+jj,:);
for kk=1:4,
set(numy(2*(ii-1)+jj,kk),'string',sprintf('%1d',tile(kk)));
end
end
end
end
%--------------------------------------------------------------------------
if strcmp(action,'Soln')
msg={'Backtracking is the best method to get solution.'};
msghand=msgbox(msg,'Edge Tiling Game Solution','help');
pause(2);
close(msghand);
for ii=1:2,
for jj=1:2,
tile=tile_soln(2*(ii-1)+jj,:);
for kk=1:4,
set(numy(2*(ii-1)+jj,kk),'string',sprintf('%1d',tile(kk)));
end
end
end
disp('Optimum Cost is:');
disp(BackTrackCost);
end
%--------------------------------------------------------------------------