87
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Minecraftでプログラミングを楽しむ方法(Ruby, Python)

Last updated at Posted at 2015-11-22

Minecraft PC版にRaspberry Jam Modを入れると、プログラムでMinecraft内のブロック、プレイヤーを動かして遊ぶことができます。

57e43a54.png

#手順の概略

  1. Minecraftをインストール
  2. Forgeをインストール
  3. Modをインストール
  4. gemをインストール(Rubyの場合)
  5. プログラムの実行

※ Raspberry Piでは1〜3の手順が省略できる。

環境

  • OS X 10.11 El Capitan または Windows 7
  • Minecraft 1.8.8
  • Minecraft Forge 18-11.14.4.1563
  • Raspberry Jam Mod 0.51
  • Minecraft-Pi-Ruby 0.0.1

#1-a.Minecraftのインストール
Minecraftのウェブサイトから購入(US$26.95)、あるいは体験版をインストールする。
(体験版はサイト右側の「Get Minecraft」の下にある「Download it here」をクリック)

#1-b.Minecraftの起動
Minecraftを起動すると、Minecraft Launcher (1.6.48) が起動する。

※ Macで、"Javaのインストールが必要です" というようなメッセージが出た場合は、Javaをインストールする。

#1-c.Profileの設定
release 1.8.xに設定する。

  1. Minecraft Launcherの左下の「Profile」には、ユーザー名の付いたProfileが表示されているはずなので、「Edit Profile」ボタンを押す。
  2. 「Use Version」で最新の「release 1.8.8」を選ぶ。
  3. 右下の「Save Profile」ボタンを押して、設定を保存する。

※「1.8.xではなく、1.8そのものを選ばなくてはいけない」という情報もあったので、うまくいかなかった場合は、release 1.8を選ぶ。

#1-d.Minecraftで新規ワールドを作る
次でForgeをインストールするには、1.8系で作ったワールドを一度は起動しておく必要がある。

  1. Minecraft Launcherの「Play」を押すと、Minecraft(1.8.8)が起動する。
  2. 「シングルプレイ(Singleplayer)」を押し、「ワールド新規作成(Create New World)」を押すと、Minecraftワールドが作られる。(ワールド名、ゲームモードはお好みで。)
  3. 少し遊んでみて動作を確認したら、Minecraftを終了する。

※ ワールドの画面からマウスポインタを外に出したい時、ワールドを終了したい時は、Escキーを押す。

###※Minecraftの基本操作
####○キーボード

  • W 前進

  • S 後退

  • A 左に水平移動

  • D 右に水平移動

  • E アイテム一覧(Escで閉じる)

  • スペースを素早く2回 飛行モード/ 通常モードの切り替え
    (飛行モードはクリエイティブモードのみ)

  • スペース 上昇(飛行モード)/ ジャンプ(通常モード)

  • 左Shift 下降(飛行モード)/ 身をかがめる(通常モード)

  • Esc メニュー画面(設定、LANに公開、セーブしてタイトルに戻る)、マウスカーソルを画面外に出す

  • T チャット/サーバーコマンド、マウスカーソルを画面外に出す

####○マウス

  • マウスカーソル 見る向きを変える
  • 右クリック ブロックを置く
  • 左クリック ブロックを壊す
  • ホイール ホットバー中のアイテムから選択(または1~9のキーで指定)

####○ファンクションキー(Mac、ノートPCの場合、fnキーと共に押す)

  • F1 ヘッドアップディスプレイ(追加情報)表示の切り替え

  • F2 スクリーンショットの撮影
    保存場所;
    ・Mac;~/Library/Application Support/minecraft/versions/1.8-Forge11.14.4.1563/screenshots
    ・Windows; C:\Users\ユーザー名\AppData\Roaming.minecraft\versions\screenshots

  • F3 デバッグ情報表示の切り替え、他のキーとの組み合わせでその他の機能も

※ F3 + P 他のウィンドウに切り替わった時、「ゲームメニューを出す、一時停止する」/「ゲームメニューを出さない、一時停止しない」の切り替え

  • F5 視点の切り替え(自己、後方から、前方から)
  • F11 全画面表示の切り替え(Macでは、fn + option + F11 の時も)

#2-a.Minecraft Forgeのインストール
Modを管理するためのMinecraft Forgeをインストールする。

  1. Minecraft Forgeのウェブサイトで、「Minecraft Versions」の「1.8」を選んで、「Download Recommended (11.14.4.1563)」の「Installer」(Windowsなら「Installer-win」)をクリックする。
  2. 広告が表示されるが、数秒後に出る右上の「SKIP」ボタンを押すとダウンロードが始まる。
    (バージョンを選びたければ、「Show all downloads」をクリック。)
  3. ダウンロードされた forge-1.8-11.14.4.1563-installer.jar をダブルクリックしてインストール。

→・【1.8対応】Mac OS X でMinecraftにMod導入 - AQUAALTA
→・[Minecraft] これなら導入できる! 修正版新しいMODの導入方法- Forgeやフォルダの設定を解説 [1.7.10/1.8~] - ナポアンのマイクラ
→・【Minecraft】 1.8対応 はじめてのMod導入方法 for Windows - AQUAALTA

#2-b.再度Profileの設定(Forge用の設定を作る)

  1. 再び Minecraft を起動。

  2. Minecraft Launcherの左下の「Profile」に、「Forge」 Profile が追加されているはずなのでそれを選んで、「Edit Profile」ボタンを押す。

  3. 「Use Version」でインストールしたForgeのバージョン「release 1.8-Forge11.14.4.1563」を選ぶ。

  4. 「Profile Info」の「Game Directory」にチェックを入れて、
     /Users/ユーザー名/Library/Application Support/minecraft/versions/1.8-Forge11.14.4.1563(Mac)あるいは、
     C:¥Users¥ユーザー名¥AppData¥Roaming¥.minecraft¥versions¥1.8-Forge-11.14.4.1563(Windows)
    のように指定する。

※ このディレクトリのパスの確認法

  • Mac;
    「Finder」>「メニュー」>「移動」>optionキーを押すと「ライブラリ」が表示されるので選ぶ>「Application Support」>「Minecraft」>「versions」>「1.8-Forge11.14.4.1563」フォルダ で見つかる。

  • Windows;
    「コンピューター」>「ローカルディスク(C:)」>「ユーザー」>ユーザー名>「AppData」>「Roaming」>「.minecraft」>「versions」>「1.8-Forge-11.14.4.1563」のように辿っていける。

5.設定できたら、右下の「Save Profile」ボタンを押して、設定を保存する。

#2-c.Minecraftの起動(Forgeのインストールの確認)

  1. Minecraft Launcherの「Profile」が「Forge」になっているのを確認して、「Play」を押す。Forgeの適用されたMinecraftが起動する。
  2. Forgeが適用されると、「Mods」ボタンが増え、画面左下に Forgeのバージョンなどが表示されるのを確認する。

#3-a.Raspberry Jam Modのインストール

  1. Raspberry Jam ModのGitHubサイトの上の方にある「releases」をクリックする。

  2. 「Latest release(0.51)」の「Downloads」にある「RaspberryJamMod.jar」をクリックするとダウンロードされる。

  3. ダウンロードされた RaspberryJamMod.jar を先ほど「Game Directory」で指定したディレクトリ(Macだと、/Users/ユーザ名/Library/Application Support/minecraft/versions/1.8-Forge11.14.4.1563)にある「mods」フォルダの中に移動 or コピーする。

※ 注意;
Windowsの場合も、「Downloads」にある「RaspberryJamMod.jar」を選ぶこと。
「RaspberryJamMod-Installer.exe」を選ぶと、RaspberryJamMod.jarが上記とは別のフォルダに自動でインストールされてしまう。

※ Pythonを使う場合;
「Downloads」にある「python2-scripts.zip」と「python3-scripts.zip」もダウンロードする。

※ Minecraft 1.8に対応したRaspberry Jam Modとは別に、1.7に対応したmcpiapi modもある。

#3-b.Minecraftの起動(Raspberry Jam Modのインストールの確認)

  1. 再びMinecraft Launcherの「Profile」が「Forge」になっているのを確認して、「Play」を押す。
  2. Minecraftが起動したら「Mods」ボタンを押す。
    左側にModのリストの中に「Raspberry Jam Mod」があればインストールされている。

#3-c.新規ワールドを作る(ウィンドウ切り替え時の設定)

  1. 動作確認用に「シングルプレイ」を選択し、「ゲームモード」は「クリエイティブ」、「ワールド名」は好きに入力して、「ワールド新規作成」を押す。
  2. できたワールド画面で、F3 + P(もしくは fn + F3 + P)を押して、別のウィンドウがアクティブになっても、一時停止したり、ゲームメニューが出ないようにする。(この後、デバッグ画面表示が邪魔なら、F3を押す。)
  3. Cmd + Tab(Mac)または Alt + Tab(Windows)で別のウィンドウに切り替える。(ウィンドウは2つ以上開いておく)
  4. ワールド画面にゲームメニューが出ず、一時停止しないことを確認する。

※ Minecraftウィンドウ自体の移動などの操作は Escキーを押さないとできない。

※ プログラムの実行中は、Minecraftワールドの画面を開いておく。(Launcher画面ではなく)

※ 同じ LAN環境にいれば、ゲームメニューで「LANに公開」を選ぶと、別の人とワールドを共有(マルチプレイ)できる。

#4.Minecraft-Pi-Ruby gemのインストール(Rubyの場合)
##4-A.通常のMinecraft-Pi-Ruby gemのインストール

$ gem install minecraft-pi-ruby
Successfully installed minecraft-pi-ruby-0.0.1
Parsing documentation for minecraft-pi-ruby-0.0.1
Done installing documentation for minecraft-pi-ruby after 1 seconds
1 gem installed

##4-B.独自拡張したMinecraft-Pi-Ruby gemのインストール(おすすめ)
Pythonに比べ機能が不足していたので、機能追加した。
→・https://github.com/noanoa07/minecraft-pi-ruby/tree/feature

$ gem install specific_install
$ gem specific_install https://github.com/noanoa07/minecraft-pi-ruby.git feature

※ Windowsの場合、gitが必要。

#5-A.プログラムの実行(Ruby)
##5-A-1.Rubyプログラムを書く

hello.rb
require 'minecraft-pi-ruby'

mc = Minecraft.new
mc.say 'Hello Minecraft World!'

##5-A-2.Rubyプログラムの実行
Minecraftワールドを開いた状態のままで;

$ ruby hello.rb

Minecraftワールドの画面に;
Hello Minecraft World!
と表示されれば成功!

※ irbでも実行可能

※ 使える命令は、下記の参考A あるいは Minecraft-Pi-Rubyのウェブサイト参照

#5-B.プログラムの実行(Python)
##5-B-1.MCPIフォルダ

  1. Raspberry Jam ModのGitHubサイトから、python2-scripts.zip(Python2の場合)あるいは python3-scripts.zip(Python3の場合)をダウンロードして展開する。

  2. 展開してできた「mcpipy」フォルダの中には様々な Pythonのサンプルプログラムが入っているが、それと共に「MCPI」フォルダも入っている。

##5-B-2.Pythonプログラムを書く
MCPIフォルダと同じ場所に作成する。

hello.py
import mcpi.minecraft as minecraft
 
mc = minecraft.Minecraft.create()
mc.postToChat("Hello Minecraft World!")

##5-B-3.Pythonプログラムの実行
Minecraftワールドを開いた状態のままで;

$ cd  mcpipy
$ python hello.py

Minecraft の画面に
Hello Minecraft World!
と表示されれば成功!

mcpipyフォルダにある他のサンプルプログラムも実行してみる。

※ インタラクティブシェルでも実行可能

※ 命令一覧;
→・Minecraft API - <Stuff about="code" />

※ Pythonで書かれたプログラム、解説;
→・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 Pi Recipe Cards - arghbox
→・Python Programming with Minecraft Pi: Early Draft - arghbox

#参考A.Minecraft-Pi-Rubyのコマンド一覧
##○初期設定
 require 'minecraft-pi-ruby'
 mc = Minecraft.new

 実行には、上記の2行が必要。(mcは任意の変数名。)

##○コマンド

  • say "message"
    画面に文字(message)を表示

  • set_camera_mode(Raspberry Pi環境のみ)
    カメラモードを設定(:fixed、:normal、:follow)

  • set_block(x, y, z, ブロックID[, ブロックデータ]) または
    set_block(position, ブロックID[, ブロックデータ])

  例)set_block(0, 0, 0, Block::STONE)
  ブロックIDは数字でも良い
  ブロックデータは省略可
 (ブロックID、ブロックデータは後述)

※ 座標の指定は、(x, y, z) または position = Position.new(x, y, z) で指定

※ Minecraftの座標は、ブロック単位で、y座標が高さ方向になる(上方が +)

  • 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座標)を返す

  • set_player_position(x ,y, z) または set_player_position(position)
     プレーヤーを座標 (x, y, z) に置く

  • get_player_position  ※独自拡張
    プレーヤーの座標を Positionクラスで返す。

  • キー入力の取得
    Minecraftからキー入力の情報を取得することは(現状では)できない。また、Minecraftウィンドウがアクティブだと、ターミナルで実行中のプログラムにはキー入力の取得はできない。
    そこで、ターミナルウィンドウをアクティブにしつつ、Minecraftウィンドウを表示させることで、キー入力の情報をターミナル側で取得する。
    (上記 3-c.「ウィンドウ切り替え時の設定」で、別のウィンドウがアクティブになっても、一時停止したり、ゲームメニューが出ないようにしておくこと)
     
     なお、キー入力の取得には、Rubyの io/consoleライブラリが使える。
     →・Ruby - ターミナルのキー入力を得てカーソル移動とかする (curses無し) - Qiita

#参考B.サンプルプログラム(Ruby)
(license; public domain)

○画面に文字を表示

hello.rb

require 'minecraft-pi-ruby'

mc = Minecraft.new
mc.say 'Hello Minecraft World!'

○土地を平地化

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
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(Mac)または Alt + Tab(Windows)でMinecraftワールドを開いたまま、ターミナル(コマンドプロンプト)ウィンドウに切り替えて実行。
プログラムの終了は Ctrl + C。
(上記 3-c.「ウィンドウ切り替え時の設定」で、別のウィンドウがアクティブになっても、一時停止したり、ゲームメニューが出ないようにしておくこと)。

#参考C.ブロック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が一番高い)

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
 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が一番高い)

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" />

####参考;

(画面下の「Next」や「View All Steps」で続きが表示される)

#####元記事;

87
107
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?