|
snaketop=[5,5;4.5,5];%蛇头为两个据点,因为每次增添都是增添两个点
body=[5,5;4.5,5;4,5;3.5,5];
%蛇身初始数据
food=[9,9]; %食物初始位置
direction=[0,0];%蛇开始移动的方向
long=4; %蛇的长度
%绘制蛇身体和食物
plotsnake=scatter(gca,body(:,1),body(:,2),100,'y','filled');
plotfood=scatter(gca,food(1),food(2),100,'y','filled');
%body(:,1),body(:,2)分别表示这个x轴为5,4.5,4,3.5,、、y轴都为5由连续的点构成蛇的身体。
%body =
%5.0000 5.0000
%4.5000 5.0000
%4.0000 5.0000
%3.5000 5.0000
%主函数
function snakegame(~,~)
snaketop=[body(1,:)+direction;body(1,:)+1/2*direction];
%获取新蛇头坐标,新增是每次都向蛇头增添两个点,为了保持足够密集所以第二个点的距离稍微小一点1/2*direction
snaketop(snaketop>len)=snaketop(snaketop>len)-len;
snaketop(snaketop<1)=snaketop(snaketop<1)+len;
%蛇在穿过边界的时候,蛇的坐标超出画框范围的点会移到画框对面。
body=[snaketop;body];%为身体增添新的蛇头
body(long+1:end,:)=[];%删除身体超过长度的部分,因为是往蛇头添加点而不是往身体加,
%所以穿墙之后要把多余的长度删掉
if(snaketop(1,1)-food(1))^2+(snaketop(1,2)-food(2))^2<1;
%蛇头的坐标(x,y)减去食物的坐标小于1或为零时相当于吃到了食物,
%^2的意思是让算术非负,因为左边轴在第一象限为非负,若非负时蛇就会无限吃到食物实现无限增长
long = long + 2;
food = randi(len, [1, 2]);
end
set(plotfood,'XData',food(1),'YData',food(2))
set(plotsnake,'XData',body(:,1),'YData',body(:,2))
end
这是我写的程序 我发现吃到食物什么都正常 就是判断不了蛇碰到身体会死亡,,求求大神帮助我! |
|