matlab贪吃蛇
时间: 2023-07-13 12:04:23 浏览: 55
以下是MATLAB贪吃蛇的简单实现示例代码:
```matlab
clear all;
close all;
clc;
% 初始化游戏设置
game.width = 20; % 场景宽度
game.height = 20; % 场景高度
game.snake_init_length = 3; % 初始蛇身长度
game.speed = 0.1; % 游戏速度,单位为秒
game.score = 0; % 初始分数
% 初始化蛇
snake.x = ceil(game.width/2)*ones(1,game.snake_init_length); % x坐标
snake.y = ceil(game.height/2):-1:ceil(game.height/2)-game.snake_init_length+1; % y坐标
snake.direction = 'right'; % 初始方向
% 初始化食物
food.x = randi(game.width);
food.y = randi(game.height);
% 绘制场景
figure('Name','MATLAB贪吃蛇','NumberTitle','off','MenuBar','none','ToolBar','none',...
'Position',[100,100,game.width*20,game.height*20],'Color',[0.2,0.2,0.2],'KeyPressFcn',@change_direction);
hold on;
axis equal;
axis off;
for i = 1:game.width
for j = 1:game.height
plot(i-0.5,j-0.5,'s','MarkerSize',20,'MarkerEdgeColor',[0.4,0.4,0.4],'MarkerFaceColor',[0.2,0.2,0.2]);
end
end
% 绘制蛇和食物
snake_handle = plot(snake.x,snake.y,'o','MarkerSize',20,'MarkerEdgeColor','none','MarkerFaceColor',[0.9,0.9,0.9]);
food_handle = plot(food.x-0.5,food.y-0.5,'s','MarkerSize',20,'MarkerEdgeColor','none','MarkerFaceColor',[1,0,0]);
% 游戏循环
while true
% 移动蛇
switch snake.direction
case 'up'
snake.x = [snake.x(1),snake.x(1:end-1)];
snake.y = [snake.y(1)+1,snake.y(1:end-1)];
case 'down'
snake.x = [snake.x(1),snake.x(1:end-1)];
snake.y = [snake.y(1)-1,snake.y(1:end-1)];
case 'left'
snake.x = [snake.x(1)-1,snake.x(1:end-1)];
snake.y = [snake.y(1),snake.y(1:end-1)];
case 'right'
snake.x = [snake.x(1)+1,snake.x(1:end-1)];
snake.y = [snake.y(1),snake.y(1:end-1)];
end
% 判断是否吃到食物
if snake.x(1) == food.x && snake.y(1) == food.y
game.score = game.score + 1;
set(findobj('Tag','score'),'String',num2str(game.score));
snake.x(end+1) = snake.x(end);
snake.y(end+1) = snake.y(end);
food.x = randi(game.width);
food.y = randi(game.height);
set(food_handle,'XData',food.x-0.5,'YData',food.y-0.5);
end
% 判断是否游戏结束
if snake.x(1) < 1 || snake.x(1) > game.width || snake.y(1) < 1 || snake.y(1) > game.height || ...
any(snake.x(2:end) == snake.x(1) & snake.y(2:end) == snake.y(1))
msgbox(['Game Over! Your score is ',num2str(game.score)],'MATLAB贪吃蛇','warn','modal');
break;
end
% 更新蛇的位置
set(snake_handle,'XData',snake.x,'YData',snake.y);
pause(game.speed);
end
% 改变蛇的方向
function change_direction(~,event)
global snake;
switch event.Key
case 'uparrow'
if ~strcmp(snake.direction,'down')
snake.direction = 'up';
end
case 'downarrow'
if ~strcmp(snake.direction,'up')
snake.direction = 'down';
end
case 'leftarrow'
if ~strcmp(snake.direction,'right')
snake.direction = 'left';
end
case 'rightarrow'
if ~strcmp(snake.direction,'left')
snake.direction = 'right';
end
end
end
```
运行该代码可以得到一个基本的MATLAB贪吃蛇游戏界面,可以使用方向键来改变蛇的移动方向,吃到食物后分数会增加,游戏结束后会弹出提示框显示分数。该代码可以根据个人需求进行扩展和优化。