用matlab写贪吃蛇游戏
时间: 2023-10-31 15:02:40 浏览: 91
下面是一个简单的贪吃蛇游戏的 MATLAB 代码:
```matlab
% 设置游戏参数
n = 20; % 场地大小
s = round(n/2); % 蛇的初始位置
snake = [s s+1]; % 蛇的初始身体
food = [randi(n) randi(n)]; % 食物的初始位置
dir = 'left'; % 蛇的初始方向
score = 0; % 初始得分
% 创建游戏场地
field = zeros(n);
field(snake(1),snake(2)) = 1;
field(food(1),food(2)) = -1;
% 开始游戏循环
while true
% 显示场地和得分
clc;
disp(['Score: ' num2str(score)]);
for i = 1:n
for j = 1:n
if field(i,j) == 1
fprintf('O');
elseif field(i,j) == -1
fprintf('X');
else
fprintf('-');
end
end
fprintf('\n');
end
% 获取用户输入
if kbhit(1)
key = getkey(1);
if strcmp(key,'up') && ~strcmp(dir,'down')
dir = 'up';
elseif strcmp(key,'down') && ~strcmp(dir,'up')
dir = 'down';
elseif strcmp(key,'left') && ~strcmp(dir,'right')
dir = 'left';
elseif strcmp(key,'right') && ~strcmp(dir,'left')
dir = 'right';
end
end
% 移动蛇
switch dir
case 'up'
snake = [snake(1)-1 snake(2)];
case 'down'
snake = [snake(1)+1 snake(2)];
case 'left'
snake = [snake(1) snake(2)-1];
case 'right'
snake = [snake(1) snake(2)+1];
end
% 判断游戏是否结束
if snake(1) < 1 || snake(1) > n || snake(2) < 1 || snake(2) > n || field(snake(1),snake(2)) == 1
disp('Game over!');
break;
end
% 判断是否吃到食物
if isequal(snake,food)
score = score + 1;
field(snake(1),snake(2)) = 1;
food = [randi(n) randi(n)];
while field(food(1),food(2)) ~= 0
food = [randi(n) randi(n)];
end
field(food(1),food(2)) = -1;
else
field(snake(1),snake(2)) = 1;
tail = find(field==1,1,'last');
field(tail) = 0;
end
% 控制游戏速度
pause(0.1);
end
```
这个代码使用了一个 `field` 数组来表示游戏场地,其中 1 表示蛇的身体,-1 表示食物,0 表示空位。`kbhit` 和 `getkey` 函数用于获取用户的按键输入。游戏循环中,每次移动蛇后判断游戏是否结束,是否吃到食物,并控制游戏速度。
阅读全文