image thumbnail
from Edge Tiling by Krishna Lalith
Minimize overall cost for a given box filled with numbered tiles.

EdgeTiling(action)
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
%--------------------------------------------------------------------------

Contact us