我在Matlab中构建了一个5×5的迷宫,由按钮构成(每个按钮都是迷宫中的一块瓷砖)。开始的瓷砖是绿色的;最终的瓷砖是黄色的。打开的瓷砖是白色的,封闭的瓷砖(墙壁)是蓝色的。通过5乘5矩阵(A)预先分配颜色,白色= 0,蓝色= 1,黄色= 2,绿色= 3。 我的主要功能设置一个5乘5的矩阵A,然后调用一个函数" create_maze":
A = [0 3 0 1 0 ; 0 0 0 0 1 ; 1 0 0 0 1; 1 1 0 0 1; 1 0 2 0 0];
create_maze(A)
该功能也只能看到一些瓷砖,绿色瓷砖周围的瓷砖。
到目前为止一切顺利。现在我想点击白色瓷砖并出现相邻的瓷砖。 我想建立一个循环遍历所有按钮/磁贴的回调函数(所以我只需要编写一个函数)。 我已将所有按钮放在矩阵L中并设法为其设置回调函数。 该程序运行没有错误(所以回调有点工作)但是......没有任何反应!我不明白为什么。如果你能看一眼,我会非常感激!
这是我的函数create_maze:
function create_maze(A, varargin)
我设置了屏幕:
scr = get(0, 'screensize');
f1 = figure(1);
set(f1, 'menubar', 'none');
set(f1, 'position', [scr(1) scr(2) scr(3) scr(4)]);
创建25个按钮(对不起......)
h1 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'String', '',...
'Position', [200 200 100 100]);
h2 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [300 200 100 100]);
h3 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [400 200 100 100]);
h4 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [500 200 100 100]);
h5 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [600 200 100 100]);
h6 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [200 300 100 100]);
h7 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [300 300 100 100]);
h8 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [400 300 100 100]);
h9 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [500 300 100 100]);
h10 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [600 300 100 100]);
h11 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [200 400 100 100]);
h12 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [300 400 100 100]);
h13 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [400 400 100 100]);
h14 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [500 400 100 100]);
h15 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [600 400 100 100]);
h16 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [200 500 100 100]);
h17 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [300 500 100 100]);
h18 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [400 500 100 100]);
h19 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [500 500 100 100]);
h20 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [600 500 100 100]);
h21 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [200 600 100 100]);
h22 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [300 600 100 100]);
h23 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [400 600 100 100]);
h24 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [500 600 100 100]);
h25 = uicontrol('Style', 'pushbutton',...
'BackgroundColor', [0.91 0.91 0.91],...
'Position', [600 600 100 100]);
将按钮放在矩阵L
中 L = [h1 h2 h3 h4 h5; h6 h7 h8 h9 h10;h11 h12 h13 h14 h15;...
h16 h17 h18 h19 h20; h21 h22 h23 h24 h25];
设置按钮的颜色和......
for i = 1: size(A,1) % rows
for j = 1: size(A,2) % columns
if A(i,j) == 0
set(L(i,j),'BackgroundColor', 'w')
set(L(i,j), 'visible', 'off')
elseif A(i,j) == 1
set(L(i,j),'BackgroundColor','b')
set(L(i,j), 'visible', 'off')
elseif A(i,j) == 2
set(L(i,j),'BackgroundColor','y')
set(L(i,j),'String','GOAL')
set(L(i,j), 'visible', 'on')
elseif A(i,j) == 3
set(L(i,j),'BackgroundColor','g')
end
end
...只显示一些按钮(绿色周围的按钮):
for i = 1: size(A,1) % rows
for j = 1: size(A,2) % columns
if (1 < i) && A(i-1,j) == 3 ||...
(1 < j) && A(i,j-1) == 3
set(L(i,j), 'visible', 'on')
elseif (i < length(A)) && A(i+1,j) == 3 ||...
(j < length(A)) && A(i,j+1) == 3
set(L(i,j), 'visible', 'on')
end
end
end
end
将回调设置为矩阵L
set(L(i,j),'callback',{@my_funct,L,A});
设置回调函数
function [] = my_funct(source, callbackdata,L,A)
以下是完整的循环,应该使我点击的瓷砖旁边的瓷砖可见,但没有任何反应(我也没有得到任何错误)。
for i = 1: size(A,1) % rows
for j = 1: size(A,2) % columns
if (1 < i) && A(i,j) == 0 ||...
(1 < j) && A(i,j) == 0
set(L(i,j-1), 'visible', 'on')
elseif (1 < i) && A(i,j) == 0 ||...
(1 < j) && A(i,j) == 0
set(L(i-1,j), 'visible', 'on')
elseif (i < length(A)) && A(i,j) == 0 ||...
(j < length(A)) && A(i,j) == 0
set(L(i+1,j), 'visible', 'on')
elseif (i < length(A)) && A(i,j) == 0 ||...
(j < length(A)) && A(i,j) == 0
set(L(i,j+1), 'visible', 'on')
end
end
end
end
end