Minecraft で Rubyプログラミングを楽しむ情報をまとめてみました。
(2015.10.21 追加記事を書きました;
→・Ruby で Minecraft の mod を作る RubyCore が出た!) PyConJP 2015 で「MinecraftをPythonで遊ぶ」という素晴らしい講演がありました。
→・ドット絵自動生成から空飛ぶ絨毯まで! MinecraftをPythonで遊び倒す! #PyConJP_M #pyconjp - Togetterまとめ
ここでは、Minecraft を Ruby で Programmingして遊んでみます。
0.環境構築
環境構築は Raspberry Pi、PC(Mac、Windows)に合わせて、それぞれ以前の記事を参照してください。
→・Minecraft でプログラミングを楽しむ4つの方法
→・Raspberry Pi の Minecraft Pi 版でプログラミングを楽しむ方法
→・Minecraft PC 版に Mod を入れてプログラミングを楽しむ方法
1. gem(Minecraft-Pi Ruby)のインストール
Raspberry Pi用の Minecraft Pi版でも、Mac/ Windows/ Linux用の Minecraft PC版でも以下同じ操作です。
まず、Ruby でプログラミングするには Minecraft-Pi Ruby という gem をインストールします。
ターミナルで;
$ gem install minecraft-pi-ruby
(管理者権限が必要場合は、頭に sudo を付けて実行)
これで、OK です。
(2015.11.15 追記;おすすめ!
Minecraft-Pi Ruby で使える命令を独自に追加しました。そちらの gem をインストールするには;
$ gem install specific_install
$ gem specific_install https://github.com/noanoa07/minecraft-pi-ruby.git featureWindowsの場合、git が必要です。
→・GitHub のブランチにある gem をインストールする方法 )
2.Minecraft の起動
Minecraft を起動して、先にワールドの画面を開いた状態にしておきます。
この状態で、マウスカーソルを画面外に出します。(Pi版は Tabキーまたは Escキー、PC版は Escキー)
※ 同じ LAN環境にいれば、ゲームメニューで「LANに公開」を選ぶと、別の人とワールドを共有(マルチプレイ)できます。
(2015.11.18 追記;この設定をしておくと便利です。おすすめ!
→・Minecraft でマウスポインタを画面外に出して、一時停止させない方法)
Minecraft の基本操作については;
→・Raspberry Pi の Minecraft Pi 版でプログラミングを楽しむ方法
→・Minecraft PC 版に Mod を入れてプログラミングを楽しむ方法
3.プログラムの実行
あとは、ターミナルを起動して、Rubyプログラムを動かすだけです!
(irb でも実行できます。)
書き方、使えるコマンドの詳細は、Minecraft-Pi Ruby のサイトを参照してください。
後述のサンプルプログラムも参考に。
○初期設定
require 'minecraft-pi-ruby'
mc = Minecraft.new
実行には、上記の2行が必要です。(mc は任意の変数名で可。)
○コマンド
・say "message"
画面に文字(message)を表示
・set_camera_mode(Raspberry Pi のみ)
カメラモードを設定(:fixed、 :normal、 :follow)
画面に文字(message)を表示
・set_camera_mode(Raspberry Pi のみ)
カメラモードを設定(:fixed、 :normal、 :follow)
・set_block(x, y, z, ブロックID[, ブロックデータ]) または
set_block(position, ブロックID[, ブロックデータ])
座標(x, y, z)または position = Position.new(x, y, z) で指定
※ Minecraft の座標は、ブロック単位で、y座標が高さ方向になるのことに注意(上が +)
例)set_block(0, 0, 0, Block::STONE)
ブロックID は数字でも良い
ブロックデータは省略可
(ブロックID、ブロックデータは後述)
・get_block(x, y, z) ※独自拡張
座標(x, y, z) のブロックIDを返す
・set_blocks または make_cuboid
引数の指定は (x1, y1, z1, x2, y2, z2, ブロックID[, ブロックデータ]) または (position1, position2, ブロックID[, ブロックデータ])
例)set_blocks(0, 0, 0, 20, 20, 20, Block::OBSIDIAN)
ブロックID は数字でも良い
ブロックデータは省略可
(ブロックID、ブロックデータは後述)
・get_ground_height(x, z) または ground_height(x, z)
座標 (x, z) の地面の高さ(y座標)を返す
座標 (x, z) の地面の高さ(y座標)を返す
・set_player_position(x ,y, z) または set_player_position(position)
プレーヤーを座標 (x, y, z) に置く
・get_player_position ※独自拡張
プレーヤーの座標を Positionクラスで返す。
・キー入力の取得
Minecraft からキー入力の情報を取得することは現状ではできません。また、Minecraft ウィンドウがアクティブだと、ターミナルで実行中のプログラムにはキー入力の取得はできません。
そこで、ターミナルウィンドウをアクティブにしつつ、Minecraft ウィンドウを表示させることで、キー入力の情報をターミナル側で取得できます。
→・Minecraft でマウスポインタを画面外に出して、一時停止させない方法
※ Minecraftウィンドウ自体の移動などの操作は Escキーを押さないとできません。
なお、キー入力の取得には、Rubyの io/consoleライブラリが使えます。
→・Ruby - ターミナルのキー入力を得てカーソル移動とかする (curses無し) - Qiita
4.サンプルプログラム
(license; public domain)
○画面に文字を表示
hello.rb
-------------------------------------------------------------------------------
require 'minecraft-pi-ruby'
mc = Minecraft.new
mc.say 'Hello Minecraft World!'
-------------------------------------------------------------------------------
○土地を平地化
reset.rb
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------○土地を平地化
reset.rb
-------------------------------------------------------------------------------
require 'minecraft-pi-ruby'
mc = Minecraft.new
sleep 5
mc.say 'Reset this World!'
mc.set_blocks(-100, 0, -100, 100, 63, 100, Block::AIR)
mc.set_blocks(-100, -1, -100, 100, -1, 100, Block::GRASS)
mc.set_blocks(-100, -63, -100, 100, -2, 100, Block::STONE)
mc.set_player_position(0, 100, 0)
○ブロックを文字の形に地面に置く(上から見てください)
chars.rb
-------------------------------------------------------------------------------
require 'minecraft-pi-ruby'
mc = Minecraft.new
chars = [
'##### # # #### # # #',
'# # # # # # # # #',
'# # # # #### # #',
'#### # # # # # #',
'# # # # # # # ',
'# # #### #### # #',
]
sleep 5
mc.set_player_position(0, 100, 0)
mc.say 'Hello Ruby !'
# Reset the world
mc.set_blocks(-100, 0, -100, 100, 63, 100, Block::AIR)
mc.set_blocks(-100, -1, -100, 100, -1, 100, Block::GRASS)
mc.set_blocks(-100, -63, -100, 100, -2, 100, Block::STONE)
x = -10
y = 0
z = -10
chars.each do |line|
line.each_char do |ch|
if ch == '#'
mc.set_block(x, y, z, Block::GOLD_BLOCK)
end
x += 1
end
x = -10
z += 1
end
-------------------------------------------------------------------------------
参考)→・Minecraft Pi Editionで遊びながらプログラミングの勉強! - TONGARISM.COM
○押したキーを表示
chat.rb
-------------------------------------------------------------------------------
※ Cmd + Tab(または Alt + Tab)で Minecraftワールドを開いたまま、ターミナル(コマンドプロンプト)ウィンドウに切り替えて実行。下記の設定をしておくこと。プログラムの終了は Ctrl + C。
→・Minecraft でマウスポインタを画面外に出して、一時停止させない方法
(Minecraftウィンドウの移動などの操作は、Minecraftで Esc を押す。)
現在は、Python で書かれたプログラムが多いですが、デジタル時計、フラクタル樹木など参考になるものが多いです。
Rubyのプログラムも順次増やしていくつもりです。
→・Digital Clock in Minecraft - Raspberry Pi • View topic
→・Python & Minecraft on Raspberry Pi! - import minecraft - MCPIPY.com
→・Python coding for Minecraft - instructables
→・Adventures in Minecraft - <Stuff about="code" >
→・Minecraft API - <Stuff about="code" />
→・Minecraft Pi Recipe Cards - arghbox参考)→・Minecraft Pi Editionで遊びながらプログラミングの勉強! - TONGARISM.COM
○押したキーを表示
chat.rb
-------------------------------------------------------------------------------
require 'minecraft-pi-ruby'
require 'io/console'
mc = Minecraft.new
mc.say 'chat start!'
# ctrl + C to exit
while ch = STDIN.getch
exit if ch == ?\C-c
mc.say ch
end
-------------------------------------------------------------------------------※ Cmd + Tab(または Alt + Tab)で Minecraftワールドを開いたまま、ターミナル(コマンドプロンプト)ウィンドウに切り替えて実行。下記の設定をしておくこと。プログラムの終了は Ctrl + C。
→・Minecraft でマウスポインタを画面外に出して、一時停止させない方法
(Minecraftウィンドウの移動などの操作は、Minecraftで Esc を押す。)
現在は、Python で書かれたプログラムが多いですが、デジタル時計、フラクタル樹木など参考になるものが多いです。
Rubyのプログラムも順次増やしていくつもりです。
→・Digital Clock in Minecraft - Raspberry Pi • View topic
→・Python & Minecraft on Raspberry Pi! - import minecraft - MCPIPY.com
→・Python coding for Minecraft - instructables
→・Adventures in Minecraft - <Stuff about="code" >
→・Minecraft API - <Stuff about="code" />
→・Python Programming with Minecraft Pi: Early Draft - arghbox
(Codecademy用の生徒向けテキスト215ページ、教師向けテキスト45ページのpdfがダウンロードできる)
5.ブロックID、ブロックデータ
○ブロックID;(* はブロックデータあり)
-------------------------------------------------------------------------------
0 AIR(空気、何もない状態にする)
1 STONE(石)
2 GRASS(草)
3 DIRT(土)
4 COBBLESTONE(丸石)
5* WOOD_PLANKS(木材)
6* SAPLING(苗木)
7 BEDROCK(岩盤)
8 WATER_FLOWING
WATER(水)
9* WATER_STATIONARY(静止した水)
10 LAVA_FLOWING
LAVA(溶岩)
11* LAVA_STATIONARY(静止した溶岩)
12 SAND(砂)
13 GRAVEL(砂利)
14 GOLD_ORE(金鉱石)
15 IRON_ORE(鉄鉱石)
16 COAL_ORE(石炭鉱石)
17* WOOD(原木)
18* LEAVES(葉)
20 GLASS(ガラス)
21 LAPIS_LAZULI_ORE(ラピスラズリ鉱石)
22 LAPIS_LAZULI_BLOCK(ラビスラズリブロック)
24* SANDSTONE(砂岩)
26 BED(ベッド)
30 COBWEB(クモの巣)
31* GRASS_TALL(草)
35* WOOL(羊毛)
37 FLOWER_YELLOW(黄色い花)
38 FLOWER_CYAN(赤いバラ)
39 MUSHROOM_BROWN(キノコ 茶)
40 MUSHROOM_RED(キノコ 赤)
41 GOLD_BLOCK(金ブロック)
42 IRON_BLOCK(鉄ブロック)
43* STONE_SLAB_DOUBLE(重ねたハーフブロック)
44* STONE_SLAB(ハーフブロック)
45 BRICK_BLOCK(レンガブロック)
46* TNT(TNT爆弾)
47 BOOKSHELF(本棚)
48 MOSS_STONE(苔石)
49 OBSIDIAN(黒曜石)
50* TORCH(松明 たいまつ)
51 FIRE(炎)
53* STAIRS_WOOD(樫の木の階段)
54* CHEST(チェスト)
56 DIAMOND_ORE(ダイヤモンド鉱石)
57 DIAMOND_BLOCK(ダイヤモンドブロック)
58 CRAFTING_TABLE(作業台)
60 FARMLAND(耕地)
61* FURNACE_INACTIVE(かまど)
62* FURNACE_ACTIVE(燃えているかまど)
64 DOOR_WOOD(木のドア)
65* LADDER(はしご)
67* STAIRS_COBBLESTONE(丸太の階段)
71 DOOR_IRON(鉄のドア)
73 REDSTONE_ORE(レッドストーン鉱石)
78 SNOW(雪)
79 ICE(氷)
80* SNOW_BLOCK(雪ブロック)
81 CACTUS(サボテン)
82 CLAY(粘土)
83 SUGAR_CANE(サボテン)
85 FENCE(フェンス)
89 GLOWSTONE_BLOCK(グロウストーンブロック)
95 BEDROCK_INVISIBLE(鍵のかかったチェスト)
98* STONE_BRICK(石レンガ)
102 GLASS_PANE(板ガラス)
103 MELON(スイカ ブロック)
107* FENCE_GATE(フェンスゲート)
246 GLOWING_OBSIDIAN(輝く黒曜石)
247* NETHER_REACTOR_CORE(ネザーリアクターコア)-------------------------------------------------------------------------------
○ブロックデータ
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
5 WOOD_PLANKS(木材)
0: Oak
1: Spruce
2: Birch
3: Jungle
6 SAPLING(苗木)
0: Oak
1: Spruce
2: Birch
3: Jungle
9 WATER_STATIONARY(静止した水)
11 LAVA_STATIONARY(静止した溶岩)
0-7: Level of the water, 0 being the highest, 7 the lowest
(0-7: 高さ、0が一番低く、7が一番高い)
(0-7: 高さ、0が一番低く、7が一番高い)
17 WOOD(原木)
0: Oak (up/down)
1: Spruce (up/down)
2: Birch (up/down)
3: Jungle (up/down)
4: Oak (east/west)
5: Spruce (east/west)
6: Birch (east/west)
7: Jungle (east/west)
8: Oak (north/south)
9: Spruce (north/south)
10: Birch (north/south)
11: Jungle (north/south)
12: Oak (only bark)
13: Spruce (only bark)
14: Birch (only bark)
15: Jungle (only bark)
18 LEAVES(葉)
1: Oak leaves
1: Oak leaves
2: Spruce leaves
3: Birch leaves
24 SANDSTONE(砂岩)
0: Sandstone
1: Chiseled sandstone
2: Smooth sandstone
31 GRASS_TALL(草)
0: Shrub
1: Grass
2: Fern
3: Grass (color affected by biome)
35 WOOL(羊毛)
0: White
1: Orange
2: Magenta
3: Light Blue
4: Yellow
5: Lime
6: Pink
7: Grey
8: Light grey
9: Cyan
10: Purple
11: Blue
12: Brown
13: Green
14: Red
15:Black
43 STONE_SLAB_DOUBLE(重ねたハーフブロック)
44 STONE_SLAB(ハーフブロック)
0: Stone
1: Sandstone
2: Wooden
3: Cobblestone
4: Brick
5: Stone Brick
6: Nether Brick
7: Quartz
46 TNT(TNT爆弾)
0: Inactive
1: Ready to explode
50 TORCH(松明 たいまつ)
1: Pointing east
2: Pointing west
3: Pointing south
4: Pointing north
5: Facing up
53 STAIRS_WOOD(樫の木の階段)
67 STAIRS_COBBLESTONE(丸太の階段)
0: Ascending east
1: Ascending west
2: Ascending south
3: Ascending north
4: Ascending east (upside down)
5: Ascending west (upside down)
6: Ascending south (upside down)
7: Ascending north (upside down)
54 CHEST(チェスト)
61 FURNACE_INACTIVE(かまど)
62 FURNACE_ACTIVE(燃えているかまど)
65 LADDER(はしご)
107 FENCE_GATE(フェンスゲート)
2: Facing north
3: Facing south
4: Facing west
5: Facing east
80 SNOW_BLOCK(雪ブロック)
0-7: Height of snow, 0 being the lowest, 7 being the highest.
(0-7: 雪の高さ、0が一番低く、7が一番高い)
(0-7: 雪の高さ、0が一番低く、7が一番高い)
98 STONE_BRICK(石レンガ)
0: Stone brick
1: Mossy stone brick
2: Cracked stone brick
3: Chiseled stone brick
247 NETHER_REACTOR_CORE(ネザーリアクターコア)
0: Unused
1: Active
2: Stopped / used up
※詳細は未検証です
→・Minecraft API - <Stuff about="code" />
→・Minecraft API - <Stuff about="code" />
(Qiita [キータ] にも投稿;
Raspberry Pi で Minecraft Pi 版の Programming をする方法を解説。
特に Scratch について詳しい。 Python についても少し紹介。
「Pythonで自由自在 楽しく学ぶラズパイプログラミング」
第1回 Python と Minecraft で遊ぼう(ガリレオ 小山博史)が掲載。
Minecraft で Programming をする方法(Mac/Windows/Raspberry Pi)を詳しく解説。サンプルプログラム多数。
関連サイトに動画;