服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - Matlab实现贪吃蛇小游戏的示例代码

Matlab实现贪吃蛇小游戏的示例代码

2022-10-12 14:19slandarer C/C++

这篇文章主要为大家详细介绍了如何利用Matlab实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

由于老师说如果拿MATLAB制作出游戏或者有趣的动画的话。。

平时成绩可以拿满分

于是。。开始尝试制作各种matlab小游戏

最初通过Alex的贪吃蛇学到了一些东西,然后制作了一个类似的俄罗斯方块在课堂上展示的(都是动的方块嗯哒)。

后来自己也尝试写着玩了一些其他版本的贪吃蛇,并做出了一些改进。

补动图:

Matlab实现贪吃蛇小游戏的示例代码

Matlab实现贪吃蛇小游戏的示例代码

没错这就有点类似贪吃蛇大作战里的蛇啦

然后做出的改进包括:

在关闭窗口时不报错的设置,因为用了timer这个函数,在关闭图像时他会报错,我们就可以加入一个回调函数:

set(gcf,'tag','co','CloseRequestFcn',@clo);
  function clo(~,~)
      stop(game)
      delete(findobj('tag','co'));
      clf
      close
  end 

意思是每次有关闭请求时就调用clo这个函数

然后为了防止他提示你用递归的方式调用close,

再加上delete(findobj(‘tag’,‘co’));删除之前的设定。

完整代码

function snake
%axis set..............................................................
axis equal
len=40;
axis(0.5+[0,len,0,len])
set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')
set(gca,'color','k')
hold on
%snake and food begining set...........................................
snaketop=[5,5;4.5,5];
body=[5,5;4.5,5;4,5;3.5,5;3,5;2.5,5];
food=[10,10];
direction=[1,0];
long=6;
plotsnake=scatter(gca,body(:,1),body(:,2),120,'w','filled');
plotfood=scatter(gca,food(1),food(2),120,'w','filled');
%timer set.............................................................
set(gcf,'WindowButtonMotionFcn',@snakefcn)
fps = 8;
game = timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @snakegame);
start(game)
%..................................................................................
set(gcf,'tag','co','CloseRequestFcn',@clo);
  function clo(~,~)
      stop(game)
      delete(findobj('tag','co'));
      clf
      close
  end
  function snakegame(~,~)
      snaketop=[body(1,:)+direction;body(1,:)+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
          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
  function snakefcn(~,~)
      xy=get(gca,'CurrentPoint');
      x=xy(1,1);y=xy(1,2);
      dir=[x-body(1,1),y-body(1,2)];
      dis=sqrt((x-body(1,1))^2+(y-body(1,2))^2);
      direction=dir/dis;
  end
end

以上就是Matlab实现贪吃蛇小游戏的示例代码的详细内容,更多关于Matlab贪吃蛇游戏的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/slandarer/article/details/87996177

延伸 · 阅读

精彩推荐
  • C/C++C++实现LeetCode(118.杨辉三角)

    C++实现LeetCode(118.杨辉三角)

    这篇文章主要介绍了C++实现LeetCode(118.杨辉三角),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang8332021-12-03
  • C/C++C++ 使用CRC32检测内存映像完整性的实现步骤

    C++ 使用CRC32检测内存映像完整性的实现步骤

    当我们使用动态补丁的时候,那么内存中同样不存在校验效果,也就无法抵御对方动态修改机器码了,为了防止解密者直接对内存打补丁,我们需要在硬盘...

    lyshark4072021-11-17
  • C/C++浅谈C++中的构造函数分类及调用规则

    浅谈C++中的构造函数分类及调用规则

    这篇文章主要介绍了C++中的构造函数分类及调用规则,文中根据参数写出了几种不同类型的构造函数并解释了如何调用,需要的朋友可以参考下...

    YoferZhang9472021-03-27
  • C/C++c++11新特性多线程操作实战

    c++11新特性多线程操作实战

    这篇文章主要介绍了c++11新特性多线程操作实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    鬼谷子com7492021-09-28
  • C/C++opencv图片的任意角度旋转实现示例

    opencv图片的任意角度旋转实现示例

    这篇博客将介绍如何使用OpenCV旋转图像任意角度,实现各个角度的旋转,具有一定的参考价值,需要的朋友们下面随着小编来一起学习学习吧...

    笨笨的小棒棒11462021-11-17
  • C/C++C语言中的getchar()使用详解

    C语言中的getchar()使用详解

    大家好,本篇文章主要讲的是C语言中的getchar()使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下...

    lin飞子8762022-08-27
  • C/C++C语言修炼之路数据类型悟正法 解析存储定风魔上篇

    C语言修炼之路数据类型悟正法 解析存储定风魔上篇

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保...

    玄澈_10892022-10-09
  • C/C++原码, 反码与补码基础知识详细介绍

    原码, 反码与补码基础知识详细介绍

    这篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的...

    ziqiu.zhang4792021-04-21