如何用Matlab写大鱼吃小鱼游戏
时间: 2023-05-30 20:03:39 浏览: 310
大鱼吃小鱼游戏是一种简单的游戏,玩家需要控制大鱼吃掉尽可能多的小鱼,同时避免被更大的鱼吃掉。以下是一个用 Matlab 编写大鱼吃小鱼游戏的简单示例。
1. 首先创建一个新的 Matlab 程序,命名为 "fish_game.m"。
2. 定义游戏窗口的大小和背景颜色:
```matlab
figure('Name', 'Fish Game', 'NumberTitle', 'off', ...
'MenuBar', 'none', 'ToolBar', 'none', ...
'Units', 'normalized', 'Position', [0.1 0.1 0.8 0.8], ...
'Color', [0.2 0.6 1]);
```
3. 创建一个大鱼和几条小鱼,并定义它们的初始位置和大小:
```matlab
% 大鱼
fish_size = 0.2;
fish_pos = [0.5 0.5];
fish = rectangle('Position', [fish_pos fish_size fish_size], ...
'Curvature', [1 1], 'FaceColor', [1 0.6 0]);
% 小鱼
num_fish = 10;
fish_sizes = rand(num_fish, 1) * 0.05 + 0.05;
fish_pos = rand(num_fish, 2);
fish_color = rand(num_fish, 3) * 0.5 + 0.5;
for i = 1:num_fish
fish(i) = rectangle('Position', [fish_pos(i,:) fish_sizes(i) fish_sizes(i)], ...
'Curvature', [1 1], 'FaceColor', fish_color(i,:));
end
```
4. 创建一个定时器,每隔一定时间移动小鱼的位置:
```matlab
timer = timer('ExecutionMode', 'fixedRate', 'Period', 0.1, ...
'TimerFcn', @(~,~) move_fish(fish));
start(timer);
```
5. 创建一个函数 "move_fish",用于移动小鱼的位置,并检查大鱼是否吃掉了小鱼:
```matlab
function move_fish(fish)
global fish_size fish_pos
for i = 1:length(fish)
% 随机移动小鱼的位置
fish_pos(i,:) = fish_pos(i,:) + randn(1,2) * 0.05;
% 保持小鱼在屏幕内
fish_pos(i,:) = max(fish_pos(i,:), fish_size);
fish_pos(i,:) = min(fish_pos(i,:), 1-fish_size);
% 更新小鱼的位置
set(fish(i), 'Position', [fish_pos(i,:) fish_size fish_size]);
% 检查大鱼是否吃掉了小鱼
if norm(fish_pos(i,:) - fish_pos(1,:)) < fish_size
delete(fish(i));
end
end
end
```
6. 创建一个键盘响应函数,用于控制大鱼的移动:
```matlab
function key_press(~, event)
global fish_size fish_pos
switch event.Key
case 'leftarrow'
fish_pos(1,1) = max(fish_pos(1,1) - 0.05, fish_size);
case 'rightarrow'
fish_pos(1,1) = min(fish_pos(1,1) + 0.05, 1-fish_size);
case 'downarrow'
fish_pos(1,2) = max(fish_pos(1,2) - 0.05, fish_size);
case 'uparrow'
fish_pos(1,2) = min(fish_pos(1,2) + 0.05, 1-fish_size);
end
set(fish(1), 'Position', [fish_pos(1,:) fish_size fish_size]);
end
```
7. 将键盘响应函数绑定到游戏窗口:
```matlab
set(gcf, 'KeyPressFcn', @key_press);
```
8. 运行游戏:
```matlab
global fish_size fish_pos
fish_size = 0.2;
fish_pos = [0.5 0.5];
fish = [];
move_fish(fish);
```
玩家可以使用方向键控制大鱼的移动,尝试吃掉尽可能多的小鱼。
阅读全文
相关推荐








