【游戏】基于matlab GUI贪吃蛇游戏(难度、地图、音乐)【含Matlab源码 1160期】

2024-04-11 06:32

本文主要是介绍【游戏】基于matlab GUI贪吃蛇游戏(难度、地图、音乐)【含Matlab源码 1160期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【游戏】基于matlab GUI贪吃蛇游戏(难度、地图、音乐)【含Matlab源码 1160期】

获取代码方式2:
付费专栏Matlab游戏(初级版)

备注:
点击上面蓝色字体付费专栏Matlab游戏(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab游戏(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、部分源代码

function snake(cmd)
%SNAKE Graphical User Interface for playing “Nokia Classic Game” Snake.
%
% The Game:
% Make the snake grow longer by directing it to the food.
% Extra bonus points are given from hearts, eat them as fast as possible
% as amount of bonus points decreases with time.
% Higher level gives more points for the food but will also make it
% tougher to steer a long snake as speed increaces.
% Five different mazes as well as play w/o maze are possible.
%
% Game Controls:
% Steer snake using arrow keys. Pause game with ‘p’ or space.
%
% Example:
% snake % Start Main Snake Interface

%

global SNAKE MAZE LEVEL BOARD DIRECTION RUNNING FOOD SOUND BONUS PAUSE
if ~nargin
cmd = ‘init’;
end
if ~(ischar(cmd)||isscalar(cmd))
return;
end

switch cmd
case ‘init’
scrsz = get(0,‘ScreenSize’);
% Initialize figure window
f = figure(‘Name’,‘Snake’,…
‘Numbertitle’,‘off’,…
‘Menubar’,‘none’,…
‘Color’,[.95 .95 .95],…
‘DoubleBuffer’,‘on’,…
‘Position’,[(scrsz(3)-400)/2 (scrsz(4)-300)/2 400 300],…
‘Colormap’,[.58 .71 .65;.4 .4 .4;0 0 0;1 1 0],…
‘CloseRequestFcn’,sprintf(‘%s(’‘Stop’‘);closereq;’,mfilename),…
‘KeyPressFcn’,sprintf(‘%s(double(get(gcbf,’‘Currentcharacter’‘)))’,mfilename));
% Create the Menu
FileMenu = uimenu(f,‘Label’,‘&File’);
uimenu(FileMenu,‘Label’,‘New Game’,‘Accelerator’,‘N’,‘Callback’,sprintf(‘%s(’‘NewGame’‘)’,mfilename));
uimenu(FileMenu,‘Label’,‘Exit’,‘Accelerator’,‘Q’,‘Separator’,‘on’,‘Callback’,sprintf(‘%s(’‘Stop’‘);closereq’,mfilename));
LevelMenu = uimenu(f,‘Label’,‘&Level’);
uimenu(LevelMenu,‘Label’,‘|’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘|||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename),‘checked’,‘on’)
uimenu(LevelMenu,‘Label’,‘|||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘||||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘|||||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘||||||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
uimenu(LevelMenu,‘Label’,‘|||||||||’,‘Callback’,sprintf(‘%s(’‘Level’‘)’,mfilename))
MazesMenu = uimenu(f,‘Label’,‘&Mazes’);
uimenu(MazesMenu,‘Label’,‘No maze’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename),‘checked’,‘on’)
uimenu(MazesMenu,‘Label’,‘Box’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename))
uimenu(MazesMenu,‘Label’,‘Tunnel’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename))
uimenu(MazesMenu,‘Label’,‘Spiral’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename))
uimenu(MazesMenu,‘Label’,‘Blockade’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename))
uimenu(MazesMenu,‘Label’,‘Twisted’,‘Callback’,sprintf(‘%s(’‘Mazes’‘)’,mfilename))
HelpMenu = uimenu(f,‘Label’,‘&Help’);
uimenu(HelpMenu,‘Label’,‘Help’,‘Callback’,sprintf(‘helpwin %s’,mfilename))
uimenu(HelpMenu,‘Label’,‘Show Score’,‘Callback’,sprintf(‘%s(’‘ShowScore’‘)’,mfilename),‘Separator’,‘on’,‘Checked’,‘on’)
uimenu(HelpMenu,‘Label’,‘Play Sounds’,‘Callback’,sprintf(‘%s(’‘PlaySound’‘)’,mfilename),‘Checked’,‘on’)
uimenu(HelpMenu,‘Label’,‘About’,‘Callback’,sprintf(‘%s(’‘About’‘)’,mfilename),‘Separator’,‘on’);
% Create The axes
axes(‘Units’,‘normalized’,…
‘Position’, [0 0 1 1],…
‘Visible’,‘off’,…
‘DrawMode’,‘fast’,…
‘NextPlot’,‘replace’);
% Add the board
BOARD = image(getTitle,‘CDataMapping’,‘scaled’);
axis image
set(gca,…
‘XTick’,NaN,…
‘YTick’,NaN)
text(40,30,‘0’,…
‘FontUnits’,‘normalized’, …
‘FontSize’,0.03, …
‘FontName’,‘FixedWidth’,…
‘FontWeight’,‘bold’,…
‘Color’,[1 1 1],…
‘VerticalAlignment’,‘baseline’, …
‘HorizontalAlignment’,‘right’,…
‘Tag’,‘Score’);
SNAKE = [14,20;14,19;14,18;14,17;14,16];
MAZE = zeros(30,40);
LEVEL = 4;
SOUND = true;
case 28 % left
if SNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1
DIRECTION = cmd;
end
case 29 % right
if SNAKE(2,2)~=mod(SNAKE(1,2),40)+1
DIRECTION = cmd;
end
case 30 % up
if SNAKE(2,1)~=mod(SNAKE(1,1)-2,30)+1
DIRECTION = cmd;
end
case 31 % down
if SNAKE(2,1)~=mod(SNAKE(1,1),30)+1
DIRECTION = cmd;
end
case ‘Level’ % Change of Level
set(get(get(gcbo,‘Parent’),‘Children’),‘checked’,‘off’)
set(gcbo,‘checked’,‘on’)
LEVEL = length(get(gcbo,‘Label’));
case ‘Mazes’ % Change of Maze
set(get(get(gcbo,‘Parent’),‘Children’),‘checked’,‘off’)
set(gcbo,‘checked’,‘on’)
MAZE = zeros(30,40);
switch get(gcbo,‘Label’)
case ‘No maze’
case ‘Box’
MAZE([1 30]😅 = 1;
MAZE(:,[1 40]) = 1;
case ‘Tunnel’
MAZE([1:4 26:30],[1 40]) = 1;
MAZE([1 30],[1:4 36:40]) = 1;
MAZE([10 20],15:25) = 1;
case ‘Spiral’
MAZE(1:15,15) = 1;
MAZE(15:30,25) = 1;
MAZE(25,1:15) = 1;
MAZE(5,25:40) = 1;
case ‘Blockade’
MAZE([1:10 end-10:end],[1 end]) = 1;
MAZE([1 end]😅 = 1;
MAZE([8 22],15:25) = 1;
MAZE(5:10,[10 30]) = 1;
MAZE(20:25,[10 30]) = 1;
case ‘Twisted’
MAZE([1 2 3 9 16 31 39 46 61 69 76 91 99 106 121 129 …
136 159 166 189 196 219 226 249 256 279 286 301 309 …
316 331 339 346 361 369 376 391 399 406 421 429 436 …
451 459 466 481 489 496 511 512 513 514 515 516 517 …
518 519 526 541 556 571 586 601 616 631 646 661 676 …
677 678 679 680 681 682 683 684 685 686 687 688 689 …
690 691 699 706 721 729 736 751 759 766 781 789 796 …
811 819 826 841 849 856 871 879 886 901 909 916 931 …
939 946 969 976 999 1006 1029 1036 1059 1066 1089 …
1096 1119 1126 1149 1156 1179 1186]) = 1;
end
feval(mfilename,‘Stop’)
case ‘ShowScore’ % Change of Show Score
switch get(gcbo,‘checked’)
case ‘on’
set(gcbo,‘checked’,‘off’)
set(findobj(gcbf,‘Tag’,‘Score’),‘Visible’,‘off’)
case ‘off’
set(gcbo,‘checked’,‘on’)
set(findobj(gcbf,‘Tag’,‘Score’),‘Visible’,‘on’)
end
case ‘PlaySound’ % Change of Play Sounds
switch get(gcbo,‘checked’)
case ‘on’
set(gcbo,‘checked’,‘off’)
SOUND = false;
case ‘off’
set(gcbo,‘checked’,‘on’)
SOUND = true;
end
case ‘NewGame’ % New Game N or Ctrl-N
set(findobj(gcbf,‘Tag’,‘Score’),‘String’,‘0’)
SNAKE = [14,20;14,19;14,18;14,17;14,16];
DIRECTION = 29; % right
BONUS = 0;
PAUSE = false;
feval(mfilename,‘Food’)
feval(mfilename,‘Start’)
case ‘Start’ % Start Game
RUNNING = true;
bonusCounter = 0;
foodCounter = 0;
while(RUNNING)
if ~PAUSE
SNAKE = circshift(SNAKE,1);

            switch DIRECTIONcase 28 % leftSNAKE(1,2) = mod(SNAKE(1,2)-2,40)+1;case 29 % rightSNAKE(1,2) = mod(SNAKE(1,2),40)+1;case 30 % upSNAKE(1,1) = mod(SNAKE(1,1)-2,30)+1;case 31 % downSNAKE(1,1) = mod(SNAKE(1,1),30)+1;end% Check if snake hits any barrierif MAZE(SNAKE(1,1),SNAKE(1,2)) || ...sum(ismember(SNAKE(2:end,1),SNAKE(1,1))+...ismember(SNAKE(2:end,2),SNAKE(1,2))==2)%If play soundif SOUNDsoundsc(sin(1:100),1000)endpause(.3)delete(findobj(gcbf,'Tag','Bonus'))feval(mfilename,'Stop')set(BOARD,'CData',getGameOver)else% Check if snake eats bonusif isequal(SNAKE(1,:),BONUS)% Update scorescorehandle = findobj(gcbf,'Tag','Score');set(scorehandle,'String',...num2str(LEVEL*ceil(bonusCounter/3)+...str2double(get(scorehandle,'String'))))%If play soundif SOUNDsoundsc(sin(1:100),5000)endbonusCounter = 1;endif BONUSbonusCounter = bonusCounter-1;if bonusCounter<=0delete(findobj(gcbf,'Tag','Bonus'))endend% Check if snake eats foodif isequal(SNAKE(1,:),FOOD)% Snake Grows!SNAKE(end+1,:) = SNAKE(end,:);% Update scorescorehandle = findobj(gcbf,'Tag','Score');set(scorehandle,'String',...num2str(LEVEL+str2double(get(scorehandle,'String'))))%If play soundif SOUNDsoundsc(sin(1:100),10000)end% Spawn new foodfeval(mfilename,'Food')if ~BONUS % only update if no bonus existbonusCounter = bonusCounter+15;foodCounter = foodCounter+1;end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

这篇关于【游戏】基于matlab GUI贪吃蛇游戏(难度、地图、音乐)【含Matlab源码 1160期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893313

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid