博客
关于我
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中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>