基于Matlab实现俄罗斯方块游戏

Anna ·
更新时间:2024-11-15
· 1515 次阅读

我最早写的一个matlab小游戏

写的可能不够简洁,但还有可玩性,

先发上来,以后可能改进或出教程。

大家自己探索吧(外挂是哪个按键,更改颜色是哪个按键)

游戏效果

完整代码

function elos hold on axis equal axis(0.5+[0,10,0,20]) set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w') set(gca,'color','k') %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%% %%%%%%%%% A1=[5,23;5,24;6,23;6,24];%1 B1=[5,23;5,24;5,22;5,21];%21 B2=[5,23;4,23;6,23;7,23];%23 C1=[5,23;5,24;5,22;4,24];%31 C2=[5,23;6,23;4,23;6,24];%33 C3=[5,23;5,24;5,22;6,22];%35 C4=[5,23;4,23;6,23;4,22];%37 D1=[5,23;5,24;5,22;6,24];%41 D2=[5,23;4,23;6,23;6,22];%43 D3=[5,23;5,24;5,22;4,22];%45 D4=[5,23;4,23;6,23;4,24];%47 E1=[5,23;5,24;4,24;6,23];%51 E2=[5,23;6,24;6,23;5,22];%53 E3=[5,23;4,23;5,22;6,22];%55 E4=[5,23;5,24;4,23;4,22];%57 F1=[5,23;5,24;6,24;4,23];%61 F2=[5,23;6,23;6,22;5,24];%63 F3=[5,23;6,23;5,22;4,22];%65 F4=[5,23;4,24;4,23;5,22];%67 G1=[5,23;5,24;4,23;6,23];%71 G2=[5,23;6,23;5,24;5,22];%73 G3=[5,23;4,23;6,23;5,22];%75 G4=[5,23;4,23;5,24;5,22];%77 %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%% %%%%%%%%% r=[1 0 0;1 0 0;1 0 0;1 0 0]; b=[0 0 1;0 0 1;0 0 1;0 0 1]; g=[0 1 0;0 1 0;0 1 0;0 1 0]; c=[0 1 1;0 1 1;0 1 1;0 1 1]; w=[1 1 1;1 1 1;1 1 1;1 1 1]; h=[-50,-50,0,0,1;-49,-49,0,0,1;-48,-48,0,0,1;-47,-47,0,0,1]; wall1=[1 0;2 0;3 0;4 0;5 0;6 0;7 0;8 0;9 0;10 0]; wall2=[0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8;0,9;0,10;0,11;0,12;0,13;0,14;0,15; 0,16;0,17;0,18;0,19;0,20]; wall3=[11,0;11,1;11,2;11,3;11,4;11,5;11,6;11,7;11,8;11,9;11,10;11,11;11,12; 11,13;11,14;11,15;11,16;11,17;11,18;11,19;11,20]; direct=[0,-1,0,0,0;0,-1,0,0,0;0,-1,0,0,0;0,-1,0,0,0]; dir=[0,-1;0,-1;0,-1;0,-1]; left=[-1,0,0,0,0;-1,0,0,0,0;-1,0,0,0,0;-1,0,0,0,0]; right=[1,0,0,0,0;1,0,0,0,0;1,0,0,0,0;1,0,0,0,0]; lefty=[-1,0;-1,0;-1,0;-1,0]; leftyy=[-1,-1;-1,-1;-1,-1;-1,-1]; righty=[1,0;1,0;1,0;1,0]; rightyy=[1,-1;1 ,-1;1,-1;1,-1]; s=[A1,c]; s1=A1; change=1; waigua=1; color=1; score=0; %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%% %%%%%%%%% kill1=[1,17;2,17;3,17;4,17;5,17;6,17;7,17;8,17;9,17;10,17]; kill2=[1,16;2,16;3,16;4,16;5,16;6,16;7,16;8,16;9,16;10,16]; kill3=[1,15;2,15;3,15;4,15;5,15;6,15;7,15;8,15;9,15;10,15]; kill4=[1,14;2,14;3,14;4,14;5,14;6,14;7,14;8,14;9,14;10,14]; kill5=[1,13;2,13;3,13;4,13;5,13;6,13;7,13;8,13;9,13;10,13]; kill6=[1,12;2,12;3,12;4,12;5,12;6,12;7,12;8,12;9,12;10,12]; kill7=[1,11;2,11;3,11;4,11;5,11;6,11;7,11;8,11;9,11;10,11]; kill8=[1,10;2,10;3,10;4,10;5,10;6,10;7,10;8,10;9,10;10,10]; kill9=[1,9;2,9;3,9;4,9;5,9;6,9;7,9;8,9;9,9;10,9]; kill10=[1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8;9,8;10,8]; kill11=[1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7;9,7;10,7]; kill12=[1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6;9,6;10,6]; kill13=[1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5;9,5;10,5]; kill14=[1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4;9,4;10,4]; kill15=[1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3;9,3;10,3]; kill16=[1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2;9,2;10,2]; kill17=[1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1;9,1;10,1]; %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%% %%%%%%%%% plotelos=scatter(gca,s(:,1),s(:,2),220,s(:,3:5),'s','filled'); plott=scatter(gca,h(:,1),h(:,2),220,h(:,3:5),'s','filled'); set(gcf, 'KeyPressFcn', @key) fps = 5; game = timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @elosgame); start(game) %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%%% %%%%%%%%% %%%%%%%%% function elosgame(~,~) talant=find(h>18); if length(talant)==0 else stop(game); ButtonName1 = questdlg('Game over','what do you mean to do?','restart','end', 'end'); if ButtonName1 == 'restart'; clf; elos(); else close; end end if length(wall1)==length(unique([wall1;kill1],'rows')); wall1(find(wall1(:,2)==17),:)=[]; h(find(h(:,2)==17),:)=[]; wall1(wall1(:,2)>17)=wall1(wall1(:,2)>17)-1; h(h(:,2)>17)=h(h(:,2)>17)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill2],'rows')); wall1(find(wall1(:,2)==16),:)=[]; h(find(h(:,2)==16),:)=[]; wall1(wall1(:,2)>16)=wall1(wall1(:,2)>16)-1; h(h(:,2)>16)=h(h(:,2)>16)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill3],'rows')); wall1(find(wall1(:,2)==15),:)=[]; h(find(h(:,2)==15),:)=[]; wall1(wall1(:,2)>15)=wall1(wall1(:,2)>15)-1; h(h(:,2)>15)=h(h(:,2)>15)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill4],'rows')); wall1(find(wall1(:,2)==14),:)=[]; h(find(h(:,2)==14),:)=[]; wall1(wall1(:,2)>14)=wall1(wall1(:,2)>14)-1; h(h(:,2)>14)=h(h(:,2)>14)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill5],'rows')); wall1(find(wall1(:,2)==13),:)=[]; h(find(h(:,2)==13),:)=[]; wall1(wall1(:,2)>13)=wall1(wall1(:,2)>13)-1; h(h(:,2)>13)=h(h(:,2)>13)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill6],'rows')); wall1(find(wall1(:,2)==12),:)=[]; h(find(h(:,2)==12),:)=[]; wall1(wall1(:,2)>12)=wall1(wall1(:,2)>12)-1; h(h(:,2)>12)=h(h(:,2)>12)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill7],'rows')); wall1(find(wall1(:,2)==11),:)=[]; h(find(h(:,2)==11),:)=[]; wall1(wall1(:,2)>11)=wall1(wall1(:,2)>11)-1; h(h(:,2)>11)=h(h(:,2)>11)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill8],'rows')); wall1(find(wall1(:,2)==10),:)=[]; h(find(h(:,2)==0),:)=[]; wall1(wall1(:,2)>10)=wall1(wall1(:,2)>10)-1; h(h(:,2)>10)=h(h(:,2)>10)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill9],'rows')); wall1(find(wall1(:,2)==9),:)=[]; h(find(h(:,2)==9),:)=[]; wall1(wall1(:,2)>9,2)=wall1(wall1(:,2)>9,2)-1; h(h(:,2)>9,2)=h(h(:,2)>9,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill10],'rows')); wall1(find(wall1(:,2)==8),:)=[]; h(find(h(:,2)==8),:)=[]; wall1(wall1(:,2)>8,2)=wall1(wall1(:,2)>8,2)-1; h(h(:,2)>8,2)=h(h(:,2)>8,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill11],'rows')); wall1(find(wall1(:,2)==7),:)=[]; h(find(h(:,2)==7),:)=[]; wall1(wall1(:,2)>7,2)=wall1(wall1(:,2)>7,2)-1; h(h(:,2)>7,2)=h(h(:,2)>7,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill12],'rows')); wall1(find(wall1(:,2)==6),:)=[]; h(find(h(:,2)==6),:)=[]; wall1(wall1(:,2)>6,2)=wall1(wall1(:,2)>6,2)-1; h(h(:,2)>6,2)=h(h(:,2)>6,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill13],'rows')); wall1(find(wall1(:,2)==5),:)=[]; h(find(h(:,2)==5),:)==[]; wall1(wall1(:,2)>5,2)=wall1(wall1(:,2)>59,2)-1; h(h(:,2)>5,2)=h(h(:,2)>5,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill14],'rows')); wall1(find(wall1(:,2)==4),:)=[]; h(find(h(:,2)==4),:)=[]; wall1(wall1(:,2)>4,2)=wall1(wall1(:,2)>4,2)-1; h(h(:,2)>4,2)=h(h(:,2)>4,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill15],'rows')); wall1(find(wall1(:,2)==3),:)=[]; h(find(h(:,2)==3),:)=[]; wall1(wall1(:,2)>3,2)=wall1(wall1(:,2)>3,2)-1; h(h(:,2)>3,2)=h(h(:,2)>3,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill16],'rows')); wall1(find(wall1(:,2)==2),:)=[]; h(find(h(:,2)==2),:)=[]; wall1(wall1(:,2)>2,2)=wall1(wall1(:,2)>2,2)-1; h(h(:,2)>2,2)=h(h(:,2)>2,2)-1; score=score+10; end if length(wall1)==length(unique([wall1;kill17],'rows')); wall1(find(wall1(:,2)==1),:)=[]; h(find(h(:,2)==1),:)=[]; wall1(wall1(:,2)>1,2)=wall1(wall1(:,2)>1,2)-1; h(h(:,2)>1,2)=h(h(:,2)>1,2)-1; score=score+10; end s1=s1+dir; s=s+direct; control=length(intersect(dir+s1,wall1,'rows')); if control==0; else h=[h;s]; wall1=[wall1;s1]; power=randi(7); power2=randi(4); if power==1; sn=A1; change=1; end if power==2; sn=B1; change=21; end if power==3; sn=C1; change=31; end if power==4; sn=D1; change=41; end if power==5; sn=E1; change=51; end if power==6; sn=F1; change=61; end if power==7; sn=G1; change=71; end if power2==1; co=r; end if power2==2; co=b; end if power2==3; co=g; end if power2==4; co=c; end if waigua==1; s=[sn,co]; s1=sn; tip=1; end if waigua==2; s=[B1,co]; s1=B1; tip=1; change=21; end end if color==1; set(plott,'XData',h(:,1),'YData',h(:,2),'CData',h(:,3:5)) set(plotelos,'XData',s(:,1),'YData',s(:,2),'CData',s(:,3:5)) end if color==2; set(plott,'XData',h(:,1),'YData',h(:,2),'CData',[1 1 1]) set(plotelos,'XData',s(:,1),'YData',s(:,2),'CData',[1 1 1]) end end function key(~,event); switch event.Key; case 'uparrow'; po=[s1(1,:);s1(1,:);s1(1,:);s1(1,:)]; pp=[5,23;5,23;5,23;5,23]; pa=[s(1,3:5);s(1,3:5);s(1,3:5);s(1,3:5)]; pos=po-pp; if change==21; if length(intersect(B2+pos,wall1,'rows'))==0; if length(intersect(B2+pos,wall2,'rows'))==0; if length(intersect(B2+pos,wall3,'rows'))==0; s=[B2+pos,pa]; s1=B2+pos; change=22; end end end end if change==23; if length(intersect(B1+pos,wall1,'rows'))==0; if length(intersect(B1+pos,wall2,'rows'))==0; if length(intersect(B1+pos,wall3,'rows'))==0; s=[B1+pos,pa]; s1=B1+pos; change=20; end end end end if change==31; if length(intersect(C2+pos,wall1,'rows'))==0; if length(intersect(C2+pos,wall2,'rows'))==0; if length(intersect(C2+pos,wall3,'rows'))==0; s=[C2+pos,pa]; s1=C2+pos; change=32; end end end end if change==33; if length(intersect(C3+pos,wall1,'rows'))==0; if length(intersect(C3+pos,wall2,'rows'))==0; if length(intersect(C3+pos,wall3,'rows'))==0; s=[C3+pos,pa]; s1=C3+pos; change=34; end end end end if change==35; if isempty(intersect(C4+pos,wall1,'rows')); if length(intersect(C4+pos,wall2,'rows'))==0; if length(intersect(C4+pos,wall3,'rows'))==0; s=[C4+pos,pa]; s1=C4+pos; change=36; end end end end if change==37; if length(intersect(C1+pos,wall1,'rows'))==0; if length(intersect(C1+pos,wall2,'rows'))==0; if length(intersect(C1+pos,wall3,'rows'))==0; s=[C1+pos,pa]; s1=C1+pos; change=30; end end end end if change==41; if length(intersect(D2+pos,wall1,'rows'))==0; if length(intersect(D2+pos,wall2,'rows'))==0; if length(intersect(D2+pos,wall3,'rows'))==0; s=[D2+pos,pa]; s1=D2+pos; change=42; end end end end if change==43; if length(intersect(D3+pos,wall1,'rows'))==0; if length(intersect(D3+pos,wall2,'rows'))==0; if length(intersect(D3+pos,wall3,'rows'))==0; s=[D3+pos,pa]; s1=D3+pos; change=44; end end end end if change==45; if length(intersect(D4+pos,wall1,'rows'))==0; if length(intersect(D4+pos,wall2,'rows'))==0; if length(intersect(D4+pos,wall3,'rows'))==0; s=[D4+pos,pa]; s1=D4+pos; change=46; end end end end if change==47; if length(intersect(D1+pos,wall1,'rows'))==0; if length(intersect(D1+pos,wall2,'rows'))==0; if length(intersect(D1+pos,wall3,'rows'))==0; s=[D1+pos,pa]; s1=D1+pos; change=40; end end end end if change==51; if length(intersect(E2+pos,wall1,'rows'))==0; if length(intersect(E2+pos,wall2,'rows'))==0; if length(intersect(E2+pos,wall3,'rows'))==0; s=[E2+pos,pa]; s1=E2+pos; change=52; end end end end if change==53; if length(intersect(E3+pos,wall1,'rows'))==0; if length(intersect(E3+pos,wall2,'rows'))==0; if length(intersect(E3+pos,wall3,'rows'))==0; s=[E3+pos,pa]; s1=E3+pos; change=54; end end end end if change==55; if length(intersect(E4+pos,wall1,'rows'))==0; if length(intersect(E4+pos,wall2,'rows'))==0; if length(intersect(E4+pos,wall3,'rows'))==0; s=[E4+pos,pa]; s1=E4+pos; change=56; end end end end if change==57; if length(intersect(E1+pos,wall1,'rows'))==0; if length(intersect(E1+pos,wall2,'rows'))==0; if length(intersect(E1+pos,wall3,'rows'))==0; s=[E1+pos,pa]; s1=E1+pos; change=50; end end end end if change==61; if length(intersect(F2+pos,wall1,'rows'))==0; if length(intersect(F2+pos,wall2,'rows'))==0; if length(intersect(F2+pos,wall3,'rows'))==0; s=[F2+pos,pa]; s1=F2+pos; change=62; end end end end if change==63; if length(intersect(F3+pos,wall1,'rows'))==0; if length(intersect(F3+pos,wall2,'rows'))==0; if length(intersect(F3+pos,wall3,'rows'))==0; s=[F3+pos,pa]; s1=F3+pos; change=64; end end end end if change==65; if length(intersect(F4+pos,wall1,'rows'))==0; if length(intersect(F4+pos,wall2,'rows'))==0; if length(intersect(F4+pos,wall3,'rows'))==0; s=[F4+pos,pa]; s1=F4+pos; change=66; end end end end if change==67; if length(intersect(F1+pos,wall1,'rows'))==0; if length(intersect(F1+pos,wall2,'rows'))==0; if length(intersect(F1+pos,wall3,'rows'))==0; s=[F1+pos,pa]; s1=F1+pos; change=60; end end end end if change==71; if length(intersect(G2+pos,wall1,'rows'))==0; if length(intersect(G2+pos,wall2,'rows'))==0; if length(intersect(G2+pos,wall3,'rows'))==0; s=[G2+pos,pa]; s1=G2+pos; change=72; end end end end if change==73; if length(intersect(G3+pos,wall1,'rows'))==0; if length(intersect(G3+pos,wall2,'rows'))==0; if length(intersect(G3+pos,wall3,'rows'))==0; s=[G3+pos,pa]; s1=G3+pos; change=74; end end end end if change==75; if length(intersect(G4+pos,wall1,'rows'))==0; if length(intersect(G4+pos,wall2,'rows'))==0; if length(intersect(G4+pos,wall3,'rows'))==0; s=[G4+pos,pa]; s1=G4+pos; change=76; end end end end if change==77; if length(intersect(G1+pos,wall1,'rows'))==0; if length(intersect(G1+pos,wall2,'rows'))==0; if length(intersect(G1+pos,wall3,'rows'))==0; s=[G1+pos,pa]; s1=G1+pos; change=70; end end end end change=change+1; case 'w' color=2; case 'c' color=1 case '1'; waigua=1; case '2'; waigua=2; case 'leftarrow'; if length(intersect(s1+lefty,wall1,'rows'))==0 if length(intersect(s1+leftyy,wall1,'rows'))==0 if length(intersect(s1+lefty,wall2,'rows'))==0; s=s+left; s1=s1+lefty; end end end case 'rightarrow'; if length(intersect(s1+righty,wall1,'rows'))==0 if length(intersect(s1+rightyy,wall1,'rows'))==0 if length(intersect(s1+righty,wall3,'rows'))==0; s=s+right; s1=s1+righty; end end end end end end

到此这篇关于基于Matlab实现俄罗斯方块游戏的文章就介绍到这了,更多相关Matlab俄罗斯方块内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



俄罗斯方块 matlab

需要 登录 后方可回复, 如果你还没有账号请 注册新账号