Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Minecraft概論
Search
stonriver
December 05, 2018
Technology
0
300
Minecraft概論
stonriver
December 05, 2018
Tweet
Share
More Decks by stonriver
See All by stonriver
中規模イベントに急造で変なネットワークを構築する
strvworks
1
750
並行処理入門 -Goで遊ぶ-
strvworks
0
220
ターミナル雑記
strvworks
2
1.2k
お手軽金盾体験
strvworks
1
690
Kosen_LT_ONLINEのおしらせ
strvworks
0
72
日本列島の移動速度に関する考察
strvworks
1
120
PythonにおけるGUIフレームワークのはなし
strvworks
0
310
快適な読書環境のご提案
strvworks
0
110
テクノ手芸
strvworks
0
62
Other Decks in Technology
See All in Technology
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
Amazon SageMaker Unified Studio(Preview)、Lakehouse と Amazon S3 Tables
ishikawa_satoru
0
150
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
200
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
160
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
450
ハイテク休憩
sat
PRO
2
150
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
540
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
Featured
See All Featured
Producing Creativity
orderedlist
PRO
341
39k
Bash Introduction
62gerente
608
210k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building an army of robots
kneath
302
44k
Designing Experiences People Love
moore
138
23k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
How GitHub (no longer) Works
holman
311
140k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Transcript
自己紹介
自己紹介 名前: すとんりばー クラフター歴: 5年 得意分野: コマンド、回路設計
突然ですが皆さん
Minecraftをプレイしたこと はありますか?
Minecraftとは
Minecraftとは Minecraftとは、2009年にMojangより発売されたサ ンドボックス型ゲーム。 ブロックで構築された世界でサバイバルや建築がで きる。 近年は教育分野でも注目されいます。が…。
Minecraftをたかがゲームと甘く 見てはいませんか?
仕方がないので 開講
すとんりばー 著
Minecraftで できること
サバイバル
サバイバル ランダム生成される広大な世界
サバイバル 木こりから始まり
サバイバル クラフトで道具を作ったり
サバイバル 洞窟で鉱石を集めたり
サバイバル 君だけのサバイバルライフを!
サバイバル MIT在学サバイバルガチ勢のコメント
いくらでも遊べるサバイバル
いくらでも遊べるサバイバル 僕はちゃんとやったことがない
建築
Minecraftで作られた建築物 お城
建築はすごい
建築はすごい 僕に語れることはない
レッドストーン回路
レッドストーン回路 redstone dust block torch 伝達系 動力系
レッドストーン回路 lever button lamp 操作系 受信系
レッドストーン回路 伝達系は動力系の信号を伝達する
レッドストーン回路 トーチは動力を受けると消灯する
レッドストーン回路 つまりNOT
NOTができるということは
レッドストーン回路 NANDができる
NANDができるということは
レッドストーン回路 回路が組める
レッドストーン回路 3Bit加算だってできる
レッドストーン回路 ルックアップテーブルを実装した 高速計算機を実装した人もいる
わあいすごいね
わあいすごいね ちょっとわかるけど 回路は専門じゃない
-コラム- ブロックとエンティティ
ブロックとエンティティ Minecraftの世界にはブロックとエンティティの2種類 が存在する。
ブロックとエンティティ ブロックは固定の整数座標に留まり、見た目を表現 したりその場でGUIを用いた機能を発揮したりするこ とが多い。 エンティティは浮動小数点座標を含むダイナミックな 移動が可能。ワールド上で目に見える独特の機能を 持つ事が多い。
ブロックとエンティティ
ブロックとエンティティ プレイヤー:エンティティ 動物: エンティティ 防具立て: エンティティ トロッコ: エンティティ ダイヤモンドブロック:ブロック 草ブロック:
ブロック
やっと本題
コマンド
コマンドとは Minecraftの世界の事象を操作できる命令文。 権限を持つユーザーのみが利用できる。
4つだけコマンドの例を ご紹介
/giveコマンド 構文: /give [対象] [namespace]:[item_id] [count] 実例:
/setblockコマンド 構文: /setblock [x] [y] [z] [namespace]:[block_id] [mode] 実例: →
/scoreboardコマンド 概要: スコアというオブジェクトを宣言できる。 宣言されたオブジェクトはすべてのエンティティごとに値を保持で きるようになる。スコア間の演算・比較が可能。別コマンドに演算・ 比較結果を渡すことでさらに別のコマンドの条件付き実行等も可 能になるスコアを扱うことができるようになるコマンド。
/scoreboardコマンド 例: /scoreboard objective add param1 dummy →param1というスコアオブジェクトを宣言 ↓ /scoreboard
players set @e[limit=10] param1 100 →@e(すべてのエンティティ)のなかで近傍の10体のparam1スコ アオブジェクトに100をセット
/scoreboardコマンド 例: /scoreboard players operation @p AX += @p BX
→@p(近傍プレイヤー)のスコアAXに@pのスコアBXを加算した 値を@pのスコアAXにセット /socreboardには他にも大量のサブコマンドが!
/dataコマンド 概要: entityまたはblockがJVM上で保持している独自形 式のデータであるNBT(Named Binary Tag)データ を指定して、get,merge,removeなどの操作を行うこ とができる。
/dataコマンド 構文: /data get block [x] [y] [z] [path] [scale]
x y z のブロックの内部のNBTデータのpath位置にある値をscale 倍した値を取得 /data merge block [x] [y] [z] [NBT] x y z のブロックの内部のNBTデータに指定したNBTデータをマー ジする。競合箇所は上書きする。 他にも沢山のサブコマンドが!
今回は4つだけコマンドを紹介し ました。
Minecraftにはなんと 計69種ものコマンドが あります。
さらに、これらのコマンドを 保存して実行できる、コマンドブロックという ブロックが存在します。
コマンドブロック 左から、インパルス、チェイン、リピートというモード のコマンドブロックとなっています。
コマンドブロック インパルスモードでは、レッドストーンの信号が入る と1度だけ内部に書き込まれたコマンドを実行しま す。
コマンドブロック チェインモードでは、一つ後ろのコマンドブロックの実 行に連鎖してコマンドが実行されます。
コマンドブロック リピートモードでは、ゲーム内の最小時間(1Tick)ご とに1回、書き込まれたコマンドが実行されます。
さらに強力なツールとして、 コマンドを外部ファイルに列挙して、 ファイルごとに実行が可能な Function機能も存在します。
実際にものを作ってみた
コマンド動作式 ノイマン型コンピュータ
コマンド動作式ノイマン型コンピュータ 今回は、次のようなアセンブラを実行可能なコン ピュータをMinecraft上で構築することを目標に設計 しました。 設計上、数値を扱うかレジスタを 扱うかで命令を変えていますが、 “n”などを抜かして通常のアセン ブラとして読んでOKです。
1.メモリの設計
コマンド動作式ノイマン型コンピュータ 何を動作させるにせよ、メモリ空間が必要です。今回 は、今後大きな規模のプログラムを実行する可能性 も考慮して、メモリ作成時に指定したサイズを可変で 確保できるメモリを設計しました。
コマンド動作式ノイマン型コンピュータ 先程紹介したコマンドブロックには、SuccessCountとい うNBTタグがあります。 本来はコマンドの成功回数を格納する場所ですが、 /dataコマンドでrwを行うことで値の保存場所として利用 可能なはずです。 つまり、コマンドブロック1つを メモリセル1つと捉えられます。
コマンド動作式ノイマン型コンピュータ よって、前述の要件を満たすためには、指定したサイズ のコマンドブロックの塊を生成する機構をコマンドで構築 する必要があります。 実際に作成したメモリ確保装置の動作をお見せします。
2.メモリコントローラの実装
コマンド動作式ノイマン型コンピュータ これで確保自体は成功しましたが、まだメモリ内の値 にアクセスするためのコントローラの実装がありませ ん。
コマンド動作式ノイマン型コンピュータ 今回は、メモリ塊のある1頂点に1体の基準点エン ティティを設置し、そのエンティティとの3次元相対距 離をコマンドで計算することで、任意のメモリセルに アクセスする方式を実装しました。
コマンド動作式ノイマン型コンピュータ エンティティの3次元移動+読み書きであるため、コマ ンド的にステップ数がかさみますが、処理の性質上 1Tickで処理しなければ次の命令解釈と競合してコ ンピュータが正常に処理を継続できなくなります。 すべての処理を1Tickに収めるのに苦労しました。
3.ニーモニックからオペコードへの変換
コマンド動作式ノイマン型コンピュータ 次に、アセンブラニーモニックを、定義した各命令ごとの オペコードに変換して、確保したコマンドブロックメモリに 順に書き込む必要があります。 流石にテキスト処理はコマンドでは困難なので(テキスト ファイルが読み込めないので)、Pythonでアセンブラから マインクラフトのコマンドへの変換プログラムを作成しま した。
コマンド動作式ノイマン型コンピュータ これにより、アセンブラが以下のようにメモリへの書き込 みコマンド群へと変換されます。
コマンド動作式ノイマン型コンピュータ このコマンド群をファイルに書き込み、Minecraftの Function機能から呼び出すことで、ワールド上のコマン ドブロックメモリに先程のアセンブラニーモニックのオペ コードが格納されることになります。 実際に変換→書き込みの流れをやってみます。
4.オペコードの解釈
コマンド動作式ノイマン型コンピュータ これでメモリ上の準備は整いました。しかし、まだこのオ ペコードを解釈するプロセッサ実装に当たる部分を記述 していないので、これもコマンドで実装します。これに関 しては命令ごとに地道に実装していくしかありません。
コマンド動作式ノイマン型コンピュータ 結果、以下のようなコマンド実装ファイル群が出来上が ります。プログラミング言語 ではなくコマンドで実装するので、 自由度が低く記述がとても大変で す。
実装の一部 ADDの実装の冒頭
5.実行用コンピュータの実装
コマンド動作式ノイマン型コンピュータ ここまでで大体の処理は完成しましたが、処理上で扱っ てきたレジスタに当たるスコアを保持して管理、さらに表 示するインターフェイスを用意する必要があります。
そこで作成したのが、こちらの制御盤です。
↓のエンティティがレジスタのスコアを保持
看板の値はリアルタイムにレジスタの値を 反映します。
STEP RUNボタンを押すとアセンブラが1命令 分解釈実行されます。
RUNレバーを下げると、STEP RUNが毎Tick実 行され、1秒間に20命令を処理します。
コマンド動作式ノイマン型コンピュータ 実際にコマンド動作式ノイマン型コンピュータが動作して いるところを見てみましょう!
Minecraft の可能性
Minecraftの可能性 基本的に、やろうと思えばなんでもできます。 今回はゲーム的機能に絞って紹介しましたが、リソース パックというファイルを読み込ます機能を利用すれば、 自分の作成した画像をブロックのテクスチャに適用した り、ブロックのモデルデータを変更したりなども可能で す。
Minecraftの可能性 また、そこから発展してMod作成を行えばJavaやKotlin を用いたプログラミングに触れることもできますし、先程 紹介した回路設計や最適化方面に進んでいくこともでき ます。
ただし
Minecraftの可能性 これは僕の意見ですが、結局こんなに可能性に溢れた Minecraftを教育に取り入れるなどと言っても、それなら ば現実世界のほうが可能性は豊富にありますし、どんな 遊び方をするかによって大きく変わると思われます。 手放しにすごいと取り入れても、予想通りに進んでくれる 可能性のほうが低そう。
Minecraftの可能性 でも!!Minecraftはどんな遊び方もできて、技術を身に つけることだってできる開発環境です。 みなさんもMinecraft上で加算器を作ったり、コンピュー タを作ったり、MinecraftでMinecraftをエミュレートしてみ たり、ユビキタスMinecraft社会を迎えたりしてみたいと 思いませんか!?
None