博客
关于我
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/

你可能感兴趣的文章
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>