用Matlab写一个贪吃蛇游戏程序
时间: 2023-10-19 16:05:20 浏览: 168
好的,下面是一个简单的贪吃蛇游戏程序的Matlab代码:
```matlab
clc; clear; close all;
% 定义游戏窗口大小和初始贪吃蛇的位置
windowSize = [20 20];
snakePosition = [10 10];
% 定义初始贪吃蛇的长度、方向和食物位置
snakeLength = 3;
snakeDirection = 'right';
foodPosition = [randi(windowSize(1)), randi(windowSize(2))];
% 创建游戏窗口
figure('KeyPressFcn', @changeDirection, 'Color', 'k', 'MenuBar', 'none', ...
'NumberTitle', 'off', 'Name', 'sprintf('贪吃蛇游戏')', 'Resize', 'off', ...
'Position', [400, 400, (windowSize(1)+1)*20, (windowSize(2)+1)*20]);
% 在游戏窗口中绘制贪吃蛇和食物
snakePlot = plot(snakePosition(1), snakePosition(2), 'wo', 'MarkerSize', 20);
foodPlot = plot(foodPosition(1), foodPosition(2), 'ro', 'MarkerSize', 20);
% 循环运行游戏
while true
% 更新贪吃蛇的位置
switch snakeDirection
case 'up'
snakePosition(2) = snakePosition(2) + 1;
case 'down'
snakePosition(2) = snakePosition(2) - 1;
case 'left'
snakePosition(1) = snakePosition(1) - 1;
case 'right'
snakePosition(1) = snakePosition(1) + 1;
end
% 判断贪吃蛇是否吃到了食物
if isequal(snakePosition, foodPosition)
snakeLength = snakeLength + 1;
foodPosition = [randi(windowSize(1)), randi(windowSize(2))];
set(foodPlot, 'XData', foodPosition(1), 'YData', foodPosition(2));
end
% 判断贪吃蛇是否碰到了游戏窗口的边缘或自身
if snakePosition(1) < 1 || snakePosition(1) > windowSize(1) || ...
snakePosition(2) < 1 || snakePosition(2) > windowSize(2) || ...
any(isequal(snakePosition, snakePlot.XData(1:snakeLength-1), ...
snakePlot.YData(1:snakeLength-1)))
break;
end
% 更新贪吃蛇的长度和位置
set(snakePlot, 'XData', [snakePlot.XData(2:end), snakePosition(1)], ...
'YData', [snakePlot.YData(2:end), snakePosition(2)]);
% 暂停一段时间,控制游戏速度
pause(0.2);
end
% 显示游戏结束的消息
msgbox(sprintf('游戏结束!您的得分是%d。', snakeLength-3));
% 定义方向修改函数
function changeDirection(src, event)
global snakeDirection;
switch event.Key
case 'uparrow'
if ~isequal(snakeDirection, 'down')
snakeDirection = 'up';
end
case 'downarrow'
if ~isequal(snakeDirection, 'up')
snakeDirection = 'down';
end
case 'leftarrow'
if ~isequal(snakeDirection, 'right')
snakeDirection = 'left';
end
case 'rightarrow'
if ~isequal(snakeDirection, 'left')
snakeDirection = 'right';
end
end
end
```
这个程序中,首先定义了游戏窗口大小、初始贪吃蛇的位置、长度和方向,以及食物的位置。然后创建了一个游戏窗口,并在其中绘制了贪吃蛇和食物。接着进入循环,每次循环更新贪吃蛇的位置,并判断贪吃蛇是否吃到了食物或碰到了游戏窗口边缘或自身,如果满足条件就结束游戏。循环中还控制了游戏速度,并且定义了一个方向修改函数,以响应玩家的方向键输入。当游戏结束后,会弹出一个消息框显示得分。
阅读全文