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
290
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
680
Kosen_LT_ONLINEのおしらせ
strvworks
0
72
日本列島の移動速度に関する考察
strvworks
1
120
PythonにおけるGUIフレームワークのはなし
strvworks
0
300
快適な読書環境のご提案
strvworks
0
100
テクノ手芸
strvworks
0
60
Other Decks in Technology
See All in Technology
Windows Autopilot Deployment by OSD Guy
tamaiyutaro
0
410
Evangelismo técnico: ¿qué, cómo y por qué?
trishagee
0
320
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
100
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
150
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
410
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
110
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
370
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
190
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
150
AIチャットボット開発への生成AI活用
ryomrt
0
150
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
490
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
250
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Become a Pro
speakerdeck
PRO
25
5k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Building an army of robots
kneath
302
42k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
BBQ
matthewcrist
85
9.3k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Teambox: Starting and Learning
jrom
133
8.8k
Why Our Code Smells
bkeepers
PRO
334
57k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
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