乌龟吃鱼小游戏的MATALB实现

来源:互联网 编辑:wan玩得好手游小编更新:2024-11-01 06:14:33 人气:


小游戏编程问题描述:

1. 假设游戏布景为一个10*10的简单二维栅格场景;

2. 游戏自动生成1只乌龟和10条鱼;

3. 它们移动方向随机;

4. 乌龟最大移动能力为2;可随机选择移动1还是2,鱼的移动能力为1

5. 当移动到场景边界,自动反方向移动;

6. 乌龟初始化体能为100;每移动一次消耗体能1

7. 当乌龟和鱼的坐标重合,代表乌龟吃掉鱼,体能增加20

8. 鱼不计体力消耗;

9. 乌龟体力值为0或者鱼被吃光,则游戏结束。

 

代码编写思路:

  1. 数据初始化,包含二维栅格场景(x, y),鱼的初始数目,每条鱼的初始位置,乌龟的数目,乌龟的初始位置,乌龟的初始体力值,吃鱼可以增加的体力值等;如果需要也可以定义一下程序循环次数t,便于观测小程序运行情况;

  2. While语句判断程序停止条件,这里因为在while里面一开始就需要判断鱼和龟的初始位置,是否吃鱼,因此鱼的数目程序停止条件在循环内完成,这里只对乌龟的体力值作为程序停止条件;

  3. 判断初始化情况乌龟是否能吃得到鱼,即乌龟初始化位置是否与某条鱼位置重合,若重合则重合的鱼被吃掉,鱼数目减1;后面做鱼的数目判断,鱼的数目是否为0,如果是,则跳出while循环,游戏结束,否则继续运行下面程序;

  4. 鱼随机移动,可以随机产生一个1-4flag_fish变量作为鱼移动方向的情况,上下左右分别为1234,后面接switch语句进行每条鱼的位置变化;鱼随机移动之前得判断是否在二维栅格的边界,如果在边界则向反方向移动。

  5. 乌龟的随机移动,这里的处理方法和鱼的移动类似,只是需要增加一个1-2随机数产生的flag_distance变量,产生本次移动的移动距离1或者2,这里同样要判断是否在边界情况,由于乌龟的最大移动距离为2,因此要判断是否跳出场景范围。

  6. 对当前鱼的位置以及乌龟的位置进行作图。

 

MATLAB程序代码如下:

clc,clear all;

%% 数据初始化

t = 0;  %循环次数

X = 1:10;

Y = 1:10;

fish = 10;

fish_position = randi([1,10],10,2);

wugui = 1;

wugui_position = randi([1,10],1,2);

wugui_tili = 100;

eat_fish_tili = 20;

 

%% 判断

while(wugui_tili ~= 0)

    %% 吃鱼

    flag_same= [];

    [I,~] =size(fish_position);

    for i =1:I

        ifwugui_position == fish_position(i,:);

           wugui_tili = wugui_tili + eat_fish_tili;

           flag_same = [flag_same,i];

        end

    end

   fish_position([flag_same],:) = [];

   

    ifisempty(fish_position)

        break

    end

    %% 鱼随机移动

    [J,~] =size(fish_position);

    for j =1:J

        flag1= randi([1,4],1);

        iffish_position(j,1) == 1

           flag1 = 1;

       elseif fish_position(j,1) == 10

           flag1 = 2;

       elseif fish_position(j,2) == 1

           flag1 = 3;

       elseif fish_position(j,2) == 10

           flag1 = 4;

        end

       

       switch flag1

           case 1

                fish_position(j,1) =fish_position(j,1)+1;

           case 2

               fish_position(j,1) = fish_position(j,1)-1;

           case 3

               fish_position(j,2) = fish_position(j,2)+1;

           case 4

               fish_position(j,2) = fish_position(j,2)-1;

        end

    end

    %% 龟随机移动

    flag2 =randi([1,4],1);

   flag_distance = randi([1,2],1);

    ifwugui_position(1,1) == 1

        flag2= 1;

    elseifwugui_position(1,1) == 10

        flag2= 2;

    elseifwugui_position(1,2) == 1

        flag2= 3;

    elseifwugui_position(1,2) == 10

        flag2= 4;

    end

       

    switchflag2

        case1

           wugui_position(1,1) = wugui_position(1,1)+flag_distance;

        case2

           wugui_position(1,1) = wugui_position(1,1)-flag_distance;

        case3

           wugui_position(1,2) = wugui_position(1,2)+flag_distance;

        case4

           wugui_position(1,2) = wugui_position(1,2)-flag_distance;

    end

    % 防止出界

    ifwugui_position(1,1) == 0

       wugui_position(1,1) = 2;

    elseifwugui_position(1,2) == 0

       wugui_position(1,2) = 2;

    elseifwugui_position(1,1) == 11

       wugui_position(1,1) = 9;

    elseifwugui_position(1,2) == 11

       wugui_position(1,2) = 9;

    end

    

   wugui_tili = wugui_tili-1;

    t = t+1;

   

    %% 画图

   plot(fish_position(:,1),fish_position(:,2),'ro');

    hold on

   plot(wugui_position(1),wugui_position(2),'g>')

    axis([011 0 11])

    drawnow;

    hold off

    pause(1);

end

仿真结果:

图中绿三角形表示乌龟,红小圈表示鱼。

孙国栋,重庆大学无线通信技术实验室硕士研究生,主研方向高速移动通信信道估计、智能信号与信息处理。

欢迎玩家到【wan玩得好手游】查看最新变态版手游攻略,只需要在百度输入【wan玩得好手游】就可以浏览最新上线送满vip的变态手游攻略了,更多有关BT手游的攻略和资讯,敬请关注玩得好手游!

更多...

热门推荐

更多...

相关文章