kkdjm 2021-04-26 10:51 采纳率: 100%
浏览 132
已采纳

Matlab拼图游戏显示不全,无法操作

clear;clc;close all;

N=3;%The order of the puzzle
eval(['pic=imread("M',num2str(N),'.png");']);%Read the pictures
S=size(pic);
SL=min(S(1:2));
SL=SL-mod(SL,N);
partS=SL/N;

Arr0=zeros(N,N);%Record the original position of each block of the picture

%Cut the picture into N*N blocks
for i=1:N
    for j=1:N;
        id=i*10+j;
        eval(['pic',num2str(id),'=pic(',num2str((i-1)*partS+1),':',num2str(i*partS),...
            ',',num2str((j-1)*partS+1),':',num2str(j*partS),',:);']);
        Arr0(i,j)=id;
    end
end
Arr=Arr0;%record
eval(['pic',num2str(11*N),'=ones(size(pic11));']);%The last block is set to white

p=[N,N];%Record the position of the white square
%Jigsaw random shuffle
for i=1 : 5 * N^3
    aa=rand();
    if aa<0.25 && p(1)>1
        ARR=Arr(p(1)-1,p(2));
        Arr(p(1)-1,p(2))=Arr(p(1),p(2));
        Arr(p(1),p(2))=ARR;
        p(1)=p(1)-1;
    end
    if aa>=0.25&& aa<0.5&& p(1)<N
        ARR=Arr(p(1)+1,p(2));
        Arr(p(1)+1,p(2))=Arr(p(1),p(2));
        Arr(p(1),p(2))=ARR;
        p(1)=p(1)+1;
    end
    if aa>=0.5&&aa<0.75&&p(2)>1
        ARR=Arr(p(1),p(2)-1);
        Arr(p(1),p(2)-1)=Arr(p(1),p(2));
        Arr(p(1),p(2))=ARR;
        p(2)=p(2)-1;
    end
    if aa>=0.75&&p(2)<N
        ARR=Arr(p(1),p(2)+1);
        Arr(p(1),p(2)+1)=Arr(p(1),p(2));
        Arr(p(1),p(2))=ARR;
        p(2)=p(2)+1;
    end
end
%Finally, adjust the white block to the lower right corner
P=p;
if p(1)<N
    for i=1:N-P(1)
        ARR=Arr(p(1)+1,p(2));
        Arr(p(1)+1,p(2)) = Arr(p(1),p(2));
        Arr(p(1),p(2)) = ARR;
        p(1)=p(1)+1;
    end
end
if p(2)<N
    for j=1:N-P(2)
      ARR=Arr(p(1),p(2)+1);
        Arr(p(1),p(2)+1) = Arr(p(1),p(2));
        Arr(p(1),p(2)) = ARR;
        p(2)=p(2)+1;  
    end
end

%Displays the scrambled image
figure;
FP=0.8;
set(gcf,'position',[200,100,min(SL,500),min(SL,500)]);
for i=1 : N
    for j=1 : N
        axes('Position',[(1-FP)/2+(j-1)*FP/N,1-(1-FP)/2-i*FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(i,j)),')']);
    end
end
kk=0;
save Date SL N p Arr* FP pic*kk

%Keyboard control
set(gcf,'KeyPressFcn',@key)
function key(~,event)
load('Data');
%FS=32768
%t=0:1/FS:0.1;
switch event.Key
    case'downarrow'
        if p(1)>1
            ARR=Arr(p(1)-1,p(2));
            Arr(p(1)-1,p(2))=Arr(p(1),p(2));
            Arr(p(1),p(2))=ARR;
            p(1)=p(1)-1;
            %kk=kk+1
            %f=HYLQP(kk);
            %y=sin(2*pi*f*t)
            %sound(y,Fs)
            axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
            eval(['imshow(pic',num2str(Arr(p(1),p(2))),')']);
            axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-(p(1)+1)*FP/N,FP/N,FP/N,FP/N]);
            eval(['imshow(pic',num2str(Arr(p(1)+1,p(2))),')']);
        end
    case 'uparrow'
        if p(1)<N
            ARR=Arr(p(1)+1,p(2));
            Arr(p(1)+1,p(2))=Arr(p(1),p(2));
            Arr(p(1),p(2))=ARR;
            p(1)=p(1)+1;
            %kk=kk+1
            %f=HYLQP(kk);
            %y=sin(2*pi*f*t)
            %sound(y,Fs)
        axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1),p(2))),')']);
        axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-(p(1)-1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1)-1,p(2))),')']);
    end
    case 'rightarrow'
        if p(2)>1
            ARR=Arr(p(1),p(2)-1);
            Arr(p(1),p(2)-1)=Arr(p(1),p(2));
            Arr(p(1),p(2))=ARR;
            p(2)=p(2)-1;
            %kk=kk+1
            %f=HYLQP(kk);
            %y=sin(2*pi*f*t)
            %sound(y,Fs)
        axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1),p(2))),')']);
        axes('Position',[(1-FP)/2+p(2)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1),p(2)+1)),')']);
    end
    case'leftarrow'
        if p(2)<N
            ARR=Arr(p(1),p(2)+1);
            Arr(p(1),p(2)+1)=Arr(p(1),p(2));
            Arr(p(1),p(2))=ARR;
            p(2)=p(2)+1;
             %kk=kk+1
            %f=HYLQP(kk);
            %y=sin(2*pi*f*t)
            %sound(y,Fs)
        axes('Position',[(1-FP)/2+(p(2)-1)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1),p(2))),')']);
        axes('Position',[(1-FP)/2+(p(2)-2)*FP/N,1-(1-FP)/2-p(1)*FP/N,FP/N,FP/N,FP/N]);
        eval(['imshow(pic',num2str(Arr(p(1),p(2)-1)),')']);
        end
end
%To judge whether it was successful
if isequal (Arr,Arr0)
    axes('Position',[(1-FP)/2,(1-FP)/2,FP,FP]);
    imshow(pic(1:SL,1:SL,:));
    title('Love!');
end
save Data N p Arr FP kk -append
end


    
        一运行就出现这种,图片显示也不全,键盘也无法操作,请问怎么解决?

不应该出现pic0 Arr的矩阵因该全部在11以上不知道怎么改

第一个问题已经解决,现在键盘无法使用如何解决

  • 写回答

2条回答 默认 最新

  • CSDN专家-孙老师 2021-04-26 17:30
    关注

    检查一下这行代码:

    eval(['imshow(pic',num2str(Arr(i,j)),')']);

    imshow里面传入的是图片名称吗?如果是,看是不是少了图片后缀名。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入