博客
关于我
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 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>