📄 keypress.m
字号:
function keypress(handles);
ix=getappdata(handles.sudoku,'selected');
s0=getappdata(handles.sudoku,'s0');
s=getappdata(handles.sudoku,'s');
key=get(handles.sudoku,'currentcharacter');
if ix>0 && ismember(double(key),[28:31]),
[i,j]=ind2sub([9 9],ix);
if double(key)==28,
i=i-1;
elseif double(key)==29,
i=i+1;
elseif double(key)==30,
j=j-1;
else
j=j+1;
end
if i>=1 && i<=9 && j>=1 && j<=9,
ix=sub2ind([9 9],i,j);
highlight(handles,ix);
end
return
end
ix0=find(s0==0);
if ~ismember(ix,ix0),
return
end
h_text=getappdata(handles.sudoku,'h_text');
h_field=getappdata(handles.sudoku,'h_field');
if ismember(double(key),[8 32 48 127]),
s(ix)=0;
set(h_text(ix),'string','');
setappdata(handles.sudoku,'s',s);
elseif ismember(double(key),[49:57]),
st=s;
st(ix)=str2num(key);
[i,j]=ind2sub([9 9],ix);
[rok,ind]=rulesok(st,i,j);
set(h_text(ix),'string',key,'color',0.5*[1 1 1]);
if rok,
s(ix)=str2num(key);
setappdata(handles.sudoku,'s',s);
if ~any(s(:)==0),
t0=getappdata(handles.sudoku,'t0');
dt=etime(clock,t0);
t_h=floor(dt/(60*60));
t_m=floor((dt-t_h*(60*60))/60);
t_s=round(dt-t_h*(60*60)-t_m*60);
t_str=[];
if t_h>0,
t_str=[num2str(t_h) '小时 '];
end
if t_m>0,
t_str=[t_str num2str(t_m) '分钟 '];
end
t_str=[t_str num2str(t_s) '秒'];
cheated=getappdata(handles.sudoku,'cheated');
if cheated,
t_str=[t_str ',但是你作弊了!!!'];
end
h=msgbox(['你解决这道数独题用了' t_str],'太棒了!','modal');
uiwait(h);
end
else
set(h_field(ind),'facecolor',[1 0.8 0.8]);
drawnow;
pause(1);
set(h_field(ind),'facecolor','white');
set(h_text(ix),'string','');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -