function varargout = dafei08(varargin)
%按键说明:
%W、向上箭头、小键盘5:变换形状;
%A、向左箭头、小键盘1:左移;
%S、向下箭头、小键盘2:快速下移;
%D、向右箭头、小键盘3:右移;
%空格键:暂停。
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @dafei08_OpeningFcn, ...
'gui_OutputFcn', @dafei08_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function dafei08_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
global shapes px py shape_colors nt1 nt nn2 fenshu xianjian jinyong nn np cg_flag pach ao tt
tt=0;
[xianjian,Fs,bits] = wavread('xianjian.wav');
[jinyong,Fs,bits] = wavread('jinyong.wav');
try
load('fenshu');
catch
a1=0;
a2=0;
a3=0;
save('fenshu','a1','a2','a3');
end
str1=sprintf('第一名:%6.0f',a1);
str2=sprintf('第二名:%6.0f',a2);
str3=sprintf('第三名:%6.0f',a3);
set(handles.fen_shu,'string',{str1;str2;str3})
pach=zeros(1,4);
cg_flag=0;%闯关模式标志
nn=3000;%每3000次定时计数后增加两行
nn2=0;
np=7;%图形样式种数的选择
nt1=0;
nt=16;%下移控制
fenshu=0; %分数值
line('parent',handles.axes1,'xdata',[0,10,10,0,0],'ydata',[0,0,18,18,0])%方框
shapes=zeros(2,5,20,4);
shapes(:,:,:,1) = reshape([-1 0 0 0 0 1 1 0 0 0 -1 0 0 0 1 0 2 0 0 0 ...
0 2 0 1 0 0 1 0 0 0 -1 0 0 0 0 1 1 1 0 0 ...
1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 -1 -1 -1 0 0 ...
-1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 -1 0 0 0 0 ...
0 1 0 0 -1 0 0 0 0 0 -1 1 0 1 0 0 0 -1 1 -1 ...
0 1 0 0 0 0 0 0 0 0 -1 1 0 1 0 0 1 0 1 1 ...
0 2 0 1 0 0 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 ...
-1 1 -1 0 0 0 1 0 1 1 -1 0 0 0 1 0 0 1 0 -1 ...
-1 1 0 1 0 0 1 0 2 0 0 2 0 1 0 0 0 -1 -1 -1 ...
0 2 0 1 0 0 0 -1 -1 0 0 2 0 1 0 0 1 0 2 0 ],2,5,20);
%shapes采用一个坐标点来表示一个方块(patch),每5个方块构成一个图形。
%设某个图形的5个方块右上角坐标分别为:(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)。
%则shapes(:,:,1)=reshape([x1 y1 x2 y2 x3 y3 x4 y4 x5 y5],2,5,1)
%共有20种图形
for i=1:20 %20种图形中每种图形有3种变换图形
shapes(:,:,i,2) = [0,1;-1,0]*shapes(:,:,i,1);
shapes(:,:,i,3) = [0,1;-1,0]*shapes(:,:,i,2);
shapes(:,:,i,4) = [0,1;-1,0]*shapes(:,:,i,3);
end
shapes(:,:,5,4)=shapes(:,:,5,1);%田字型为特例
shapes(:,:,5,3)=shapes(:,:,5,1);
shapes(:,:,5,2)=shapes(:,:,5,1);
shape_colors = [1 0 0;0.502 0 0;1 1 0;0.502 0.502 0;0 1 0;...
0.502 0 0.251;0 0 1;0.251 0.502 0.502;0.502 0.502 0.502;0.251 0 0;...
0.502 0.502 0;0 0.502 0;0.251 0 0.502;0 0 0.251;0.502 0 1;...
0 0.502 0.7529;0.502 1 0.502;1 0.502 0.251;0 0.502 0.7529;0.502 0.502 0.7529]; %每种图形的颜色
px = [0;-1;-1;0]; %patch初始位置
py = [0;0;-1;-1]; %patch初始位置
set(handles.look,'label','是男人就得5万分!')
ao = analogoutput('winsound');
addchannel(ao,[1 2]);
set(ao,'SampleRate',11025,'TimerPeriod',100,'TimerFcn',['global ao xianjian;',...
'putdata(ao,[xianjian(:,1) xianjian(:,2)]);'])
data1 =xianjian(:,1);
data2 =xianjian(:,2);
putdata(ao,[data1 data2]);
start(ao);
tic;
guidata(hObject, handles);
function p_t(obj,event,handles)
if ~ishandle(handles.figure1)
stop(obj);
delete(obj);
clear obj
return;
end
global shapes px py p_sel pos pach shape_colors map p_n map_x nt1 nt nn tt
global map_y pos4 fenshu p_run nn2
global p_n2 pos42 p_sel2 p_sel_color2 np cg_flag show_flag
if ~p_run
return;
end
nn2=nn2+1;
tt=tt+1;
if tt>=50
tt=0;
if nn2>nn
nn2=nn;
end
str=sprintf('%2.0f秒',floor((nn-nn2)*0.02));
set(handles.next_two,'string',{'离下次增加两行还剩:';str})
end
nt1=nt1+1;
if cg_flag
if fenshu<10000
if show_flag
show_flag=0;
set(handles.level_n,'string','第1关','visible','on')
set(handles.guanshu,'string','当前关数:1/5')
nn=3000;%每3000次定时计数后增加两行
np=7;%图形样式种数的选择
nt=16;%下移
pause(1);
set(handles.level_n,'visible','off')
end
elseif fenshu<20000
if ~show_flag
show_flag=1;
set(handles.level_n,'string','第2关','visible','on')
set(handles.guanshu,'string','当前关数:2/5')
nn=2600;%每3000次定时计数后增加两行
np=10;%图形样式种数的选择
nt=12;%下移
pause(1);
set(handles.level_n,'visible','off')
end
elseif fenshu<30000
if show_flag
show_flag=0;
set(handles.level_n,'string','第3关','visible','on')
set(handles.guanshu,'string','当前关数:3/5')
nn=2200;%每3000次定时计数后增加两行
np=13;%图形样式种数的选择
nt=10;%下移
pause(1);
set(handles.level_n,'visible','off')
end
elseif fenshu<40000
if ~show_flag
show_flag=1;
set(handles.level_n,'string','第4关','visible','on')
set(handles.guanshu,'string','当前关数:4/5')
nn=1800;%每3000次定时计数后增加两行
np=13;%图形样式种数的选择
nt=8;%下移
pause(1);
set(handles.level_n,'visible','off')
end
elseif fenshu<50000
if show_flag
show_flag=0;
set(handles.level_n,'string','第5关','visible','on')
set(handles.guanshu,'string','当前关数:5/5')
nn=1600;%每3000次定时计数后增加两行
np=20;%图形样式种数的选择
nt=6;%下移
pause(1);
set(handles.level_n,'visible','off')
end
else
if show_flag
show_flag=0;
set(handles.level_n,'string','恭喜通关','visible','on')
set(handles.guanshu,'string','已通关')
pause(1);
set(handles.level_n,'visible','off')
end
end
end
cmd=get(handles.figure1,'currentkey');
if strcmp(cmd,'s') || strcmp(cmd,'downarrow') || strcmp(cmd,'numpad2')
if toc<0.2
nt=1;
end
else
if nt==1
if strcmp(get(handles.beginner,'checked'),'on')
nt=16;
elseif strcmp(get(handles.intermediate,'checked'),'on')
nt=10;
else
nt=4;
end
end
end
if nt1<nt
return;
else
nt1=0;
end
pos_temp = pos + [0;-1];
map_y1 = map_y;
map_x1 = map_x - 1;
if ~min(map_x1) || map(map_x1(1),map_y1(1)) || map(map_x1(2),map_y1(2)) || ...
map(map_x1(3),map_y1(3)) || map(map_x1(4),map_y1(4)) || map(map_x1(5),map_y1(5))%如果到底部或停止下降
if max(map_x1)>=16 %GAME OVER!
h=findobj(handles.axes1,'type','patch');
delete(h);
clear h
text(0.5,10,'GAME OVER!','parent',handles.axes1,'Color','r','fontsize',30,'fontname','华文行楷');
pach=zeros(1,5);
stop(obj);
delete(obj);
clear obj
load('fenshu');
temp=sort([a1 a2 a3 fenshu],'descend');
a1=temp(1);
a2=temp(2);
a3=temp(3);
str1=sprintf('第一名:%6.0f',a1);
str2=sprintf('第二名:%6.0f',a2);
str3=sprintf('第三名:%6.0f',a3);
save('fenshu','a1','a2','a3');
set(handles.fen_shu,'string'