博客
关于我
matlab 汉诺塔
阅读量:220 次
发布时间:2019-02-28

本文共 4557 字,大约阅读时间需要 15 分钟。

matlab 版的汉诺塔

游戏效果如下在这里插入图片描述
只做了一层到五层的
可以复制下来玩玩试试~

function hano(level)if nargin < 1   level = 5;endhold on,axis equalaxis(0.5+[0,60,0,30])set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')set(gca,'color','k')ground=[60.5,1.5;60.5,0.5;0.5,0.5;0.5,1.5];column_1=[10.5,1.5;10.5,20;9.5,20;9.5,1.5];column_2=[30.5,1.5;30.5,20;29.5,20;29.5,1.5];column_3=[50.5,1.5;50.5,20;49.5,20;49.5,1.5];step=0;arrow=[1];A=[];B=[];C=[];A=level:-1:1;block_1=@(l,h)[10+2*l,3*h-1;10+2*l,3*h+1;10-2*l,3*h+1;10-2*l,3*h-1];block_2=@(l,h)[30+2*l,3*h-1;30+2*l,3*h+1;30-2*l,3*h+1;30-2*l,3*h-1];block_3=@(l,h)[50+2*l,3*h-1;50+2*l,3*h+1;50-2*l,3*h+1;50-2*l,3*h-1];block__=@(l,p)[p+2*l,25-1;p+2*l,25+1;p-2*l,25+1;p-2*l,25-1];set(gcf, 'KeyPressFcn', @key);
function draw(~,~)        delete(findobj(gcf,'type','text'))        delete(findobj(gcf,'type','patch'))        text(5,-2,'step=')        text(12,-2,num2str(step))        text(5,-6,'level=')        text(12,-6,num2str(level))        text(20,-2,'use the key(\leftarrow \rightarrow) to move the claw')        text(20,-6,'use the key(\uparrow \downarrow) to pick or land the block')        fill(ground(:,1),ground(:,2),'w','EdgeColor','none')        fill(column_1(:,1),column_1(:,2),'w','EdgeColor','none')        fill(column_2(:,1),column_2(:,2),'w','EdgeColor','none')        fill(column_3(:,1),column_3(:,2),'w','EdgeColor','none')        text(20*arrow(1)-10-1,30,'\downarrow','Color','w','Fontsize',25)        if length(arrow)==2            p=20*arrow(1)-10;            block=block__(arrow(2),p);            fill(block(:,1),block(:,2),'w','EdgeColor','none')          end        for i=1:length(A)            block=block_1(A(i),i);            fill(block(:,1),block(:,2),'w','EdgeColor','none')           end        for i=1:length(B)            block=block_2(B(i),i);            fill(block(:,1),block(:,2),'w','EdgeColor','none')           end        for i=1:length(C)            block=block_3(C(i),i);            fill(block(:,1),block(:,2),'w','EdgeColor','none')           end        if length(C)==level            buttonName1=questdlg('Congratulations! You win','you win','close','restart','next level','close');            if isempty(buttonName1)                buttonName1='end';            end            if strcmp(buttonName1,'restart')                hano(level)            end            if strcmp(buttonName1,'close')                close;            end            if strcmp(buttonName1,'next level')                if level<5                    hano(level+1)                end                if level==5                    msgbox('it is already the highest level')                end            end        end    end
function key(~,event)   switch event.Key       case 'leftarrow'           if arrow(1)-1~=0               arrow(1)=arrow(1)-1;step=step+1;           end       case 'rightarrow'           if arrow(1)-3~=0               arrow(1)=arrow(1)+1;step=step+1;           end       case 'uparrow'           if length(arrow)==1               if (arrow(1)==1)&&(~isempty(A))                   arrow=[arrow(1),A(end)];                   A(end)=[];               end               if (arrow(1)==2)&&(~isempty(B))                   arrow=[arrow(1),B(end)];                   B(end)=[];               end               if (arrow(1)==3)&&(~isempty(C))                   arrow=[arrow(1),C(end)];                   C(end)=[];               end           end       case 'downarrow'           if length(arrow)==2               if (arrow(1)==1)                   if isempty(A)                       A=[A,arrow(2)];                       arrow(2)=[];                   else                       if A(end)>arrow(2)                           A=[A,arrow(2)];                           arrow(2)=[];                       end                   end               end               if (arrow(1)==2)                   if isempty(B)                       B=[B,arrow(2)];                       arrow(2)=[];                   else                       if B(end)>arrow(2)                           B=[B,arrow(2)];                           arrow(2)=[];                       end                   end                          end               if (arrow(1)==3)                   if isempty(C)                       C=[C,arrow(2)];                       arrow(2)=[];                   else                       if C(end)>arrow(2)                           C=[C,arrow(2)];                           arrow(2)=[];                       end                   end               end           end   end   draw()   enddraw()end

把这三段都复制下来放在同一个m文件里即可 。

转载地址:http://fjls.baihongyu.com/

你可能感兴趣的文章
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>