尝试在MATLAB中玩Minecraft: Education Edition

简介 jiè)

在我的大学,我们与MATLAB签署了校园全线授权协议,使得学生和教职员工都可以使用MATLAB!此外,由于与微软教育机构签署了综合协议(EES),学生们可以通过学生版Microsoft 365使用Minecraft教育版,这让我觉得如果在MATLAB上能玩Minecraft会很有趣。

本次的目标

スクリーンショット 2021-08-17 1.31.53.png

用MATLAB操作代理人,进行豆腐建筑!

所需之物

    Windows PC
    Minecraft Education Edition
    Code Connection for Minecraft
    MATLAB

安装Minecraft:教育版

今回はMinecraft: Education EditionをMATLABでいじっていく

请点击下方链接进行下载并运行Minecraft教育版。

image.png

minecraft.png

我的世界代码连接

在 Microsoft Store 下载并安装 Minecraft 的 Code Connection。

image.png

agent.png

由于代理程序已经生成,所以这次我们将在MATLAB中运行和测试此代理。

在MATLAB中运行代理程序

皆さん当然インストールしてあるであろうMATLABを起動します
Code ConnectionはAPIがあるのでそれをMATLABで叩くことでエージェントを操作していきます
Code Builder for Minecraft: Education Edition API Documentation

我将使用MATLAB创建一个新的Live Script。

请尝试运行下面的代码。

url = "http://localhost:8080/move?direction=forward";
res = webread(url);
value = jsondecode(res)

我认为代理商向前迈进了一步。

エージェントがどのように機能するかはurl変数のhttp://localhost:8080/ あとによって決まります。
上記のAPIドキュメントを参考にして、ほしい機能を追加してみてください!

如果要走十步的话,可以尝试使用for循环。

s = 10;
for i = 1:s
    url = "http://localhost:8080/move?direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

将其转换为函数

让我们将在先前接触过的内容中继续前进的部分进行函数化。

function f_move
url = "http://localhost:8080/move?direction=forward";
res = webread(url);
value = jsondecode(res);
end

通过执行f_move函数,现在可以向前移动了。

制作豆腐的脚本

我准备了很多函数。

% 前に移動する関数
function move_f
    url = "http://localhost:8080/move?direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

% 後ろに移動する関数
function move_b
    url = "http://localhost:8080/move?direction=back";
    res = webread(url);
    value = jsondecode(res);
end

% 右に移動する関数
function move_r
    url = "http://localhost:8080/move?direction=right";
    res = webread(url);
    value = jsondecode(res);
end

% 左に移動する関数
function move_l
    url = "http://localhost:8080/move?direction=left";
    res = webread(url);
    value = jsondecode(res);
end

% 上に移動する関数
function move_u
    url = "http://localhost:8080/move?direction=up";
    res = webread(url);
    value = jsondecode(res);
end

% 下に移動する関数
function move_d
    url = "http://localhost:8080/move?direction=down";
    res = webread(url);
    value = jsondecode(res);
end

% 前にものを置く関数
function place
    url = "http://localhost:8080/place?slotNum=1&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

之后我会思考如何组装这个房子。我尝试了使用循环语句来完成,但是我觉得使用三维数组可以更加巧妙地实现。

h = 5; % 高さ
w = 6; % 幅
d = 5; % 奥行き

for i = 1:h
    for j = 1:w
        for k = 1:d
            if j == 1
                move_b;
                place;
            elseif j == w
                move_b;
                place;
            elseif k == 1
                move_b;
                place;
            elseif k == d
                move_b;
                place;
            elseif i == h
                move_b;
                place;
            else
                move_b;
            end
        end
        move_r;
        for a = 1:d
            move_f;
        end
    end
    move_u;
    for b = 1:w
        move_l;
    end
end

我也试着创建了一个类似MATLAB的山。

matlogo.png

我尝试自动创建了一个类似MATLAB的山!(虽然可以做得更大,但是因为需要时间,所以我选择了小一点的山)

这次我试着用数组来创建一个山的程序。
我从MATLAB的logo函数生成了一个9×9的MATLAB山(随便起的名字)并将其转换成了一个数组。
由于山太高了一点,所以我将高度压缩到四分之一以生成MATLAB山。

% matlab logo
mat_logo = [  -4.1474   -2.2221    1.5828    6.2576   10.0233   10.8842    7.5711    0.4568   -8.2948;
            2.6789    7.2273   13.5919   20.7434   26.6830   28.7386   24.7071   14.4545    0.4568;
            5.9884   11.1152   17.9129   25.9224   33.8068   38.3987   35.8258   24.7071    7.5711;
            4.5416    7.8502   12.2509   18.0703   27.0549   36.8454   38.3987   28.7386   10.8842;
            0.6439    1.0859    1.6770    2.1659    8.3970   27.0549   33.8068   26.6830   10.0233;
           -0.0850   -0.1451   -0.2253   -0.7048    2.1659   18.0703   25.9224   20.7434    6.2576;
                 0         0         0   -0.2253    1.6770   12.2509   17.9129   13.5919    1.5828;
                 0         0         0   -0.1451    1.0859    7.8502   11.1152    7.2273   -2.2221;
                 0         0         0   -0.0850    0.6439    4.5416    5.9884    2.6789   -4.1474]

mat_logo_int = round((mat_logo+4)/4)+1  % 負がめんどくさいので大体正の数にして最後に一段分下駄を履かせてあげる
coler_h = round(max(mat_logo_int,[],"all")/6)   % 高さで色分けをするために高さを分割
for h = 1:max(mat_logo_int,[],"all")    % 最大の高さまで繰り返す
    for i = 1:9
        for j = 1:9
            % 配列の要素より低い位置にいる場合にブロックを置く
            if h < mat_logo_int(i,j)
                % ブロックの色分け
                if h < coler_h
                    place1;
                elseif h < coler_h*2
                    place2;
                elseif h < coler_h*3
                    place3;
                elseif h < coler_h*4
                    place4;
                elseif h < coler_h*5
                    place5;
                else
                    place6;
                end
            end
            move_b;
        end
        move_r;
        for a = 1:9
            move_f;
        end
    end
    move_u;
    for a = 1:9
        move_l;
    end
end

由于引入了新的颜色分类,我们需要准备新的函数。

function place1
    url = "http://localhost:8080/place?slotNum=1&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

function place2
    url = "http://localhost:8080/place?slotNum=2&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

function place3
    url = "http://localhost:8080/place?slotNum=3&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

function place4
    url = "http://localhost:8080/place?slotNum=4&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

function place5
    url = "http://localhost:8080/place?slotNum=5&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

function place6
    url = "http://localhost:8080/place?slotNum=6&direction=forward";
    res = webread(url);
    value = jsondecode(res);
end

只需将所需颜色的方块给代理并执行,就可以制作出丰富多彩的MATLAB标志的山!

bannerAds