Minecraft のマップを生成するソフトウェアを書いた

はじめまして。kofuk です。このサークルに入ったのはたしか去年の11月くらいだったのでまだ新入部員です[要出典]。

もう数か月前になりますが,Minecraft のセーブデータをパーズして上空から見た画像を生成するソフトウェアを書いたので,その紹介をします。このサークルの活動とは直接は関係がないです。

こちらがそのソースコードのリポジトリです。
残念ながら,私一人で作っているので開発リソース的に GNU/Linux にしか対応していないです。以前は Windows にも対応していたのですが,Windows で使う人がいなかったので(そう,私の知りうる範囲では私しかユーザがいなかったのです)テストするのも面倒になってやめました。ただ *nix 的な API を使っているのは一部なので,Windows に移植するのはそんなに大変じゃないと思います(Windows に詳しい人がいたらプラットフォーム依存部分の移植をお願いしたい……)。

これは私が個人的に管理している Minecraft のワールドで,Web ページでマップを見られるようにするために使っています。あと指定した座標の一番上のブロックの ID を取る機能とかも実装していて,右クリックでブロック ID を確認できたりします。x, z 座標を与えられたらその座標の一番上のブロック ID を返すというのもこのソフトウェアの機能のひとつです。

以下は需要あまりない気がするけど技術的な話をつらつらと書いていきます。

最初は Python で書いていて(というのも Python だとよさげなライブラリがけっこうあったので)遅かったので,C++ で書き直したとかいう話があったりします。ただ C++ だと良くも悪くも書いた以上のことはあまりやってくれないので別の辛さはけっこうあったりします。余談ですが,先日もとの Python ライブラリの作者に GitHub でスターをいただきました。

まず Python だと遅かったという話をすると,Python だと GIL とかがあってマルチスレッドにしてもその分のパフォーマンスは発揮できないというのがあったりします。GIL というのは Global Interpreter Lock の略でデータ競合(並列処理で別の実行コンテキストが同じメモリ領域に書き込んでしまってバグるみたいな状態)を避けるために,同時に1つの Python のコードしか実行されないようになっているということです。Python には(Python じゃなくてもできるけど)スレッドじゃなくてプロセスでやるという方法もあったりしますが,それでも処理が遅くて不満だったりしたので,やっぱり C/C++ で書き直した方がいいだろう判断して移植しました。これには私が Python があまり気に入らないという背景もけっこう関係していたりします。インデントでブロックを表現するってのがコード足したりするときにけっこう厄介で。

ただ,GIL がないということは,競合条件でバグらないように自分で書いてあげないといけないので面倒くさいです。マルチスレッドって必要ないならなるべく書きたくない機能だと思います。(ちょっと危ないコードがあったりするんですが,適当なワークアラウンドで見ないふりをしたりしています,はい,だめです)。

最近の更新としては,前から気になっていた Unit テストを書き始めたことです。とりあえず導入して新しい機能のところから書いていけばいいだろうということで,実際にはあまり書いていないですが,書いたところでも既にバグが見つかりました。やっぱりテスト書くのは大切ですね。

直近の TODO としては,Minecraft の大型アップデートに対応するということだと思います。これがブロックの追加が多そうで面倒だなという感じで見ています。

ということで,今回はこれくらいですかね。最後までお読みいただき,ありがとうございました。

僕の流行り

僕のハマっているもの

 

どうもみなさんお久しぶりです、初めましての方は初めまして、ごジンクスです!

最近、コロナで外出することが出来ず、暇を持て余していると思いますが、だからといって、あまり外出はしないようにしましょう。

といっても、やはりずっと家にいるのは、暇でしょう。

そこで今回、僕のハマっているゲームを紹介したいと思います。

 

そのゲームは

プリンセスコネクトRe:DIVE

です!

 

このゲームは、記憶を失ってしまった主人公である騎士くんが、様々な女の子と仲良くなり、魔物を倒すというゲームです。ダンジョンRPGで、レベルやスキルを上げていかないとなかなか敵を倒せないので、やりこみがいがあると思います!

 

ただ、このゲームの魅力はこれだけではありません!

その中でも今回は、3つご紹介させていただきます!

 

まず1つ目、キャラがかわいい!

 

やっぱり、これは外せないでしょう!キャラのデザインもよく、キャラにそれぞれの個性があるから、面白くて、かわいい!

ちなみに、今の中での僕の推しは、ユイとクロエですね~。

 

続いて2つ目の魅力は、ストーリーが良き!

 

メインストーリーはネタバレもあるので、詳しくは言えませんが、それぞれのギルドが争うことになるのだが、その裏で怪しい影が動いており世界を脅かそうとしていた、果たして騎士くんはこの世界を救うことができるのだろうか、みたいな感じです。

他にも、ギルドストーリー、キャラストーリーがあり、そこでは、それぞれのキャラの魅力が詰まっていて、僕のような萌え豚には大歓喜ですよ!!詳しくはプリコネRをインストールして遊んでみてください!

 

最後に3つ目の魅力は、アニメーションがあること!

 

ゲームにアニメーション入れるのは、ずるいですよ、こんなんはまってしまいますよ~。それぞれの必殺技モーションにアニメーションがあるため、それが可愛かったり、かっこよかったりするから、もう目が離せませんよ~。

しかも、ストーリーにもアニメーションが入っているため、アニメが好きな人にはたまらないコンテンツです。

 

さて、いかがだったでしょうか。このゲームを遊びたいという人は、ぜひプリコネRで検索検索~♪

 

おまけ

おすすめアニメ

 

異種族レビュアーズ

恋する小惑星

痛いのは嫌なので防御力に極振りしたいと思います。

 

Twitter

https://twitter.com/gozipro_39318

 

新部長爆誕!!

新部長爆誕!!

お久しぶりです、ごジンクスです!!!

なんと、

先日から、

部長になりました!!!

いやぁ~、部長になれてうれしいですね~~!!

せっかく部長になれたので、いろんなことをみんなとやってみたいですね~!

unityでたくさんのゲームを作ったり、ほかの大学の方たちと一緒にゲーム作りをしたり、コミックマーケットにも出店できたらいいですね~!

そんなわけで、部長として、サークルを盛り上げていけたらいいなと思っています。

これからどうぞよろしくお願いします!!

ごジンクス

twitter

https://twitter.com/gozipro_39318