MATLAB游戏程序目录1.空格游戏 (2)2.华容道 (3)3.凑五子棋 (14)4.2048 (19)5.俄罗斯方块 (24)1.空格游戏function pintu1()A = gen();G = [1 2 3;4 5 6;7 8 0];drawmap(A);while 1[xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col);if row>1&A(row-1,col)==0A(row-1,col) = num;A(row,col) = 0;endif row<3&A(row+1,col)==0A(row+1,col) = num;A(row,col) = 0;endif col>1&A(row,col-1)==0A(row,col-1) = num;A(row,col) = 0;endif col<3&A(row,col+1)==0A(row,col+1) = num;A(row,col) = 0;enddrawmap(A)zt = abs(A-G);if sum(zt(:))==0msgbox('恭喜您成功完成!')breakendendfunction drawmap(A)clf;hold online([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4);for i = 1:3for j = 1:3drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j));endendaxis equalaxis offfunction drawrect(x1,x2,x3,x4,color,num)x = [x1(1) x2(1) x3(1) x4(1)];y = [x1(2) x2(2) x3(2) x4(2)];fill(x,y,color)if num==0text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)elsetext(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24) endfunction y = gen()y = inf*ones(1,9);for i = 1:9while 1a = randint(1,1,9);if isempty(find(y==a))y(i) = a;breakendendendy = reshape(y,3,3);2.华容道function huarongdao()A = [2 1 1 3;2 1 1 3;4 6 6 5;4 7 7 5;7 0 0 7];drawmap(A)while 1if A(5,2)==1&A(5,3)==1ch = menu('曹操成功逃出华容道!如果要继续玩,按“是”,否则按“否”','是','否');switch chcase 1huarongdao();case 2returnendend[xpos,ypos] = ginput(1);col = ceil(xpos);row = 5-ceil(ypos)+1;juese = A(row,col);switch juesecase 1%点击了曹操[I,J] = find(A==1);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[1;1];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[1;1];A([rn,rm],ln)=[0;0];drawmap(A)end%判断是否能向下移if rn>1&isequalm(A(rn-1,[ln,lm]),[0,0])A(rn-1,[ln,lm])=[1,1];A(rn+1,[ln,lm])=[0,0];drawmap(A)end%判断是否能向上移if rm<5&isequalm(A(rm+1,[ln,lm]),[0,0])A(rm+1,[ln,lm])=[1,1];A(rm-1,[ln,lm])=[0,0];drawmap(A)endcase 2% 点击了黄忠[I,J] = find(A==2);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[2;2];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[2;2];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 2;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 2;A(rm-1,ln) = 0;drawmap(A)endelse%只能上移A(rn-1,ln) = 2;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 2;A(rm-1,ln) = 0;drawmap(A)endcase 3%张飞[I,J] = find(A==3);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[3;3];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[3;3];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 3;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 3;A(rm-1,ln) = 0;endelse%只能上移A(rn-1,ln) = 3;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 3;A(rm-1,ln) = 0;drawmap(A)endcase 4%马超[I,J] = find(A==4);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[4;4];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[4;4];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 4;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm+1,ln) = 4;drawmap(A)endelse%只能上移A(rn-1,ln) = 4;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 4;A(rm-1,ln) = 0;drawmap(A)endcase 5%赵云[I,J] = find(A==5);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向左移if ln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[5;5];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移if lm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[5;5];A([rn,rm],ln)=[0;0];drawmap(A)endif rn>1&A(rn-1,ln)==0if rm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch = menu('请选择移到的方向:','上','下')switch chcase 1%上移A(rn-1,ln) = 5;A(rn+1,ln) = 0;drawmap(A)case 2%下移A(rm-1,ln) = 0;drawmap(A)endelse%只能上移A(rn-1,ln) = 5;A(rn+1,ln) = 0;drawmap(A)endelseif rm<5&A(rm+1,ln)==0A(rm+1,ln) = 5;A(rm-1,ln) = 0;drawmap(A)endcase 6%关羽[I,J] = find(A==6);rm = max(I);rn = min(I);lm = max(J);ln = min(J);%判断是否能向上移if rn>1 & isequalm(A(rn-1,[ln,lm]),[0,0])A(rn-1,[ln,lm])=[6,6];A(rn,[ln,lm])=[0,0];drawmap(A)end%判断是否能向下移if rm<5&isequalm(A(rm+1,[ln,lm]),[0,0])A(rm+1,[ln,lm])=[6,6];A(rm,[ln,lm])=[0,0];drawmap(A)endif ln>1&A(rn,ln-1)==0if lm<4&A(rm,lm+1)==0%如果又能左移又能右移,则要点击的部位ch = menu('请选择移到的方向:','左','右')switch chcase 1%左移A(rm,ln-1) = 6;A(rm,ln+1) = 0;drawmap(A)case 2%右移A(rm,lm+1) = 6;A(rm,lm-1) = 0;drawmap(A)endelse%只能左移A(rm,ln-1) = 6;A(rm,ln+1) = 0;drawmap(A)endelseif lm<4&A(rm,lm+1)==0A(rm,lm+1) = 6;A(rm,lm-1) = 0;drawmap(A)endcase 7 %小卒if row>1&A(row-1,col)==0 % 上if col>1&A(row,col-1)==0 % 左ch = menu('请选择移到的方向:','上','左')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col-1) = 7;A(row,col) = 0;drawmap(A)endelseif row<5&A(row+1,col)==0% 下ch = menu('请选择移到的方向:','上','下')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0 %右ch = menu('请选择移到的方向:','上','右')switch chcase 1A(row-1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse %只能向上A(row-1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col>1&A(row,col-1)==0%左if row<5&A(row+1,col)==0%下ch = menu('请选择移到的方向:','左','下')switch chcase 1A(row,col-1) = 7;A(row,col) = 0;drawmap(A)case 2A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0%右ch = menu('请选择移到的方向:','左','右')switch chcase 1A(row,col-1) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse%只能向左A(row,col-1) = 7;A(row,col) = 0;drawmap(A)endelseif row<5&A(row+1,col)==0%下if col<4&A(row,col+1)==0%右ch = menu('请选择移到的方向:','下','右')switch chcase 1A(row+1,col) = 7;A(row,col) = 0;drawmap(A)case 2A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endelse%只能向下A(row+1,col) = 7;A(row,col) = 0;drawmap(A)endelseif col<4&A(row,col+1)==0%只能向右A(row,col+1) = 7;A(row,col) = 0;drawmap(A)endendendfunction drawmap(A)clfhold on%曹操[I J] = find(A==1);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'r')text(0.5*(x1+x2)-0.5,0.5*(y1+y2),'曹操','fontsize',28)% 黄忠[I,J] = find(A==2);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'黄','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'忠','fontsize',28)% 张飞[I,J] = find(A==3);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'张','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'飞','fontsize',28)% 马超[I,J] = find(A==4);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'马','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'超','fontsize',28)% 赵云[I,J] = find(A==5);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y1),'赵','fontsize',28) text(0.5*(x1+x2)-0.26,0.5*(0.5*(y1+y2)+y2),'云','fontsize',28)% 关羽[I,J] = find(A==6);x1 = min(J)-1;x2 = max(J);y1 = 5-(min(I)-1);y2 = 5-max(I);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'y')text(0.5*(x1+0.5*(x1+x2))-0.26,0.5*(y1+y2),'关','fontsize',28) text(0.5*(0.5*(x1+x2)+x2)-0.26,0.5*(y1+y2),'羽','fontsize',28)%小卒[I,J] = find(A==7);for i = 1:length(I)x1 = J(i)-1;x2 = J(i);y1 = 5-(I(i)-1);y2 = 5-I(i);drawrect([x1,y1],[x2,y1],[x2,y2],[x1,y2],'g')text(0.5*(x1+x2)-0.26,0.5*(y1+y2),'卒','fontsize',28)end% 画背景line([0 4],[0 0],'color','b','linewidth',4)line([0 4],[5 5],'color','b','linewidth',4)line([0 0],[0 5],'color','b','linewidth',4)line([4 4],[0 5],'color','b','linewidth',4)for i = 1:4line([0 4],[i i],'color','b','linestyle','--')endfor i = 1:3line([i i],[0 5],'color','b','linestyle','--')endaxis equalaxis([0 4 0 5])axis offfunction drawrect(x1,x2,x3,x4,color)x = [x1(1) x2(1) x3(1) x4(1)];y = [x1(2) x2(2) x3(2) x4(2)];fill(x,y,color)3.凑五子棋function [ ] = five()global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha sshf=figure('resize','off','name','five',...'position',[360 280 560 420],'numbertitle','off');set(gcf,'menubar','none','color',[0.3 0.3 0.3])set(gca,'position',[0.2300 0.1100 0.7750 0.8150]) set(gca,'xlim',[0,9],'ylim',[0,9])set(ha,'xtick',[],'ytick',[],'box','on')set(ha,'color',[0.7 0.6,0.6])set(ha,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',[1 1 1])x=repmat([0;9],1,9);y=[1:9;1:9];line(x,y,'color','k')line(y,x,'color','k')hst=uicontrol('style','text','string','Score','fontsize',30,...'units','normal','position',[0.02,0.55,0.26,0.14],'parent',hf,...'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],...'fontweight','bold');hsc=uicontrol('style','text','string','0','fontsize',24,...'units','normal','position',[0.02,0.4,0.26,0.14],'parent',hf,...'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],...'fontweight','bold');hbt=uicontrol('style','pushbutton','string','Restart','fontsize',18,...'units','normal','position',[0.02,0.16,0.26,0.14],'parent',hf,...'fontweight','bold','callback',@restart);color=[...1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1;0.7 0.3 0;];h1=annotation('ellipse',[0.04,0.84,0.06,0.08],'facecolor','k');h2=annotation('ellipse',[0.12,0.84,0.06,0.08],'facecolor','k');h3=annotation('ellipse',[0.2,0.84,0.06,0.08],'facecolor','k');set(ha,'buttondownfcn',@select2)initializefunction initialize()global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ssa=zeros(9);h=zeros(9)*NaN;m1=[];n1=[];m2=[];n2=[];ss=0;k=rs(1:81,5);t=ceil(rand(1,5)*7);a(k)=t;[m,n] = ind2sub([9,9],k);y=9.5-m;x=n-0.5;for p=1:5h(k(p))=line(x(p),y(p),'marker','o','markersize',24,...'markerfacecolor',color(t(p),:),'markeredgecolor','none',...'buttondownfcn',@select1);endt=ceil(rand(1,3)*7);set(h1,'facecolor',color(t(1),:))set(h2,'facecolor',color(t(2),:))set(h3,'facecolor',color(t(3),:))function [k]=rs(s,n);for m=1:nt=ceil(rand*length(s));k(m)=s(t);s(t)=[];endfunction select1(src,eventdata)global a h m1 n1n1=ceil(get(src,'xdata'));m1=ceil(9-get(src,'ydata'));set(h(~isnan(h)),'markeredgecolor','none')set(src,'markeredgecolor','w')function select2(src,eventdata)global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssif isempty(m1) || isempty(n1)returnendcp=get(src,'currentpoint');n2=ceil(cp(1,1));m2=ceil(9-cp(1,2));if a(m2,n2)returnendb=~a;b(m1,n1)=1;b=bwlabel(b,4);if b(m1,n1)~=b(m2,n2)enda(m2,n2)=a(m1,n1);a(m1,n1)=0;h(m2,n2)=h(m1,n1);h(m1,n1)=NaN;set(h(m2,n2),'xdata',n2-0.5,'ydata',9.5-m2,'markeredgecolor','none') m1=[];n1=[];judgement;if sum(sum(~a))<3hgo=text(1,4.5,'Game Over','fontsize',36,'fontweight',...'bold','parent',src);pause(3)delete(hgo);delete(h(~isnan(h)))set(hsc,'string','0')initialize;returnendif ~ssnew;endfunction judgementglobal a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssb=logical(zeros(9,9));ss=0;left=0;right=0;up=0;down=0;lu=0;rd=0;ld=0;ru=0;while n2-left-1>0 && a(m2,n2-left-1)==a(m2,n2)left=left+1;endwhile n2+right+1<10 && a(m2,n2+right+1)==a(m2,n2)right=right+1;endwhile m2-up-1>0 && a(m2-up-1,n2)==a(m2,n2)up=up+1;endwhile m2+down+1<10 && a(m2+down+1,n2)==a(m2,n2)down=down+1;endwhile n2-lu-1>0 && m2-lu-1>0 && a(m2-lu-1,n2-lu-1)==a(m2,n2) lu=lu+1;endwhile n2+rd+1<10 && m2+rd+1<10 && a(m2+rd+1,n2+rd+1)==a(m2,n2) rd=rd+1;endwhile n2-ld-1>0 && m2+ld+1<10 && a(m2+ld+1,n2-ld-1)==a(m2,n2) ld=ld+1;endwhile n2+ru+1<10 && m2-ru-1>0 && a(m2-ru-1,n2+ru+1)==a(m2,n2) ru=ru+1;endif left+right+1>=5b(m2,n2-left:n2+right)=1;endif up+down+1>=5b(m2-up:m2+down,n2)=1;endif lu+rd+1>=5ind=sub2ind([9,9],m2-lu:m2+rd,n2-lu:n2+rd);b(ind)=1;endif ld+ru+1>=5ind=sub2ind([9,9],m2+ld:-1:m2-ru,n2-ld:n2+ru);b(ind)=1;endif sum(sum(b))a(b)=0;delete(h(b));h(b)=NaN;score=score+sum(sum(b));set(hsc,'string',num2str(score))ss=1;endfunction newglobal a h m1 n1 m2 n2 t h1 h2 h3 color score hsc hak=rs(find(~a),3);a(k)=t;[mt,nt] = ind2sub([9,9],k);y=9.5-mt;x=nt-0.5;for p=1:3h(k(p))=line(x(p),y(p),'marker','o','markersize',24,...'markerfacecolor',color(t(p),:),'markeredgecolor','none',...'buttondownfcn',@select1);endfor p=1:3m2=mt(p);n2=nt(p);judgement;endif sum(sum(~a))==0hgo=text(1,4.5,'Game Over','fontsize',36,'fontweight',...'bold','parent',ha);pause(3)delete(hgo);delete(h(~isnan(h)))set(hsc,'string','0')initialize;returnendt=ceil(rand(1,3)*7);set(h1,'facecolor',color(t(1),:))set(h2,'facecolor',color(t(2),:))set(h3,'facecolor',color(t(3),:))function restart(src,eventdata)global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ssdelete(h(~isnan(h)))set(hsc,'string','0')initialize;4.2048function g2048(action)global totalscore flag score_boardif nargin<1figure_h=figure;set(figure_h,'Units','points')set(figure_h,'UserData',figure_h);totalscore=0;flag=0;score_board=zeros(1,16);action='initialize';endswitch actioncase 'initialize';figure_h=get(gcf,'UserData');set(figure_h,...'Color',[0.4 0.4 0.4],...'Menubar','none',...'Name','2048',...'NumberTitle','off',...'Position',[200 200 320 355],...'Resize','off');axis('off')game_score=uicontrol(figure_h,... 'BackgroundColor',[1 1 1],...'ForegroundColor',[0 0 0], ...'HorizontalAlignment','center',... 'FontSize',12,...'Units','points',...'Position',[235 305 65 30],...'String','Score',...'Style','edit',...'Tag','game_score');new_game_h=uicontrol(figure_h,... 'Callback','g2048 restart',...'FontSize',12, ...'Units','points',...'Position',[35 30 65 30],...'String','New Game',...'Style','pushbutton');% closeclose_h=uicontrol(figure_h,...'Callback','close(gcf)',...'Fontsize',12, ...'Units','points',...'Position',[225 30 65 30],...'String','Close',...'Style','pushbutton');% rightmove_right=uicontrol(figure_h,... 'Callback','g2048 right',...'Fontsize',12, ...'Units','points',...'Position',[255 185 60 30],...'String','Right',...'Style','pushbutton');% leftmove_left=uicontrol(figure_h,...'Callback','g2048 left',...'Fontsize',12, ...'Units','points',...'Position',[5 185 60 30],...'String','Left',...'Style','pushbutton');% upmove_up=uicontrol(figure_h,...'Callback','g2048 up',...'Fontsize',12, ...'Units','points',...'Position',[130 300 60 30],...'String','Up',...'Style','pushbutton');% downmove_down=uicontrol(figure_h,...'Callback','g2048 down',...'Fontsize',12, ...'Units','points',...'Position',[130 80 60 30],...'String','Down',...'Style','pushbutton');% setup the game boardirows=1;for counter=1:16jcols=rem(counter,4);if jcols==0jcols=4;endposition=[40*jcols+40 85+40*irows 40 40]; index=(irows-1)*4+jcols;if jcols==4irows=irows+1;endboard.squares(index)=uicontrol(figure_h,... 'FontSize',18,...'FontWeight','bold',...'Units','points',...'Position',position,...'Style','pushbutton',...'Tag',num2str(index));endset(figure_h,'userdata',board);g2048('restart')case 'restart'totalscore=0;score_board=zeros(1,16);g2048('addnum') ;g2048('addnum') ;g2048('show')case'show'num_0=find(score_board==0);board=get(gcf,'UserData');set(board.squares,{'string'},num2cell(score_board)')set(board.squares,...'BackgroundColor',[0.701961 0.701961 0.701961],...'Enable','on',...'Visible','on')set(board.squares(num_0),...'BackgroundColor','black',...'Enable','off',...'String',' ');score_handle=findobj(gcf,'Tag','game_score');set(score_handle,...'String',num2str(totalscore),...'Tag','game_score');case 'down'C=score_board;for i=1:4A=[score_board(i) score_board(i+4) score_board(i+8) score_board(i+12)];[B score]=move(A);score_board(i)=B(1); score_board(i+4)=B(2);score_board(i+8)=B(3); score_board(i+12)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'up'C=score_board;for i=13:16A=[score_board(i) score_board(i-4) score_board(i-8) score_board(i-12)];[B score]=move(A);score_board(i)=B(1); score_board(i-4)=B(2);score_board(i-8)=B(3); score_board(i-12)=B(4);totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'right'C=score_board;for i=4:4:16A=[score_board(i) score_board(i-1) score_board(i-2) score_board(i-3)];[B score]=move(A);score_board(i)=B(1); score_board(i-1)=B(2);score_board(i-2)=B(3); score_board(i-3)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase 'left'C=score_board;for i=1:4:13A=[score_board(i) score_board(i+1) score_board(i+2) score_board(i+3)];[B score]=move(A);score_board(i)=B(1); score_board(i+1)=B(2);score_board(i+2)=B(3); score_board(i+3)=B(4); totalscore=totalscore+score;endif C==score_boardelseg2048('show');g2048('addnum') ;pause(0.2);g2048('show');endcase'addnum'num_0=find(score_board==0);l=length(num_0);if l>0score_board(num_0(ceil(l*rand)))=2+2*(rand<0.1);endendendfunction Y=addnum(X)num_0=find(X==0);l=length(num_0);X(num_0(ceil(l*rand)))=2+2*(rand<0.1);Y=X;endfunction [B score]=move(A)score=0;for k=1:2for i=1:3if A(i)==0for j=i:3A(j)=A(j+1);endA(4)=0;endendendif A(1)==A(2)if A(3)==A(4)A(1)=A(1)+A(2);A(2)=A(3)+A(4);A(3)=0;A(4)=0;score=A(1)+A(2); elseA(1)=A(1)+A(2);A(2)=A(3);A(3)=A(4);A(4)=0;score=A(1);endelse if A(2)==A(3)A(1)=A(1);A(2)=A(2)+A(3);A(3)=A(4);A(4)=0;score=A(2);else if A(3)==A(4)A(1)=A(1);A(2)=A(2);A(3)=A(3)+A(4);A(4)=0;score=A(3); else score=0; endendendB=A;End5.俄罗斯方块%各个函数请分开写if nargin == 0OldHandle = findobj( 'Type', 'figure', 'Tag', 'RussiaBlock' ) ;if ishandle( OldHandle )delete( OldHandle ) ;endFigureHandle = figure( 'Name', '俄罗斯方块MATLAB版', 'Tag', 'RussiaBlock', 'NumberTitle', 'off',...'Menubar', 'none', 'DoubleBuffer', 'on', 'Resize', 'off', 'visible', 'on',...'KeyPressFcn', 'RussiaBlock( ''KeyPress_Callback'', gcbo )',...'HelpFcn', 'helpdlg(''帮不了你- -!'',''不好意思'')',...'CloseRequestFcn', 'RussiaBlock( ''CloseFigure_Callback'', gcbo )' ) ;generate_FigureContent( FigureHandle ) ;init_FigureContent( FigureHandle ) ;set( FigureHandle, 'Visible', 'on' ) ;elseif ischar( varargin{1} )feval( varargin{:} ) ;end% -------------------------------------------------------------------------function generate_FigureContent( FigureHandle )TabSpace = 30 ;BlockWidth = 20 ;BlockHeight = 20 ;FigureWidth = BlockWidth * (12 + 1) + TabSpace * 7;FigureHeight = 500 ;set( FigureHandle, 'Position', [0 0 FigureWidth FigureHeight] ) ;movegui( FigureHandle, 'center' ) ;% 创建菜单BeginMenu = uimenu( FigureHandle, 'Label', '开始' ) ;StartMenu = uimenu( BeginMenu, 'Label', '开始新游戏', 'Accelerator', 'N',...'Callback', 'RussiaBlock( ''StartNewGame_Callback'', gcbo )');SaveMenu = uimenu( BeginMenu, 'Label', '保存', 'Accelerator', 'S', 'Enable', 'off',...'Separator', 'on', 'Cal', 'RussiaBlock( ''SaveGame_Callback'', gcbo )' );LoadMenu = uimenu( BeginMenu, 'Label', '读取', 'Accelerator', 'L', 'Enable', 'off',...'Cal', 'RussiaBlock( ''LoadGame_Callback'', gcbo )' );QuitMenu = uimenu( BeginMenu, 'Label', '退出', 'Accelerator', 'Q', 'Separator', 'on', 'Cal', 'close(gcf)');OperationMenu = uimenu( FigureHandle, 'Label', '功能' );BoardConfigMenu = uimenu( OperationMenu, 'label', '键盘设置', 'Enable', 'off',...'Cal', 'RussiaBlock( ''BoardConfig_Callback'', gcbo )' );FigureConfigMenu = uimenu( OperationMenu, 'label', '界面设置', 'Enable', 'off',...'Cal', 'RussiaBlock( ''FigureConfig_Callback'', gcbo )' );HighScoreMenu = uimenu( OperationMenu, 'label', '最高记录', 'Separator', 'on',...'Cal', 'RussiaBlock( ''HighScore_Callback'', gcbo )', 'Enable', 'off' );GameLevelMenu = uimenu( OperationMenu, 'Label', '游戏难度',...'Cal','RussiaBlock( ''GameLevel_Callback'', gcbo )' );HelpMenu = uimenu( FigureHandle, 'Label', '帮助' );AboutMenu = uimenu( HelpMenu, 'Label', '关于此软件', 'Cal', 'helpdlg(''俄罗斯方块MATLAB版------冰风漫天(制作)(2006/11/21)'',''关于此软件……'')');HelpDlgMenu = uimenu( HelpMenu, 'Label', '游戏帮助', 'Separator', 'on', 'Cal', 'helpdlg(''帮不了你- -!'',''不好意思'')' );% 创建工具条,图标可以用imread从图片读取,但图片不要太大BeginTool = uipushtool( 'ToolTipString', '开始', 'CData', rand(16,16,3), 'Tag', 'BeginTool',...'ClickedCallback', 'RussiaBlock( ''StartNewGame_Callback'', gcbo )' ) ;PauseTool = uitoggletool( 'ToolTipString', '暂停', 'Tag', 'PauseTool', 'Tag', 'PauseTool',...'CData', reshape( repmat( [1 1 0], 16, 16), [16,16,3] ),...'ClickedCallback', 'RussiaBlock( ''PauseGame_Callback'', gcbo )' ) ;% 创建游戏窗口MainWindowXPos = TabSpace;MainWindowYPos = TabSpace;MainWindowWidth = BlockWidth * 12 ;MainWindowHeight = BlockHeight * 22 ;MainWindowPosition = [MainWindowXPos MainWindowYPos MainWindowWidth MainWindowHeight] ;% 定义游戏窗口的右键菜单AxesContextMenu = uicontextmenu( 'Tag', 'uicontextmenu' ) ;uimenu( AxesContextMenu, 'Label', '设置窗口颜色', 'Cal', 'RussiaBlock( ''WindowColor_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '设置背景图片', 'Cal', 'RussiaBlock( ''WindowPicture_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '设置方块颜色', 'Cal', 'RussiaBlock( ''BlockColor_Callback'', gcbo )' )uimenu( AxesContextMenu, 'Label', '恢复默认', 'Cal', 'RussiaBlock( ''Default_Callback'', gcbo )' )。