花了4个小时,在matlab中用脚本编辑的小游戏,下面是代码:
大一新生第一次发文章,有什么问题希望大佬们能够提出来。
clc;
clear;
fig=figure("WindowStyle","normal");
hold on;
h=animatedline("Color","b","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
hq=animatedline("Color","r","Marker","hexagram","MarkerSize",8,"MaximumNumPoints",1,"MarkerFaceColor","r");
h1=animatedline("Color","black","Marker",".","MarkerSize",10,"MaximumNumPoints",1);
h2=animatedline("Color","black","Marker",".","MarkerSize",10,"MaximumNumPoints",1);
h3=animatedline("Color","black","Marker",".","MarkerSize",10,"MaximumNumPoints",1);
h4=animatedline("Color","black","Marker",".","MarkerSize",10,"MaximumNumPoints",1);
h5=animatedline("Color","black","Marker",".","MarkerSize",10,"MaximumNumPoints",1);
j1=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j2=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j3=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j4=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j5=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j6=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j7=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j8=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j9=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
j10=animatedline("Color","r","Marker",".","MarkerSize",50,"MaximumNumPoints",1);
set(gcf,"WindowButtonMotionFcn")
direction=[0,0];%运动方向
xy=[500,500];%士兵在的坐标
v=10;%士兵的基本速度
x1=linspace(0,0,5);
y1=linspace(0,0,5);%子弹的坐标
v1=50;%子弹的速度
d=zeros(2,5);%子弹的方向变量
d1=zeros(2,10);%敌人的方向变量
fenshu=0;%设置分数
x2=linspace(0,0,10);
y2=linspace(-1000,-1000,10);%敌人的坐标
v2=20;%敌人的移动速度
tn=[10,50,100,200,250,300,350,400,450,500];
p=0;
bre=1;
hold on;
for i=1:20000
axis([0,1000,0,1000])
xy1=get(gca,"CurrentPoint");%鼠标点的位置
xy2=[xy1(1,1),xy1(1,2)];
direction=(xy2-xy)/norm(xy2-xy);
xy=xy+direction*v;%士兵随鼠标移动
xy3=xy+direction*20;%士兵枪的位置
%d=repmat(direction',1,5);%子弹的初始方向
for j=1:5
if x1(j)<0||x1(j)>1000||y1(j)>1000||y1(j)<0
x1(j)=-1000;
y1(j)=-1000;
end
end
%子弹待命
i1=rem(i,25);
if rem(i1,5)==0
x1((i1+5)/5)=xy(1);
y1((i1+5)/5)=xy(2);
d(:,(i1+5)/5)=direction';
end
%产生子弹
for j=1:5
u=d(:,j);
x1(j)=x1(j)+v1*u(1);
y1(j)=y1(j)+v1*u(2);
end
%子弹射出
for j=1:10
if x2(j)<0||x2(j)>1000||y2(j)>1000||y2(j)<0
x2(j)=-1000;
y2(j)=-500;
end
end
%敌人待命
for j=1:10
if i==tn(j)
p=p+1;
end
end
%随时间增加敌人增多
for j=1:p
t4=fix(4*rand(1)+1);
if t4==1&&y2(j)<0
x2(j)=0;
y2(j)=1000*rand(1);
end
if t4==2&&y2(j)<0
x2(j)=1000;
y2(j)=1000*rand(1);
end
if t4==3&&y2(j)<0
y2(j)=0;
x2(j)=1000*rand(1);
end
if t4==4&&y2(j)<0
y2(j)=1000;
x2(j)=1000*rand(1);
end
end%敌人随机生成在范围内
for j=1:p
t2=[xy(1)-x2(j);xy(2)-y2(j)];
d1(:,j)=t2/norm(t2);
t2=d1(:,j);
x2(j)=x2(j)+v2*t2(1);
y2(j)=y2(j)+v2*t2(2);
for i2=1:5
if x2(j)>(x1(i2)-30)&&x2(j)<(x1(i2)+30)&&y2(j)>(y1(i2)-30)&&y2(j)<(y1(i2)+30)
x2(j)=-500;
y2(j)=-1000;
fenshu=fenshu+100;
end
end
if xy(1)>x2(j)-20&&xy(1)<x2(j)+20&&xy(2)>y2(j)-20&&xy(2)<y2(j)+20
text(150,800,"game over!",'Color','r','FontSize',50);
bre=0;
end
end
title('分数:',fenshu);
addpoints(h,xy(1),xy(2));
addpoints(hq,xy3(1),xy3(2));
addpoints(h1,x1(1),y1(1));
addpoints(h2,x1(2),y1(2));
addpoints(h3,x1(3),y1(3));
addpoints(h4,x1(4),y1(4));
addpoints(h5,x1(5),y1(5));
addpoints(j1,x2(1),y2(1));
addpoints(j2,x2(2),y2(2));
addpoints(j3,x2(3),y2(3));
addpoints(j4,x2(4),y2(4));
addpoints(j5,x2(5),y2(5));
addpoints(j6,x2(6),y2(6));
addpoints(j7,x2(7),y2(7));
addpoints(j8,x2(8),y2(8));
addpoints(j9,x2(9),y2(9));
addpoints(j10,x2(10),y2(10));
drawnow;
if bre==0
break;
end
pause(0.1);
end